mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 01:16:01 +02:00
LazControls: Add OnFilterItemEx event with caption parameter to TCustomControlFilterEdit. Use it in TListFilterEdit. Issue #29793, patch from meteu.
git-svn-id: trunk@51865 -
This commit is contained in:
parent
2f65ac21da
commit
919198e297
@ -166,29 +166,34 @@ procedure TListFilterEdit.SortAndFilter;
|
||||
// Copy data from fOriginalData to fSortedData in sorted order
|
||||
var
|
||||
Origi, i: Integer;
|
||||
s, FilterLC: string;
|
||||
Capt, FilterLC: string;
|
||||
Pass, Done: Boolean;
|
||||
begin
|
||||
Done:=False;
|
||||
fSortedData.Clear;
|
||||
FilterLC := UTF8LowerCase(Filter);
|
||||
FilterLC:=UTF8LowerCase(Filter);
|
||||
for Origi:=0 to fOriginalData.Count-1 do begin
|
||||
s:=fOriginalData[Origi];
|
||||
Capt:=fOriginalData[Origi];
|
||||
|
||||
// Filter with event handler if there is one.
|
||||
if Assigned(OnFilterItem) then
|
||||
Pass:=OnFilterItem(fOriginalData.Objects[Origi], Done)
|
||||
if Assigned(fOnFilterItemEx) then
|
||||
Pass:=fOnFilterItemEx(Capt, fOriginalData.Objects[Origi], Done)
|
||||
else
|
||||
Pass:=False;
|
||||
// Filter by item's title text if needed.
|
||||
// Support also the old filter event without a caption.
|
||||
if (not (Pass and Done)) and Assigned(fOnFilterItem) then
|
||||
Pass:=fOnFilterItem(fOriginalData.Objects[Origi], Done);
|
||||
|
||||
// Filter by item's caption text if needed.
|
||||
if not (Pass or Done) then
|
||||
Pass:=(FilterLC='') or (Pos(FilterLC,UTF8LowerCase(s))>0);
|
||||
Pass:=(FilterLC='') or (Pos(FilterLC,UTF8LowerCase(Capt))>0);
|
||||
if Pass then begin
|
||||
i:=fSortedData.Count-1; // Always sort the data.
|
||||
while i>=0 do begin
|
||||
if CompareFNs(s,fSortedData[i])>=0 then break;
|
||||
if CompareFNs(Capt,fSortedData[i])>=0 then break;
|
||||
dec(i);
|
||||
end;
|
||||
fSortedData.InsertObject(i+1, s, fOriginalData.Objects[Origi]);
|
||||
fSortedData.InsertObject(i+1, Capt, fOriginalData.Objects[Origi]);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
@ -189,6 +189,7 @@ type
|
||||
// Done=False means the data should also be filtered by its title string.
|
||||
// Done=True means no other filtering is needed.
|
||||
TFilterItemEvent = function (Item: TObject; out Done: Boolean): Boolean of object;
|
||||
TFilterItemExEvent = function (ACaption: string;Item: TObject; out Done: Boolean): Boolean of object;
|
||||
|
||||
// Can be used only for items that have a checkbox. Returns true if checked.
|
||||
TCheckItemEvent = function (Item: TObject): Boolean of object;
|
||||
@ -219,6 +220,7 @@ type
|
||||
fIsFirstUpdate: Boolean;
|
||||
fSelectedPart: TObject; // Select this node on next update
|
||||
fOnFilterItem: TFilterItemEvent;
|
||||
fOnFilterItemEx: TFilterItemExEvent;
|
||||
fOnCheckItem: TCheckItemEvent;
|
||||
procedure EditKeyDown(var Key: Word; Shift: TShiftState); override;
|
||||
procedure EditChange; override;
|
||||
@ -252,6 +254,8 @@ type
|
||||
published
|
||||
property OnAfterFilter: TNotifyEvent read fOnAfterFilter write fOnAfterFilter;
|
||||
property OnFilterItem: TFilterItemEvent read fOnFilterItem write fOnFilterItem;
|
||||
deprecated 'Use OnFilterItemEx with a caption parameter instead.';
|
||||
property OnFilterItemEx: TFilterItemExEvent read fOnFilterItemEx write fOnFilterItemEx;
|
||||
property OnCheckItem: TCheckItemEvent read fOnCheckItem write fOnCheckItem;
|
||||
property UseFormActivate: Boolean read fUseFormActivate write SetUseFormActivate default False;
|
||||
// TEditButton properties.
|
||||
|
Loading…
Reference in New Issue
Block a user