fpspreadsheet: Cleanup fpsworksheetgrid

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6539 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2018-06-26 17:41:05 +00:00
parent cba608d725
commit 53e91906b0

View File

@ -61,29 +61,6 @@ type
property JoinStyle default pjsMiter; property JoinStyle default pjsMiter;
end; end;
(*
TsSingleLineStringCellEditor = class(TEdit)
private
FGrid: TsCustomWorksheetGrid;
FCol, FRow:Integer;
// procedure WMKillFocus(var AMessage: TLMKillFocus); message LM_KILLFOCUS;
protected
procedure Change; override;
procedure KeyDown(var AKey: Word; AShift : TShiftState); override;
procedure msg_GetGrid(var AMsg: TGridMessage); message GM_GETGRID;
procedure msg_GetValue(var AMsg: TGridMessage); message GM_GETVALUE;
procedure msg_SelectAll(var AMsg: TGridMessage); message GM_SELECTALL;
procedure msg_SetGrid(var AMsg: TGridMessage); message GM_SETGRID;
procedure msg_SetPos(var AMsg: TGridMessage); message GM_SETPOS;
procedure msg_SetValue(var AMsg: TGridMessage); message GM_SETVALUE;
procedure WndProc(var AMsg: TLMessage); override;
public
constructor Create(AOwner: TComponent); override;
procedure EditingDone; override;
property OnEditingDone;
end;
*)
TsMultilineStringCellEditor = class(TMemo) TsMultilineStringCellEditor = class(TMemo)
private private
FGrid: TsCustomWorksheetGrid; FGrid: TsCustomWorksheetGrid;
@ -281,7 +258,6 @@ type
procedure DefineProperties(Filer: TFiler); override; procedure DefineProperties(Filer: TFiler); override;
procedure DoCopyToClipboard; override; procedure DoCopyToClipboard; override;
procedure DoCutToClipboard; override; procedure DoCutToClipboard; override;
procedure DoEditorHide; override;
procedure DoEditorShow; override; procedure DoEditorShow; override;
procedure DoEnter; override; procedure DoEnter; override;
procedure DoExit; override; procedure DoExit; override;
@ -1140,185 +1116,6 @@ begin
end; end;
{*******************************************************************************
* TsSingleLineStringCellEditor *
*******************************************************************************}
(*
constructor TsSingleLineStringCellEditor.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
AutoSize := false;
end;
procedure TsSingleLineStringCellEditor.Change;
begin
inherited Change;
if (FGrid <> nil) and Visible then begin
FGrid.EditorTextChanged(FCol, FRow, Text);
end;
end;
{
function TsSingleLineStringCellEditor.DoValidText(const AText: String): Boolean;
var
err: String;
begin
Result := FGrid.ValidFormula(AText, err);
if not Result then
MessageDlg(err, mtError, [mbOK], 0);
end;
}
procedure TsSingleLineStringCellEditor.EditingDone;
begin
inherited EditingDone;
if FGrid <> nil then
FGrid.EditingDone;
end;
procedure TsSingleLineStringCellEditor.msg_GetGrid(var AMsg: TGridMessage);
begin
AMsg.Grid := FGrid;
AMsg.Options:= EO_IMPLEMENTED;
end;
procedure TsSingleLineStringCellEditor.msg_GetValue(var AMsg: TGridMessage);
begin
AMsg.Col := FCol;
AMsg.Row := FRow;
AMsg.Value := Text;
end;
procedure TsSingleLineStringCellEditor.KeyDown(var AKey: Word;
AShift: TShiftState);
function AllSelected: boolean;
begin
Result := (SelLength > 0) and (SelLength = UTF8Length(Text));
end;
function AtStart: Boolean;
begin
Result := (SelStart = 0);
end;
function AtEnd: Boolean;
begin
Result := ((SelStart + 1) > UTF8Length(Text)) or AllSelected;
end;
procedure DoEditorKeyDown;
begin
if FGrid <> nil then
FGrid.EditorkeyDown(Self, AKey, AShift);
end;
procedure DoGridKeyDown;
begin
if FGrid <> nil then
FGrid.KeyDown(AKey, AShift);
end;
function GetFastEntry: boolean;
begin
if FGrid <> nil then
Result := FGrid.FastEditing
else
Result := False;
end;
procedure CheckEditingKey;
begin
if (FGrid = nil) or FGrid.EditorIsReadOnly then
AKey := 0;
end;
var
IntSel: boolean;
begin
inherited KeyDown(AKey, AShift);
case AKey of
VK_F2:
if AllSelected then begin
SelLength := 0;
SelStart := Length(Text);
end;
VK_DELETE, VK_BACK:
CheckEditingKey;
VK_UP, VK_DOWN:
DoGridKeyDown;
VK_LEFT, VK_RIGHT:
if GetFastEntry then
begin
IntSel:=
((AKey = VK_LEFT) and not AtStart) or
((AKey = VK_RIGHT) and not AtEnd);
if not IntSel then begin
DoGridKeyDown;
end;
end;
VK_END, VK_HOME:
;
VK_ESCAPE:
begin
doGridKeyDown;
if AKey <> 0 then begin
Text := FGrid.FOldEditorText;
FGrid.EditorHide;
end;
end;
else
DoEditorKeyDown;
end;
end;
procedure TsSingleLineStringCellEditor.msg_SelectAll(var AMsg: TGridMessage);
begin
Unused(AMsg);
SelectAll;
end;
procedure TsSingleLineStringCellEditor.msg_SetGrid(var AMsg: TGridMessage);
begin
FGrid := AMsg.Grid as TsCustomWorksheetGrid;
AMsg.Options := EO_AUTOSIZE or EO_SELECTALL or EO_HOOKKEYPRESS or EO_HOOKKEYUP;
end;
{
procedure TsSingleLineStringCellEditor.msg_SetMask(var AMsg: TGridMessage);
begin
EditMask := AMsg.Value;
end;
}
procedure TsSingleLineStringCellEditor.msg_SetPos(var AMsg: TGridMessage);
begin
FCol := AMsg.Col;
FRow := AMsg.Row;
end;
procedure TsSingleLineStringCellEditor.msg_SetValue(var AMsg: TGridMessage);
begin
Text := AMsg.Value;
SelStart := UTF8Length(Text);
end;
{
procedure TsSingleLineStringCellEditor.WMKillFocus(var AMessage: TLMKillFocus);
begin
end;
}
procedure TsSingleLineStringCellEditor.WndProc(var AMsg: TLMessage);
begin
if FGrid <> nil then
case AMsg.Msg of
LM_CLEAR, LM_CUT, LM_PASTE:
begin
if FGrid.EditorIsReadOnly then
exit;
end;
end;
inherited WndProc(AMsg);
end;
*)
{******************************************************************************* {*******************************************************************************
* TsMultiLineStringCellEditor * * TsMultiLineStringCellEditor *
*******************************************************************************} *******************************************************************************}
@ -1335,15 +1132,6 @@ begin
if (FGrid <> nil) and Visible then if (FGrid <> nil) and Visible then
FGrid.EditorTextChanged(FCol, FRow, Text); FGrid.EditorTextChanged(FCol, FRow, Text);
end; end;
(*
function TsMultiLineStringCellEditor.DoValidText(const AText: String): Boolean;
var
err: String;
begin
Result := FGrid.ValidFormula(AText, err);
if not Result then
MessageDlg(err, mtError, [mbOK], 0);
end; *)
procedure TsMultilineStringCellEditor.EditingDone; procedure TsMultilineStringCellEditor.EditingDone;
begin begin
@ -1471,10 +1259,6 @@ begin
Text := AMsg.Value; Text := AMsg.Value;
SelStart := UTF8Length(Text); SelStart := UTF8Length(Text);
end; end;
(*
procedure TsMultiLineStringCellEditor.WMKillFocus(var AMessage: TLMKillFocus);
begin
end; *)
procedure TsMultilineStringCellEditor.WndProc(var AMsg: TLMessage); procedure TsMultilineStringCellEditor.WndProc(var AMsg: TLMessage);
begin begin
@ -1545,14 +1329,6 @@ begin
RangeSelectMode := rsmMulti; RangeSelectMode := rsmMulti;
{$ENDIF} {$ENDIF}
(*
FSingleLineStringEditor := TsSingleLineStringCellEditor.Create(self);
FSingleLineStringEditor.name :='SingleLineStringEditor';
FSingleLineStringEditor.Text := '';
FSingleLineStringEditor.Visible := False;
FSingleLineStringEditor.Align := alNone;
FSingleLineStringEditor.BorderStyle := bsNone; *)
dec(FRowHeightLock); dec(FRowHeightLock);
UpdateRowHeights; UpdateRowHeights;
end; end;
@ -1568,7 +1344,6 @@ begin
FreeAndNil(FCellFont); FreeAndNil(FCellFont);
FreeAndNil(FSelPen); FreeAndNil(FSelPen);
FreeAndNil(FFrozenBorderPen); FreeAndNil(FFrozenBorderPen);
// FreeAndNil(FSingleLineStringEditor);
FreeAndNil(FMultiLineStringEditor); FreeAndNil(FMultiLineStringEditor);
inherited Destroy; inherited Destroy;
end; end;
@ -1889,10 +1664,8 @@ begin
if (cell = nil) or not (cell^.ContentType in [cctUTF8String]) then // ... non-label cells if (cell = nil) or not (cell^.ContentType in [cctUTF8String]) then // ... non-label cells
exit; exit;
// fmt := Workbook.GetPointerToCellFormat(cell^.FormatIndex);
idx := Worksheet.GetEffectiveCellFormatIndex(cell); idx := Worksheet.GetEffectiveCellFormatIndex(cell);
fmt := Workbook.GetPointerToCellFormat(idx); fmt := Workbook.GetPointerToCellFormat(idx);
// fmt := Worksheet.GetPointerToEffectiveCellFormat(cell);
if (uffWordWrap in fmt^.UsedFormattingFields) then // ... word-wrap if (uffWordWrap in fmt^.UsedFormattingFields) then // ... word-wrap
exit; exit;
if (uffTextRotation in fmt^.UsedFormattingFields) and // ... vertical text if (uffTextRotation in fmt^.UsedFormattingFields) and // ... vertical text
@ -2236,22 +2009,6 @@ begin
WorkbookSource.PasteCellsFromClipboard(coCopyCell); WorkbookSource.PasteCellsFromClipboard(coCopyCell);
end; end;
procedure TsCustomWorksheetGrid.DoEditorHide;
var
msg: String;
begin
inherited;
{
// The following code is reached when an error is found in the cell formula
// being edited and another control is selected.
if (FEditText <> '') then begin
if not lula(FEditText, msg) then
MessageDlg(msg, mtError, [mbOK], 0);
FEditText := '';
end;
}
end;
{ Make the cell editor the same size as the edited cell, in particular for { Make the cell editor the same size as the edited cell, in particular for
even for merged cells; otherwise the merge base content would be seen during even for merged cells; otherwise the merge base content would be seen during
editing at several places. } editing at several places. }
@ -3459,7 +3216,6 @@ begin
idx := Worksheet.GetEffectiveCellFormatIndex(lCell); idx := Worksheet.GetEffectiveCellFormatIndex(lCell);
fmt := Workbook.GetPointerToCellFormat(idx); fmt := Workbook.GetPointerToCellFormat(idx);
// fmt := Worksheet.GetPointerToEffectiveCellFormat(lCell);
wrapped := (uffWordWrap in fmt^.UsedFormattingFields) or (fmt^.TextRotation = rtStacked); wrapped := (uffWordWrap in fmt^.UsedFormattingFields) or (fmt^.TextRotation = rtStacked);
RTL := IsRightToLeft; RTL := IsRightToLeft;
if (uffBiDi in fmt^.UsedFormattingFields) then if (uffBiDi in fmt^.UsedFormattingFields) then
@ -3677,82 +3433,6 @@ begin
end; end;
end; end;
(*
{@@ ----------------------------------------------------------------------------
The "colors" used by the spreadsheet are indexes into the workbook's color
palette. If the user wants to set a color to a particular RGB value this is
not possible in general. The method FindNearestPaletteIndex finds the bast
matching color in the palette.
@param AColor Color index into the workbook's palette
-------------------------------------------------------------------------------}
function TsCustomWorksheetGrid.FindNearestPaletteIndex(AColor: TColor): TsColor;
begin
Result := fpsVisualUtils.FindNearestPaletteIndex(Workbook, AColor);
end;
*)
(*
{@@ ----------------------------------------------------------------------------
Notification by the workbook link that a cell has been modified. --> Repaint.
-------------------------------------------------------------------------------}
procedure TsCustomWorksheetGrid.CellChanged(ACell: PCell);
begin
Unused(ACell);
Invalidate;
end;
{@@ ----------------------------------------------------------------------------
Notification by the workbook link that another cell has been selected
--> select the cell in the grid
-------------------------------------------------------------------------------}
procedure TsCustomWorksheetGrid.CellSelected(ASheetRow, ASheetCol: Cardinal);
var
grow, gcol: Integer;
begin
if (FWorkbookLink <> nil) then
begin
grow := GetGridRow(ASheetRow);
gcol := GetGridCol(ASheetCol);
if (grow <> Row) or (gcol <> Col) then begin
Row := grow;
Col := gcol;
end;
end;
end;
{@@ ----------------------------------------------------------------------------
Notification by the workbook link that a new workbook is available.
-------------------------------------------------------------------------------}
procedure TsCustomWorksheetGrid.WorkbookChanged;
begin
WorksheetChanged;
end;
{@@ ----------------------------------------------------------------------------
Notification by the workbook link that a new worksheet has been selected from
the current workbook. Is also called internally from WorkbookChanged.
-------------------------------------------------------------------------------}
procedure TsCustomWorksheetGrid.WorksheetChanged;
begin
if Worksheet <> nil then begin
//Worksheet.OnChangeCell := @ChangedCellHandler;
//Worksheet.OnChangeFont := @ChangedFontHandler;
ShowHeaders := (soShowHeaders in Worksheet.Options);
ShowGridLines := (soShowGridLines in Worksheet.Options);
if (soHasFrozenPanes in Worksheet.Options) then begin
FrozenCols := Worksheet.LeftPaneWidth;
FrozenRows := Worksheet.TopPaneHeight;
end else begin
FrozenCols := 0;
FrozenRows := 0;
end;
Row := FrozenRows;
Col := FrozenCols;
end;
Setup;
end;
*)
{@@ ---------------------------------------------------------------------------- {@@ ----------------------------------------------------------------------------
Returns the background color of a cell. The color is given as an index into Returns the background color of a cell. The color is given as an index into
the workbook's color palette. the workbook's color palette.
@ -4236,18 +3916,6 @@ begin
Result := TrimToCell(cell) Result := TrimToCell(cell)
else else
Result := Worksheet.ReadAsText(cell); Result := Worksheet.ReadAsText(cell);
{
if Worksheet.ReadTextRotation(cell) = rtStacked then
begin
s := Result;
Result := '';
for i:=1 to Length(s) do
begin
Result := Result + s[i];
if i < Length(s) then Result := Result + LineEnding;
end;
end;
}
end; end;
end; end;
end; end;
@ -4491,12 +4159,6 @@ begin
cbSouth : if ACell^.Row < r2 then Result := false; cbSouth : if ACell^.Row < r2 then Result := false;
cbEast : if ACell^.Col < c2 then Result := false; cbEast : if ACell^.Col < c2 then Result := false;
cbWest : if ACell^.Col > c1 then Result := false; cbWest : if ACell^.Col > c1 then Result := false;
{
cbEast : if (IsRightToLeft and (ACell^.Col > c1)) or
(not IsRightToLeft and (ACell^.Col < c2)) then Result := false;
cbWest : if (IsRightToLeft and (ACell^.Col < c2)) or
(not IsRightToLeft and (ACell^.Col > c1)) then Result := false;
}
end; end;
end else end else
Result := ABorder in Worksheet.ReadCellBorders(ACell); Result := ABorder in Worksheet.ReadCellBorders(ACell);
@ -4611,7 +4273,6 @@ begin
if GetGridCol(Worksheet.GetLastColIndex + 1) >= ColCount then if GetGridCol(Worksheet.GetLastColIndex + 1) >= ColCount then
ColCount := ColCount + 1; ColCount := ColCount + 1;
c := GetWorksheetCol(AGridCol); c := GetWorksheetCol(AGridCol);
// c := AGridCol - FHeaderCount;
Worksheet.InsertCol(c); Worksheet.InsertCol(c);
UpdateColWidths(AGridCol); UpdateColWidths(AGridCol);
@ -4749,7 +4410,6 @@ begin
// Overflow possible from non-merged, horizontal, non-left-aligned label cells // Overflow possible from non-merged, horizontal, non-left-aligned label cells
idx := Worksheet.GetEffectiveCellFormatIndex(cell); idx := Worksheet.GetEffectiveCellFormatIndex(cell);
fmt := Workbook.GetPointerToCellFormat(idx); fmt := Workbook.GetPointerToCellFormat(idx);
// fmt := Worksheet.GetPointerToEffectiveCellFormat(cell);
if (not Worksheet.IsMerged(cell)) and if (not Worksheet.IsMerged(cell)) and
(cell^.ContentType = cctUTF8String) and (cell^.ContentType = cctUTF8String) and
not (uffTextRotation in fmt^.UsedFormattingFields) and not (uffTextRotation in fmt^.UsedFormattingFields) and
@ -4994,40 +4654,6 @@ begin
inherited; inherited;
end; end;
(*
{@@ ----------------------------------------------------------------------------
Loads the worksheet into the grid and displays its contents.
@param AWorksheet Worksheet to be displayed in the grid
-------------------------------------------------------------------------------}
procedure TsCustomWorksheetGrid.LoadFromWorksheet(AWorksheet: TsWorksheet);
begin
if FWorkbookSource <> nil then
exit;
GetWorkbookSource.LoadFro
FOwnedWorksheet := AWorksheet;
if FOwnedWorksheet <> nil then begin
inc(FLockSetup);
FOwnedWorksheet.OnChangeCell := @ChangedCellHandler;
FOwnedWorksheet.OnChangeFont := @ChangedFontHandler;
ShowHeaders := (soShowHeaders in Worksheet.Options);
ShowGridLines := (soShowGridLines in Worksheet.Options);
if (soHasFrozenPanes in Worksheet.Options) then begin
FrozenCols := FOwnedWorksheet.LeftPaneWidth;
FrozenRows := FOwnedWorksheet.TopPaneHeight;
end else begin
FrozenCols := 0;
FrozenRows := 0;
end;
Row := FrozenRows;
Col := FrozenCols;
dec(FLockSetup);
end;
Setup;
end;
*)
{@@ ---------------------------------------------------------------------------- {@@ ----------------------------------------------------------------------------
Creates a new workbook and loads the given file into it. The file is assumed Creates a new workbook and loads the given file into it. The file is assumed
to have the given file format. Shows the sheet with the given sheet index. to have the given file format. Shows the sheet with the given sheet index.
@ -5393,32 +5019,15 @@ end;
grid instead. grid instead.
-------------------------------------------------------------------------------} -------------------------------------------------------------------------------}
procedure TsCustomWorksheetGrid.MouseMove(Shift: TShiftState; X, Y: Integer); procedure TsCustomWorksheetGrid.MouseMove(Shift: TShiftState; X, Y: Integer);
{
--- wp: removed this for testing: why is the entire grid repainted when the
mouse moved to another cell?
var
prevMouseCell: TPoint;
}
begin begin
if Worksheet = nil then if Worksheet = nil then
exit; exit;
{ --- wp
prevMouseCell := GCache.MouseCell;
}
inherited; inherited;
if MouseOnHeader(X,Y) then if MouseOnHeader(X,Y) then
exit; exit;
{ --- wp
if FTextOverflow and
((prevMouseCell.X <> GCache.MouseCell.X) or (prevMouseCell.Y <> GCache.MouseCell.Y))
then
InvalidateGrid;
}
if Assigned(Dragmanager) and DragManager.IsDragging then if Assigned(Dragmanager) and DragManager.IsDragging then
begin begin
Cursor := crDefault; Cursor := crDefault;
@ -6212,15 +5821,13 @@ end;
procedure TsCustomWorksheetGrid.WMHScroll(var message: TLMHScroll); procedure TsCustomWorksheetGrid.WMHScroll(var message: TLMHScroll);
begin begin
inherited; inherited;
//if Worksheet.GetImageCount > 0 then Invalidate;
Invalidate;
end; end;
procedure TsCustomWorksheetGrid.WMVScroll(var message: TLMVScroll); procedure TsCustomWorksheetGrid.WMVScroll(var message: TLMVScroll);
begin begin
inherited; inherited;
//if Worksheet.GetImageCount > 0 then Invalidate;
Invalidate;
end; end;
@ -6973,7 +6580,6 @@ begin
begin begin
idx := Worksheet.GetEffectiveCellFormatIndex(cell); idx := Worksheet.GetEffectiveCellFormatIndex(cell);
fmt := Workbook.GetPointerToCellFormat(idx); fmt := Workbook.GetPointerToCellFormat(idx);
// fmt := Worksheet.GetPointerToEffectiveCellFormat(cell);
if fmt <> nil then if fmt <> nil then
nfp := Workbook.GetNumberFormat(fmt^.NumberFormatIndex); nfp := Workbook.GetNumberFormat(fmt^.NumberFormatIndex);
if (fmt <> nil) and IsDateTimeFormat(nfp) then if (fmt <> nil) and IsDateTimeFormat(nfp) then