mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-20 10:39:09 +02:00
LazControls: Fix design time issues in FilterEdit controls. Issue #41321.
This commit is contained in:
parent
20d924570a
commit
d6c7371e1f
@ -140,6 +140,12 @@ end;
|
|||||||
procedure TListFilterEdit.SetFilteredListbox(const AValue: TCustomListBox);
|
procedure TListFilterEdit.SetFilteredListbox(const AValue: TCustomListBox);
|
||||||
begin
|
begin
|
||||||
if fFilteredListbox = AValue then Exit;
|
if fFilteredListbox = AValue then Exit;
|
||||||
|
if Assigned(fFilteredListbox) then
|
||||||
|
begin
|
||||||
|
fFilteredListbox.RemoveFreeNotification(Self);
|
||||||
|
InternalSetFilter('');
|
||||||
|
ApplyFilter(True);
|
||||||
|
end;
|
||||||
fFilteredListbox:=AValue;
|
fFilteredListbox:=AValue;
|
||||||
if Assigned(fFilteredListbox) then
|
if Assigned(fFilteredListbox) then
|
||||||
begin
|
begin
|
||||||
@ -147,6 +153,7 @@ begin
|
|||||||
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);
|
||||||
|
fFilteredListbox.FreeNotification(Self);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -151,12 +151,19 @@ var
|
|||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
if fFilteredListview = AValue then Exit;
|
if fFilteredListview = AValue then Exit;
|
||||||
fFilteredListview:=AValue;
|
if Assigned(fFilteredListview) then
|
||||||
|
begin
|
||||||
|
fFilteredListview.RemoveFreeNotification(Self);
|
||||||
|
InternalSetFilter('');
|
||||||
|
ApplyFilter(True);
|
||||||
|
end;
|
||||||
|
fFilteredListview := AValue;
|
||||||
if Assigned(fFilteredListview) then
|
if Assigned(fFilteredListview) then
|
||||||
begin
|
begin
|
||||||
InternalSetFilter(Text);
|
InternalSetFilter(Text);
|
||||||
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]));
|
||||||
|
fFilteredListview.FreeNotification(Self);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -729,11 +729,13 @@ begin
|
|||||||
begin
|
begin
|
||||||
fFilteredTreeview.RemoveFreeNotification(Self);
|
fFilteredTreeview.RemoveFreeNotification(Self);
|
||||||
fFilteredTreeview.RemoveHandlerOnBeforeDestruction(@OnBeforeTreeDestroy);
|
fFilteredTreeview.RemoveHandlerOnBeforeDestruction(@OnBeforeTreeDestroy);
|
||||||
|
InternalSetFilter('');
|
||||||
|
ApplyFilter(True);
|
||||||
end;
|
end;
|
||||||
fFilteredTreeview := AValue;
|
fFilteredTreeview := AValue;
|
||||||
if fFilteredTreeview <> nil then
|
if fFilteredTreeview <> nil then
|
||||||
begin
|
begin
|
||||||
InvalidateFilter;
|
InternalSetFilter(Text);
|
||||||
fFilteredTreeview.FreeNotification(Self);
|
fFilteredTreeview.FreeNotification(Self);
|
||||||
fFilteredTreeview.AddHandlerOnBeforeDestruction(@OnBeforeTreeDestroy);
|
fFilteredTreeview.AddHandlerOnBeforeDestruction(@OnBeforeTreeDestroy);
|
||||||
end;
|
end;
|
||||||
|
@ -121,7 +121,6 @@ type
|
|||||||
property OnButtonClick: TNotifyEvent read GetOnButtonClick write SetOnButtonClick;
|
property OnButtonClick: TNotifyEvent read GetOnButtonClick write SetOnButtonClick;
|
||||||
public
|
public
|
||||||
constructor Create(AOwner: TComponent); override;
|
constructor Create(AOwner: TComponent); override;
|
||||||
destructor Destroy; override;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TEditButton }
|
{ TEditButton }
|
||||||
@ -233,7 +232,6 @@ type
|
|||||||
fSortData: Boolean; // Data needs to be sorted.
|
fSortData: Boolean; // Data needs to be sorted.
|
||||||
fIsFirstSetFormActivate: Boolean;
|
fIsFirstSetFormActivate: Boolean;
|
||||||
fOnAfterFilter: TNotifyEvent;
|
fOnAfterFilter: TNotifyEvent;
|
||||||
procedure ApplyFilter(Immediately: Boolean = False);
|
|
||||||
procedure SetFilter(AValue: string);
|
procedure SetFilter(AValue: string);
|
||||||
procedure SetFilterOptions(AValue: TFilterStringOptions);
|
procedure SetFilterOptions(AValue: TFilterStringOptions);
|
||||||
procedure SetSortData(AValue: Boolean);
|
procedure SetSortData(AValue: Boolean);
|
||||||
@ -259,6 +257,7 @@ type
|
|||||||
procedure BuddyClick; override;
|
procedure BuddyClick; override;
|
||||||
procedure SortAndFilter; virtual; abstract;
|
procedure SortAndFilter; virtual; abstract;
|
||||||
procedure ApplyFilterCore; virtual; abstract;
|
procedure ApplyFilterCore; virtual; abstract;
|
||||||
|
procedure ApplyFilter(Immediately: Boolean = False);
|
||||||
procedure MoveNext(ASelect: Boolean = False); virtual; abstract;
|
procedure MoveNext(ASelect: Boolean = False); virtual; abstract;
|
||||||
procedure MovePrev(ASelect: Boolean = False); virtual; abstract;
|
procedure MovePrev(ASelect: Boolean = False); virtual; abstract;
|
||||||
procedure MovePageUp(ASelect: Boolean = False); virtual; abstract;
|
procedure MovePageUp(ASelect: Boolean = False); virtual; abstract;
|
||||||
@ -1170,18 +1169,13 @@ begin
|
|||||||
Spacing := 4;
|
Spacing := 4;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TCustomEditButton.Destroy;
|
|
||||||
begin
|
|
||||||
inherited Destroy;
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
{ TCustomControlFilterEdit }
|
{ TCustomControlFilterEdit }
|
||||||
|
|
||||||
constructor TCustomControlFilterEdit.Create(AOwner: TComponent);
|
constructor TCustomControlFilterEdit.Create(AOwner: TComponent);
|
||||||
begin
|
begin
|
||||||
inherited Create(AOwner);
|
inherited Create(AOwner);
|
||||||
ControlStyle := ControlStyle - [csSetCaption];
|
ControlStyle:=ControlStyle-[csSetCaption];
|
||||||
CharCase:=ecLowerCase;
|
CharCase:=ecLowerCase;
|
||||||
Button.Enabled:=False;
|
Button.Enabled:=False;
|
||||||
fFilterOptions:=[];
|
fFilterOptions:=[];
|
||||||
@ -1192,7 +1186,7 @@ end;
|
|||||||
|
|
||||||
destructor TCustomControlFilterEdit.Destroy;
|
destructor TCustomControlFilterEdit.Destroy;
|
||||||
begin
|
begin
|
||||||
IdleConnected := False;
|
IdleConnected:=False;
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1204,7 +1198,6 @@ end;
|
|||||||
|
|
||||||
procedure TCustomControlFilterEdit.InternalSetFilter(const AValue: string);
|
procedure TCustomControlFilterEdit.InternalSetFilter(const AValue: string);
|
||||||
begin
|
begin
|
||||||
if fFilter=AValue then Exit;
|
|
||||||
Button.Enabled:=AValue<>'';
|
Button.Enabled:=AValue<>'';
|
||||||
fFilter:=AValue;
|
fFilter:=AValue;
|
||||||
fFilterLowercase:=UTF8LowerCase(fFilter);
|
fFilterLowercase:=UTF8LowerCase(fFilter);
|
||||||
@ -1215,7 +1208,7 @@ procedure TCustomControlFilterEdit.SetFilter(AValue: string);
|
|||||||
// AValue parameter must not have const modifier. It causes a crash, see issue #40300.
|
// AValue parameter must not have const modifier. It causes a crash, see issue #40300.
|
||||||
begin
|
begin
|
||||||
if Text=AValue then Exit;
|
if Text=AValue then Exit;
|
||||||
Text:=AValue; // ActivateFilter will be called by EditChange handler.
|
Text:=AValue; // ApplyFilter will be called by EditChange handler.
|
||||||
InternalSetFilter(AValue);
|
InternalSetFilter(AValue);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user