fpspreadsheet: Initial implementation of fpsActions (a set of standard actions to simplify the main spreadsheet manipulation tasks)

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3714 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2014-11-10 13:05:28 +00:00
parent aa2c670376
commit e111cf8fb9
7 changed files with 522 additions and 29 deletions

View File

@ -1,11 +1,12 @@
object Form1: TForm1
Left = 349
Left = 342
Height = 600
Top = 117
Top = 242
Width = 925
Caption = 'Form1'
ClientHeight = 600
ClientHeight = 575
ClientWidth = 925
Menu = MainMenu
LCLVersion = '1.3'
object Panel1: TPanel
Left = 0
@ -28,7 +29,7 @@ object Form1: TForm1
end
object CellIndicator: TsCellIndicator
Left = 95
Height = 23
Height = 28
Top = 9
Width = 80
TabOrder = 1
@ -37,7 +38,7 @@ object Form1: TForm1
end
object CellEdit: TsCellEdit
Left = 184
Height = 23
Height = 28
Top = 9
Width = 731
Anchors = [akTop, akLeft, akRight]
@ -48,7 +49,7 @@ object Form1: TForm1
end
object WorkbookTabControl: TsWorkbookTabControl
Left = 0
Height = 558
Height = 533
Top = 42
Width = 672
TabIndex = 0
@ -60,8 +61,8 @@ object Form1: TForm1
WorkbookSource = WorkbookSource
object WorksheetGrid: TsWorksheetGrid
Left = 2
Height = 533
Top = 23
Height = 503
Top = 28
Width = 668
FrozenCols = 0
FrozenRows = 0
@ -113,7 +114,7 @@ object Form1: TForm1
end
object InspectorTabControl: TTabControl
Left = 677
Height = 558
Height = 533
Top = 42
Width = 248
OnChange = InspectorTabControlChange
@ -128,19 +129,20 @@ object Form1: TForm1
TabOrder = 2
object Inspector: TsSpreadsheetInspector
Left = 2
Height = 533
Top = 23
Height = 503
Top = 28
Width = 244
Align = alClient
RowCount = 24
RowCount = 25
TabOrder = 1
Strings.Strings = (
'FileName='
'FileFormat=sfExcel8'
'ActiveWorksheet=Sheet1'
'Options=boAutoCalc, boCalcBeforeSaving, boReadFormulas'
'FormatSettings='
' ThousandSeparator=.'
' DecimalSeparator=.'
' DecimalSeparator=,'
' ListSeparator=;'
' DateSeparator=.'
' TimeSeparator=:'
@ -166,14 +168,14 @@ object Form1: TForm1
WorkbookSource = WorkbookSource
Mode = imWorkbook
ColWidths = (
120
120
109
110
)
end
end
object Splitter1: TSplitter
Left = 672
Height = 558
Height = 533
Top = 42
Width = 5
Align = alRight
@ -195,5 +197,155 @@ object Form1: TForm1
object ActionList1: TActionList
left = 434
top = 180
object AddWorksheetAction: TsWorksheetAddAction
Category = 'FPSpreadsheet'
Caption = 'Add'
Hint = 'Add empty worksheet'
WorkbookSource = WorkbookSource
NameMask = 'Sheet%d'
end
object DeleteWorksheetAction: TsWorksheetDeleteAction
Category = 'FPSpreadsheet'
Caption = 'Delete'
Hint = 'Delete worksheet'
WorkbookSource = WorkbookSource
end
object RenameWorksheetAction: TsWorksheetRenameAction
Category = 'FPSpreadsheet'
Caption = 'Rename...'
Hint = 'Rename worksheet'
WorkbookSource = WorkbookSource
end
end
object ImageList1: TImageList
left = 434
top = 249
Bitmap = {
4C690300000010000000100000007E7E7E007E7E7E007F7F7F00808080008080
800080808000808080008080800080808000129D000014A8000015A9009915A9
00CC15A9009914A80000129D00007E7E7E007E7E7E007F7F7F00808080008080
800080808000808080008080800080808000129D000013A1000014A400CC75EE
64FF14A400CC13A10000129D00007E7E7E007E7E7E007F7F7F00808080008080
800080808000808080008080800080808000129C0099129D00CC129D00CC66EB
55FF129D00CC129D00CC129C00997E7E7E007E7E7E007F7F7F227F7F7F597F7F
7F667F7F7F667F7F7F667F7F7F667F7F7F661A930CE052E741FF52E741FF52E7
41FF52E741FF52E741FF109500CC7A7A7A007A7A7A007A7A7A5AE9E9E9D3FFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EBB66FF3EA333FF3EA333FF3DE2
2CFF178B0BDF0E8C00CC0E8D0099727272007272720072727268FCFCFCFFFBFB
FBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFF3C9B32FF2BDF
1AFF16810BE10F8703000E8C00006A6A6A006A6A6A006A6A6A6AF8F8F8FFF6F6
F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FF66A362FF3686
32FF266B22C43C6C39003B7A340058585800616161006161616BF4F4F4FFF0F0
F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF4F4
F4FF6161616B61616100585858004C4C4C00515151005656566CEFEFEFFFEAEA
EAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEFEF
EFFF5656566C515151004C4C4C004B4B4B534C4C4C6E4C4C4C6EEBEBEBFFE4E4
E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFEBEB
EBFF4C4C4C6E4C4C4C6E4B4B4B533C3C3C70F0F0F0FFF0F0F0FFECECECFFE8E8
E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFECEC
ECFFF0F0F0FFF0F0F0FF3C3C3C701B1B1B581717177517171775171717751717
1775171717751717177517171775171717751717177517171775171717751717
177517171775171717751B1B1B58FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF007E7E7E007E7E7E007F7F7F00808080008080
8000808080008080800080808000808080000000A6990000A7CC0000A7CC0000
A7CC0000A7CC0000A7CC0000A6997E7E7E007E7E7E007F7F7F227F7F7F597F7F
7F667F7F7F667F7F7F667F7F7F667F7F7F660C0C95E05E5EF7FF5E5EF7FF5E5E
F7FF5E5EF7FF5E5EF7FF000098CC7A7A7A007A7A7A007A7A7A5AE9E9E9D3FFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6666B4FF333399FF333399FF2828
92F60B0B7FDF000080CC00008499727272007272720072727268FCFCFCFFFBFB
FBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFCFC
FCFF727272681C1C7600000080006A6A6A006A6A6A006A6A6A6AF8F8F8FFF6F6
F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF8F8
F8FF6A6A6A6A6A6A6A003434740058585800616161006161616BF4F4F4FFF0F0
F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF4F4
F4FF6161616B61616100585858004C4C4C00515151005656566CEFEFEFFFEAEA
EAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEFEF
EFFF5656566C515151004C4C4C004B4B4B534C4C4C6E4C4C4C6EEBEBEBFFE4E4
E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFEBEB
EBFF4C4C4C6E4C4C4C6E4B4B4B533C3C3C70F0F0F0FFF0F0F0FFECECECFFE8E8
E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFECEC
ECFFF0F0F0FFF0F0F0FF3C3C3C701B1B1B581717177517171775171717751717
1775171717751717177517171775171717751717177517171775171717751717
177517171775171717751B1B1B58FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF007E7E7E007E7E7E007F7F7F00808080008080
800080808000808080008080800080808000808080006E85890001A3BB005555
55002B2B9D390101DEAF0101C6407E7E7E007E7E7E007F7F7F00808080008080
800080808000808080008080800080808000808080006E85890001A3BB005454
542438386F7C8080FFFF0101B1C17E7E7E007E7E7E007F7F7F00808080008080
800080808000808080008080800080808000808080006E85890001A2BA3F4A4A
4A6CF7F7F7FF1A1A468E00009F467E7E7E007E7E7E007F7F7F227F7F7F597F7F
7F667F7F7F667F7F7F667F7F7F667F7F7F667F7F7F66538B948C1494A9D379E6
F7FF2D2D2D8F1212122E00009C007A7A7A007A7A7A007A7A7A5AE9E9E9D3FFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1E8EEFF4BB6C7FF79E6F7FF3496
A8F44D6F7681444444003C3C8A00727272007272720072727268FCFCFCFFFBFB
FBFFFBFBFBFFFBFBFBFFFBFBFBFFBFE5EBFF4AB4C5FF79E6F7FF419EAFFFB9D8
DEFF7272726872727200727272006A6A6A006A6A6A006A6A6A6AF8F8F8FFF6F6
F6FFF6F6F6FFF6F6F6FFD2E4EAFF49B3C4FF79E6F7FF3F9DADFFB5D4DAFFF8F8
F8FF6A6A6A6A6A6A6A006A6A6A0058585800616161006161616BF4F4F4FFF0F0
F0FFF0F0F0FFF0F0F0FF79AFC1FFD9F4FFFF3E9BACFFB0CFD5FFF0F0F0FFF4F4
F4FF6161616B61616100585858004C4C4C00515151005656566CEFEFEFFFEAEA
EAFFEAEAEAFFEAEAEAFF000000FF4F8393FFB2C6CCFFEAEAEAFFEAEAEAFFEFEF
EFFF5656566C515151004C4C4C004B4B4B534C4C4C6E4C4C4C6EEBEBEBFFE4E4
E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFEBEB
EBFF4C4C4C6E4C4C4C6E4B4B4B533C3C3C70F0F0F0FFF0F0F0FFECECECFFE8E8
E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFECEC
ECFFF0F0F0FFF0F0F0FF3C3C3C701B1B1B581717177517171775171717751717
1775171717751717177517171775171717751717177517171775171717751717
177517171775171717751B1B1B58FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00
}
end
object MainMenu: TMainMenu
left = 434
top = 320
object MnuFile: TMenuItem
Caption = 'File'
object MenuItem1: TMenuItem
Caption = 'New Item5'
end
end
object MnuEdit: TMenuItem
Caption = 'Edit'
object MnuWorksheet: TMenuItem
Caption = 'Worksheet'
object MnuAddSheet: TMenuItem
Action = AddWorksheetAction
end
object MenuItem2: TMenuItem
Action = DeleteWorksheetAction
end
object MenuItem3: TMenuItem
Caption = '-'
end
object MenuItem4: TMenuItem
Action = RenameWorksheetAction
end
end
end
end
end

View File

@ -6,8 +6,8 @@ interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls, ComCtrls, ActnList,
fpspreadsheet, fpspreadsheetctrls, fpspreadsheetgrid;
StdCtrls, ComCtrls, ActnList, Menus,
fpspreadsheet, fpspreadsheetctrls, fpspreadsheetgrid, fpsActions;
type
@ -16,6 +16,16 @@ type
TForm1 = class(TForm)
ActionList1: TActionList;
Button1: TButton;
ImageList1: TImageList;
MainMenu: TMainMenu;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
MenuItem3: TMenuItem;
MenuItem4: TMenuItem;
MnuFile: TMenuItem;
MnuWorksheet: TMenuItem;
MnuAddSheet: TMenuItem;
MnuEdit: TMenuItem;
OpenDialog: TOpenDialog;
OpenDialog1: TOpenDialog;
Panel1: TPanel;
@ -24,6 +34,9 @@ type
Splitter1: TSplitter;
Inspector: TsSpreadsheetInspector;
InspectorTabControl: TTabControl;
AddWorksheetAction: TsWorksheetAddAction;
DeleteWorksheetAction: TsWorksheetDeleteAction;
RenameWorksheetAction: TsWorksheetRenameAction;
WorkbookSource: TsWorkbookSource;
WorkbookTabControl: TsWorkbookTabControl;
WorksheetGrid: TsWorksheetGrid;

View File

@ -4,8 +4,9 @@ object Form1: TForm1
Top = 177
Width = 874
Caption = 'Form1'
ClientHeight = 528
ClientHeight = 503
ClientWidth = 874
Menu = MainMenu
OnCreate = FormCreate
LCLVersion = '1.3'
object Panel1: TPanel
@ -125,10 +126,10 @@ object Form1: TForm1
end
object CbLoader: TComboBox
Left = 104
Height = 23
Height = 28
Top = 8
Width = 148
ItemHeight = 15
ItemHeight = 20
ItemIndex = 1
Items.Strings = (
'Workbook'
@ -141,16 +142,16 @@ object Form1: TForm1
end
object Label1: TLabel
Left = 13
Height = 15
Height = 20
Top = 11
Width = 58
Width = 73
Caption = 'Loaded by:'
ParentColor = False
end
end
object InspectorTabControl: TTabControl
Left = 577
Height = 454
Height = 429
Top = 74
Width = 297
OnChange = InspectorTabControlChange
@ -166,7 +167,7 @@ object Form1: TForm1
end
object Splitter1: TSplitter
Left = 572
Height = 454
Height = 429
Top = 74
Width = 5
Align = alRight
@ -179,4 +180,27 @@ object Form1: TForm1
left = 48
top = 80
end
object MainMenu: TMainMenu
left = 203
top = 80
object MnuFile: TMenuItem
Caption = 'File'
end
object MnuEdit: TMenuItem
Caption = 'Edit'
object MnuWorksheets: TMenuItem
Caption = 'Worksheet'
object MnuAddWorksheet: TMenuItem
Caption = 'New Item4'
end
object MnuDeleteWorksheet: TMenuItem
Caption = 'New Item5'
end
end
end
end
object ActionList: TActionList
left = 203
top = 144
end
end

View File

@ -6,17 +6,24 @@ interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
StdCtrls, ComCtrls, ExtCtrls, Grids, Buttons,
fpspreadsheet, fpspreadsheetctrls, fpSpreadsheetGrid;
StdCtrls, ComCtrls, ExtCtrls, Grids, Buttons, Menus, ActnList,
fpspreadsheet, fpspreadsheetctrls, fpSpreadsheetGrid, fpsActions;
type
{ TForm1 }
TForm1 = class(TForm)
ActionList: TActionList;
BtnLoad: TButton;
CbLoader: TComboBox;
Label1: TLabel;
MainMenu: TMainMenu;
MnuDeleteWorksheet: TMenuItem;
MnuAddWorksheet: TMenuItem;
MnuWorksheets: TMenuItem;
MnuEdit: TMenuItem;
MnuFile: TMenuItem;
OpenDialog: TOpenDialog;
Panel1: TPanel;
SpeedButton1: TSpeedButton;
@ -83,6 +90,8 @@ begin
end;
procedure TForm1.FormCreate(Sender: TObject);
var
actn: TAction;
begin
WorkbookSource := TsWorkbookSource.Create(self);
with WorkbookSource do begin
@ -129,6 +138,21 @@ begin
Align := alClient;
WorkbookSource := Self.WorkbookSource;
end;
actn := TsWorksheetAddAction.Create(self);
with TsWorksheetAddAction(actn) do begin
ActionList := self.ActionList;
WorkbookSource := Self.WorkbookSource;
end;
MnuAddWorksheet.Action := actn;
actn := TsWorksheetDeleteAction.Create(self);
with TsWorksheetDeleteAction(actn) do begin
ActionList := self.ActionList;
WOrkbookSource := Self.WorkbookSource;
end;
MnuDeleteWorksheet.Action := actn;
end;
procedure TForm1.InspectorTabControlChange(Sender: TObject);

View File

@ -0,0 +1,273 @@
unit fpsActions;
interface
uses
SysUtils, Classes, Controls, ActnList,
fpspreadsheet, fpspreadsheetctrls;
type
TsSpreadsheetAction = class(TAction)
private
FWorkbookSource: TsWorkbookSource;
function GetWorkbook: TsWorkbook;
function GetWorksheet: TsWorksheet;
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
property Worksheet: TsWorksheet read GetWorksheet;
public
function HandlesTarget(Target: TObject): Boolean; override;
procedure UpdateTarget(Target: TObject); override;
property Workbook: TsWorkbook read GetWorkbook;
published
property WorkbookSource: TsWorkbookSource read FWorkbookSource write FWorkbookSource;
end;
{ --- Actions related to worksheets --- }
TsWorksheetAction = class(TsSpreadsheetAction)
private
public
function HandlesTarget(Target: TObject): Boolean; override;
procedure UpdateTarget(Target: TObject); override;
property Worksheet;
end;
{ Action for adding a worksheet }
TsWorksheetAddAction = class(TsWorksheetAction)
private
FNameMask: String;
procedure SetNameMask(const AValue: String);
protected
function GetUniqueSheetName: String;
public
constructor Create(AOwner: TComponent); override;
procedure ExecuteTarget(Target: TObject); override;
published
property NameMask: String read FNameMask write SetNameMask;
end;
{ Action for deleting selected worksheet }
TsWorksheetDeleteAction = class(TsWorksheetAction)
public
constructor Create(AOwner: TComponent); override;
procedure ExecuteTarget(Target: TObject); override;
end;
{ Action for renaming selected worksheet }
TsWorksheetRenameAction = class(TsWorksheetAction)
public
constructor Create(AOwner: TComponent); override;
procedure ExecuteTarget(Target: TObject); override;
end;
procedure Register;
implementation
uses
Dialogs;
procedure Register;
begin
RegisterActions('FPSpreadsheet', [
TsWorksheetAddAction, TsWorksheetDeleteAction, TsWorksheetRenameAction
], nil);
end;
{ TsSpreadsheetAction }
function TsSpreadsheetAction.GetWorkbook: TsWorkbook;
begin
if FWorkbookSource <> nil then
Result := FWorkbookSource.Workbook
else
Result := nil;
end;
function TsSpreadsheetAction.GetWorksheet: TsWorksheet;
begin
if FWorkbookSource <> nil then
Result := FWorkbookSource.Worksheet
else
Result := nil;
end;
function TsSpreadsheetAction.HandlesTarget(Target: TObject): Boolean;
begin
Result := (Target <> nil) and (Target = FWorkbookSource);
end;
procedure TsSpreadsheetAction.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and (AComponent = FWorkbookSource) then
FWorkbookSource := nil;
end;
procedure TsSpreadsheetAction.UpdateTarget(Target: TObject);
begin
Enabled := HandlesTarget(Target);
end;
{ TsWorksheetAction }
function TsWorksheetAction.HandlesTarget(Target: TObject): Boolean;
begin
Result := inherited HandlesTarget(Target) and (Worksheet <> nil);
end;
procedure TsWorksheetAction.UpdateTarget(Target: TObject);
begin
Enabled := inherited Enabled and (Worksheet <> nil);
end;
{ TsWorksheetAddAction }
constructor TsWOrksheetAddAction.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Caption := 'Add';
Hint := 'Add empty worksheet';
FNameMask := 'Sheet%d';
end;
function TsWorksheetAddAction.GetUniqueSheetName: String;
var
i: Integer;
begin
Result := '';
if Workbook = nil then
exit;
i := 0;
repeat
inc(i);
Result := Format(FNameMask, [i]);
until Workbook.GetWorksheetByName(Result) = nil
end;
procedure TsWorksheetAddAction.ExecuteTarget(Target: TObject);
var
sheetName: String;
begin
if HandlesTarget(Target) then
begin
sheetName := GetUniqueSheetName;
Workbook.AddWorksheet(sheetName);
end;
end;
procedure TsWorksheetAddAction.SetNameMask(const AValue: String);
begin
if AValue = FNameMask then
exit;
if pos('%d', AValue) = 0 then
raise Exception.Create('Worksheet name mask must contain a %d place-holder.');
FNameMask := AValue;
end;
{ TsWorksheetDeleteAction }
constructor TsWorksheetDeleteAction.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Caption := 'Delete';
Hint := 'Delete worksheet';
end;
procedure TsWorksheetDeleteAction.ExecuteTarget(Target: TObject);
begin
if HandlesTarget(Target) then
begin
if Workbook.GetWorksheetCount = 1 then
begin
MessageDlg('The workbook must contain at least 1 worksheet', mtError, [mbOK], 0);
exit;
end;
if MessageDlg(
Format('Do you really want to delete worksheet "%s"?', [Worksheet.Name]),
mtConfirmation, [mbYes, mbNo], 0) <> mrYes
then
exit;
Workbook.RemoveWorksheet(Worksheet);
// The workbooksource takes care of selecting the next worksheet
end;
end;
{ TsWorksheetRenameAction }
constructor TsWorksheetRenameAction.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Caption := 'Rename...';
Hint := 'Rename worksheet';
end;
procedure TsWorksheetRenameAction.ExecuteTarget(Target: TObject);
var
s: String;
begin
if HandlesTarget(Target) then
begin
s := Worksheet.Name;
if InputQuery('Rename worksheet', 'New worksheet name', s) then
Worksheet.Name := s;
end;
end;
(*
{ TsSpreadsheetAction }
TsSpreadsheetAction = class(TAction)
private
FWorkbookSource: TsWorkbookSource;
function GetWorkbook: TsWorkbook;
function GetWorksheet: TsWorksheet;
procedure SetWorkbookLink(AValue: TsWorkbookSource);
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure UpdateCell; virtual;
procedure UpdateWorkbook; virtual;
procedure UpdateWorksheet; virtual;
public
destructor Destroy; override;
procedure ListenerNotification(AChangedItems: TsNotificationItems;
AData: Pointer = nil);
property Workbook: TsWorkbook read GetWorkbook;
property Worksheet: TsWorksheet read GetWorksheet;
published
property WorkbookLink: TsWorkbookSource read FWorkbookSource write SetWorkbookLink;
end;
{TsWorksheetNavigateAction}
TsWorksheetNavigateAction = class(TsSpreadsheetAction)
public
function Update: Boolean; override;
end;
{TsNextWorksheetAction}
TsNextWorksheetAction = class(TAction)
public
function Execute: Boolean; override;
end;
{TsPreviosWorksheetAction}
TsPreviousWorksheetAction = class(TAction)
public
function Execute: Boolean; override;
end; *)
end.

View File

@ -20,7 +20,7 @@
It provides graphical components like a grid and chart."/>
<License Value="LGPL with static linking exception. This is the same license as is used in the LCL (Lazarus Component Library)."/>
<Version Major="1" Minor="2"/>
<Files Count="3">
<Files Count="4">
<Item1>
<Filename Value="fpspreadsheetctrls.pas"/>
<HasRegisterProc Value="True"/>
@ -36,6 +36,11 @@ It provides graphical components like a grid and chart."/>
<HasRegisterProc Value="True"/>
<UnitName Value="fpspreadsheetchart"/>
</Item3>
<Item4>
<Filename Value="fpsactions.pas"/>
<HasRegisterProc Value="True"/>
<UnitName Value="fpsActions"/>
</Item4>
</Files>
<Type Value="RunAndDesignTime"/>
<RequiredPkgs Count="4">

View File

@ -7,7 +7,8 @@ unit laz_fpspreadsheet_visual;
interface
uses
fpspreadsheetctrls, fpspreadsheetgrid, fpspreadsheetchart, LazarusPackageIntf;
fpspreadsheetctrls, fpspreadsheetgrid, fpspreadsheetchart, fpsActions,
LazarusPackageIntf;
implementation
@ -16,6 +17,7 @@ begin
RegisterUnit('fpspreadsheetctrls', @fpspreadsheetctrls.Register);
RegisterUnit('fpspreadsheetgrid', @fpspreadsheetgrid.Register);
RegisterUnit('fpspreadsheetchart', @fpspreadsheetchart.Register);
RegisterUnit('fpsactions', @fpsactions.Register);
end;
initialization