1
0

RxFPC:new RxDBGrid tool - setup footer row

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4150 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
alexs75
2015-05-25 10:12:12 +00:00
parent 4ccf6e7c15
commit 63d7776f8c
15 changed files with 682 additions and 52 deletions

@ -474,10 +474,14 @@ type
{ TRxDbGridColumns }
TRxDbGridColumns = class(TDbGridColumns)
private
function GetColumn(Index: Integer): TRxColumn;
procedure SetColumn(Index: Integer; AValue: TRxColumn);
protected
procedure Notify(Item: TCollectionItem;Action: TCollectionNotification); override;
public
function Add: TRxColumn;
property Items[Index: Integer]: TRxColumn read GetColumn write SetColumn; default;
end;
{ TRxDbGridColumnsSortList }
@ -569,6 +573,7 @@ type
FBeforeQuickSearch: TRxQuickSearchNotifyEvent;
FQuickUTF8Search: string;
FOldDataSetState:TDataSetState;
FToolsList:TFPList;
FOnSortChanged: TNotifyEvent;
@ -886,6 +891,8 @@ type
end;
{ TRxDBGridAbstractTools }
TRxDBGridToolsEvent = (rxteMouseDown, rxteMouseUp, rxteMouseMove, rxteKeyDown, rxteKeyUp);
TRxDBGridToolsEvents = set of TRxDBGridToolsEvent;
TRxDBGridAbstractTools = class(TComponent)
private
@ -896,11 +903,14 @@ type
protected
FRxDBGrid: TRxDBGrid;
FCaption:string;
FToolsEvents:TRxDBGridToolsEvents;
procedure SetRxDBGrid(AValue: TRxDBGrid);
function DoExecTools:boolean; virtual;
function DoSetupTools:boolean; virtual;
function MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: integer):boolean; virtual;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function Execute:boolean;
published
property RxDBGrid:TRxDBGrid read FRxDBGrid write SetRxDBGrid;
@ -1029,6 +1039,12 @@ begin
Result:=true;
end;
function TRxDBGridAbstractTools.MouseDown(Button: TMouseButton;
Shift: TShiftState; X, Y: integer): boolean;
begin
Result:=false;
end;
procedure TRxDBGridAbstractTools.ExecTools(Sender: TObject);
begin
Execute;
@ -1037,10 +1053,17 @@ end;
constructor TRxDBGridAbstractTools.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FToolsEvents:=[];
FCaption:=Name;
FShowSetupForm:=false;
end;
destructor TRxDBGridAbstractTools.Destroy;
begin
SetRxDBGrid(nil);
inherited Destroy;
end;
function TRxDBGridAbstractTools.Execute: boolean;
begin
Result:=true;
@ -1345,6 +1368,8 @@ begin
else
FOwner.FOptionsRx:=FOwner.FOptionsRx - [rdgFooterRows];
if FActive then
FOwner.CalcStatTotals;
FOwner.VisualChange;
end;
@ -2900,6 +2925,9 @@ begin
R.Caption := ATools.FCaption;
R.OnClick := @(ATools.ExecTools);
R.Tag:=IntPtr(ATools);
if Assigned(FToolsList) and (FToolsList.IndexOf(ATools)<0) then
FToolsList.Add(ATools);
end;
procedure TRxDBGrid.RemoveTools(ATools: TRxDBGridAbstractTools);
@ -2915,6 +2943,9 @@ begin
R.Free;
exit;
end;
if Assigned(FToolsList) then
FToolsList.Remove(ATools);
end;
{
@ -3606,6 +3637,7 @@ var
Cell: TGridCoord;
Rect: TRect;
C:TRxColumn;
i: Integer;
begin
QuickUTF8Search := '';
@ -3690,13 +3722,22 @@ begin
end;
end
else
begin
inherited MouseDown(Button, Shift, X, Y);
end;
end
else
begin
inherited MouseDown(Button, Shift, X, Y);
end;
end
else
begin
for i:=0 to FToolsList.Count-1 do
if (rxteMouseDown in TRxDBGridAbstractTools(FToolsList[i]).FToolsEvents) then
if TRxDBGridAbstractTools(FToolsList[i]).MouseDown(Button, Shift, X, Y) then
exit;
if rdgMrOkOnDblClik in FOptionsRx then
begin
if (Cell.Y > 0) and (Cell.X >= Ord(dgIndicator in Options)) and
@ -5001,6 +5042,7 @@ begin
{$IFDEF RXDBGRID_OPTIONS_WO_CANCEL_ON_EXIT}
Options := Options - [dgCancelOnExit];
{$ENDIF}
FToolsList:=TFPList.Create;
FSortColumns:=TRxDbGridColumnsSortList.Create;
@ -5074,6 +5116,7 @@ begin
FreeAndNil(F_LastFilter);
FreeAndNil(FKeyStrokes);
FreeAndNil(FToolsList);
inherited Destroy;
FreeAndNil(FSortColumns);
end;
@ -5150,6 +5193,16 @@ begin
// The correct implementation is doing nothing
end;
function TRxDbGridColumns.GetColumn(Index: Integer): TRxColumn;
begin
Result:=TRxColumn( inherited Items[Index] );
end;
procedure TRxDbGridColumns.SetColumn(Index: Integer; AValue: TRxColumn);
begin
Items[Index].Assign( AValue );
end;
procedure TRxDbGridColumns.Notify(Item: TCollectionItem;
Action: TCollectionNotification);
begin