LCL, LazControls: Remove fFilter variable from FilterEdits. Instead use Text property always.

This commit is contained in:
Juha 2023-01-05 11:12:27 +02:00
parent 335531eabf
commit 4c822bb36e
4 changed files with 26 additions and 21 deletions

View File

@ -143,7 +143,7 @@ begin
fFilteredListbox:=AValue; fFilteredListbox:=AValue;
if Assigned(fFilteredListbox) then if Assigned(fFilteredListbox) then
begin begin
InternalSetFilter(Text); ActivateFilter;
fOriginalData.Assign(fFilteredListbox.Items); fOriginalData.Assign(fFilteredListbox.Items);
if (fFilteredListbox is TCustomCheckListBox) and not Assigned(fCheckedItems) then if (fFilteredListbox is TCustomCheckListBox) and not Assigned(fCheckedItems) then
fCheckedItems:=TStringMap.Create(False); fCheckedItems:=TStringMap.Create(False);

View File

@ -154,7 +154,7 @@ begin
fFilteredListview:=AValue; fFilteredListview:=AValue;
if Assigned(fFilteredListview) then if Assigned(fFilteredListview) then
begin begin
InternalSetFilter(Text); ActivateFilter;
for i := 0 to fFilteredListview.Items.Count-1 do for i := 0 to fFilteredListview.Items.Count-1 do
fOriginalData.Add(ListItem2Data(fFilteredListview.Items[i])); fOriginalData.Add(ListItem2Data(fFilteredListview.Items[i]));
end; end;

View File

@ -450,7 +450,7 @@ begin
fFilteredTreeview := AValue; fFilteredTreeview := AValue;
if fFilteredTreeview <> nil then if fFilteredTreeview <> nil then
begin begin
InternalSetFilter(Text); ActivateFilter;
fFilteredTreeview.FreeNotification(Self); fFilteredTreeview.FreeNotification(Self);
fFilteredTreeview.AddHandlerOnBeforeDestruction(@OnBeforeTreeDestroy); fFilteredTreeview.AddHandlerOnBeforeDestruction(@OnBeforeTreeDestroy);
end; end;

View File

@ -224,7 +224,6 @@ type
// visual controls like TListView and TTreeView. // visual controls like TListView and TTreeView.
TCustomControlFilterEdit = class(TCustomEditButton) TCustomControlFilterEdit = class(TCustomEditButton)
private private
fFilter: string;
fFilterLowercase: string; fFilterLowercase: string;
fFilterOptions: TFilterStringOptions; fFilterOptions: TFilterStringOptions;
fIdleConnected: Boolean; fIdleConnected: Boolean;
@ -232,6 +231,7 @@ type
fIsFirstSetFormActivate: Boolean; fIsFirstSetFormActivate: Boolean;
fOnAfterFilter: TNotifyEvent; fOnAfterFilter: TNotifyEvent;
procedure ApplyFilter(Immediately: Boolean = False); procedure ApplyFilter(Immediately: Boolean = False);
function GetFilter: string;
procedure SetFilter(const AValue: string); procedure SetFilter(const AValue: string);
procedure SetFilterOptions(AValue: TFilterStringOptions); procedure SetFilterOptions(AValue: TFilterStringOptions);
procedure SetSortData(AValue: Boolean); procedure SetSortData(AValue: Boolean);
@ -246,7 +246,7 @@ type
fOnFilterItemEx: TFilterItemExEvent; fOnFilterItemEx: TFilterItemExEvent;
fOnCheckItem: TCheckItemEvent; fOnCheckItem: TCheckItemEvent;
procedure DestroyWnd; override; procedure DestroyWnd; override;
procedure InternalSetFilter(const AValue: string); procedure ActivateFilter;
function DoDefaultFilterItem(const ACaption: string; function DoDefaultFilterItem(const ACaption: string;
const ItemData: Pointer): Boolean; virtual; const ItemData: Pointer): Boolean; virtual;
function DoFilterItem(const ACaption: string; function DoFilterItem(const ACaption: string;
@ -274,8 +274,7 @@ type
procedure StoreSelection; virtual; abstract; procedure StoreSelection; virtual; abstract;
procedure RestoreSelection; virtual; abstract; procedure RestoreSelection; virtual; abstract;
public public
property Filter: string read fFilter write SetFilter; property Filter: string read GetFilter write SetFilter;
property FilterLowercase: string read fFilterLowercase;
property IdleConnected: Boolean read fIdleConnected write SetIdleConnected; property IdleConnected: Boolean read fIdleConnected write SetIdleConnected;
property SortData: Boolean read fSortData write SetSortData; property SortData: Boolean read fSortData write SetSortData;
property SelectedPart: TObject read fSelectedPart write fSelectedPart; property SelectedPart: TObject read fSelectedPart write fSelectedPart;
@ -1171,12 +1170,17 @@ begin
inherited DestroyWnd; inherited DestroyWnd;
end; end;
procedure TCustomControlFilterEdit.InternalSetFilter(const AValue: string); function TCustomControlFilterEdit.GetFilter: string;
begin begin
if fFilter=AValue then Exit; Result:=Text;
Button.Enabled:=AValue<>''; end;
fFilter:=AValue;
fFilterLowercase:=UTF8LowerCase(fFilter); procedure TCustomControlFilterEdit.ActivateFilter;
// Activate an existing filter text.
// Used when user types text, and initially when a container control is assigned.
begin
Button.Enabled:=Text<>'';
fFilterLowercase:=UTF8LowerCase(Text);
InvalidateFilter; InvalidateFilter;
end; end;
@ -1184,7 +1188,9 @@ procedure TCustomControlFilterEdit.SetFilter(const AValue: string);
begin begin
if Text=AValue then Exit; if Text=AValue then Exit;
Text:=AValue; Text:=AValue;
InternalSetFilter(AValue); Button.Enabled:=AValue<>'';
fFilterLowercase:=UTF8LowerCase(AValue);
InvalidateFilter;
end; end;
procedure TCustomControlFilterEdit.SetFilterOptions(AValue: TFilterStringOptions); procedure TCustomControlFilterEdit.SetFilterOptions(AValue: TFilterStringOptions);
@ -1206,11 +1212,11 @@ function TCustomControlFilterEdit.DoDefaultFilterItem(const ACaption: string;
var var
NPos: integer; NPos: integer;
begin begin
if fFilter='' then if Filter='' then
exit(True); exit(True);
if fsoCaseSensitive in fFilterOptions then if fsoCaseSensitive in fFilterOptions then
NPos := Pos(fFilter, ACaption) NPos := Pos(Filter, ACaption)
else else
NPos := Pos(fFilterLowercase, UTF8LowerCase(ACaption)); NPos := Pos(fFilterLowercase, UTF8LowerCase(ACaption));
@ -1294,7 +1300,7 @@ end;
procedure TCustomControlFilterEdit.EditChange; procedure TCustomControlFilterEdit.EditChange;
begin begin
InternalSetFilter(Text); ActivateFilter;
inherited; inherited;
end; end;
@ -1344,12 +1350,11 @@ end;
function TCustomControlFilterEdit.ForceFilter(AFilter: String): String; function TCustomControlFilterEdit.ForceFilter(AFilter: String): String;
// Apply a new filter immediately without waiting for idle. Returns the previous filter. // Apply a new filter immediately without waiting for idle. Returns the previous filter.
begin begin
Result := FFilter; Result := Filter;
if fFilter <> AFilter then begin if Result = AFilter then Exit;
FFilter := AFilter; Filter := AFilter;
ApplyFilter(True); ApplyFilter(True);
end; end;
end;
function TCustomControlFilterEdit.GetDefaultGlyphName: string; function TCustomControlFilterEdit.GetDefaultGlyphName: string;
begin begin