unit GridPrnActions; {$mode objfpc}{$H+} interface uses Classes, SysUtils, ActnList, GridPrn, GridPrnPreviewDlg; type TGridPrinterAction = class(TCustomAction) private FGridPrinter: TGridPrinter; procedure SetGridPrinter(const AValue: TGridPrinter); protected procedure Notification(AComponent: TComponent; Operation: TOperation); override; public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; function HandlesTarget(Target: TObject): Boolean; override; procedure UpdateTarget(Target: TObject); override; published property GridPrinter: TGridPrinter read FGridPrinter write SetGridPrinter; property Caption; property Enabled; property HelpContext; property HelpKeyword; property HelpType; property Hint; property ImageIndex; property OnExecute; property OnHint; property OnUpdate; property SecondaryShortCuts; property ShortCut; property Visible; end; TGridPrintPreviewAction = class(TCustomAction) private FPreviewDlg: TGridPrintPreviewDialog; protected procedure Notification(AComponent: TComponent; Operation: TOperation); override; public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; function HandlesTarget(Target: TObject): Boolean; override; procedure UpdateTarget(Target: TObject); override; published property PreviewDialog: TGridPrintPreviewDialog read FPreviewDlg write FPreviewDlg; property Caption; property Enabled; property HelpContext; property HelpKeyword; property HelpType; property Hint; property ImageIndex; property OnExecute; property OnHint; property OnUpdate; property SecondaryShortCuts; property ShortCut; property Visible; end; implementation uses Grids, GridPrnStrings; constructor TGridPrinterAction.Create(AOwner: TComponent); begin inherited Create(AOwner); Caption := RSPrint; Hint := RSPrintGrid; end; procedure TGridPrinterAction.ExecuteTarget(Target: TObject); begin if HandlesTarget(Target) then FGridPrinter.Print; end; function TGridPrinterAction.HandlesTarget(Target: TObject): Boolean; begin Result := (Target <> nil) and (Target = FGridPrinter); end; procedure TGridPrinterAction.Notification(AComponent: TComponent; Operation: TOperation); begin inherited Notification(AComponent, Operation); if (Operation = opRemove) and (AComponent = FGridPrinter) then FGridPrinter := nil; end; procedure TGridPrinterAction.SetGridPrinter(const AValue: TGridPrinter); begin if FGridPrinter <> AValue then begin FGridPrinter := AValue; if FGridPrinter.ShowPrintDialog = gpdNone then Caption := RSPrint else Caption := RSPrintEllipsis; end; end; procedure TGridPrinterAction.UpdateTarget(Target: TObject); var grid: TCustomGrid; begin if HandlesTarget(Target) then begin grid := (Target as TGridPrinter).Grid; Enabled := (grid <> nil) and grid.Visible; end else Enabled := false; end; { TGridPrintPreviewAction } constructor TGridPrintPreviewAction.Create(AOwner: TComponent); begin inherited Create(AOwner); Caption := RSPrintPreviewEllipsis; Hint := RSPrintPreview; end; procedure TGridPrintPreviewAction.ExecuteTarget(Target: TObject); begin if HandlesTarget(Target) then FPreviewDlg.Execute; end; function TGridPrintPreviewAction.HandlesTarget(Target: TObject): Boolean; begin Result := (Target <> nil) and (Target = FPreviewDlg); end; procedure TGridPrintPreviewAction.Notification(AComponent: TComponent; Operation: TOperation); begin inherited Notification(AComponent, Operation); if (Operation = opRemove) and (AComponent = FPreviewDlg) then FPreviewDlg := nil; end; procedure TGridPrintPreviewAction.UpdateTarget(Target: TObject); var grid: TCustomGrid; prn: TGridPrinter; begin if HandlesTarget(Target) then begin prn := (Target as TGridPrintPreviewDialog).GridPrinter; Enabled := (prn <> nil) and (prn.Grid <> nil) and prn.Grid.Visible; end else Enabled := false; end; end.