mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-19 19:29:25 +02:00
LazControls, FilterEdits: Improve setting the filter programmatically. Invalidate after properties change.
This commit is contained in:
parent
70bc333d28
commit
5f4aa96422
@ -4631,7 +4631,7 @@ begin
|
||||
for Page:=Low(TObjectInspectorPage) to High(TObjectInspectorPage) do
|
||||
if GridControl[Page]<>nil then
|
||||
GridControl[Page].PropEditLookupRootChange;
|
||||
CompFilterEdit.Filter:='';
|
||||
CompFilterEdit.ResetFilter;
|
||||
FillComponentList(True);
|
||||
end;
|
||||
|
||||
|
@ -143,7 +143,7 @@ begin
|
||||
fFilteredListbox:=AValue;
|
||||
if Assigned(fFilteredListbox) then
|
||||
begin
|
||||
Filter:=Text;
|
||||
InternalSetFilter(Text);
|
||||
fOriginalData.Assign(fFilteredListbox.Items);
|
||||
if (fFilteredListbox is TCustomCheckListBox) and not Assigned(fCheckedItems) then
|
||||
fCheckedItems:=TStringMap.Create(False);
|
||||
|
@ -50,6 +50,7 @@ type
|
||||
// Data sorted for viewing.
|
||||
fFilteredData: TListViewDataList;
|
||||
function MatchesFilter(aData: TListViewDataItem): Boolean;
|
||||
procedure SetByAllFields(AValue: Boolean);
|
||||
procedure SetFilteredListview(const AValue: TCustomListView);
|
||||
protected
|
||||
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
||||
@ -75,7 +76,7 @@ type
|
||||
property Items: TListViewDataList read fOriginalData;
|
||||
published
|
||||
property FilteredListview: TCustomListView read fFilteredListview write SetFilteredListview;
|
||||
property ByAllFields: Boolean read fByAllFields write fByAllFields default False;
|
||||
property ByAllFields: Boolean read fByAllFields write SetByAllFields default False;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@ -153,12 +154,19 @@ begin
|
||||
fFilteredListview:=AValue;
|
||||
if Assigned(fFilteredListview) then
|
||||
begin
|
||||
Filter:=Text;
|
||||
InternalSetFilter(Text);
|
||||
for i := 0 to fFilteredListview.Items.Count-1 do
|
||||
fOriginalData.Add(ListItem2Data(fFilteredListview.Items[i]));
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TListViewFilterEdit.SetByAllFields(AValue: Boolean);
|
||||
begin
|
||||
if fByAllFields=AValue then Exit;
|
||||
fByAllFields:=AValue;
|
||||
InvalidateFilter;
|
||||
end;
|
||||
|
||||
procedure TListViewFilterEdit.Notification(AComponent: TComponent; Operation: TOperation);
|
||||
begin
|
||||
inherited Notification(AComponent, Operation);
|
||||
|
@ -399,6 +399,7 @@ end;
|
||||
procedure TTreeFilterBranch.Move(CurIndex, NewIndex: integer);
|
||||
begin
|
||||
fOriginalData.Move(CurIndex, NewIndex);
|
||||
InvalidateBranch;
|
||||
end;
|
||||
|
||||
{ TFileNameItem }
|
||||
@ -449,7 +450,7 @@ begin
|
||||
fFilteredTreeview := AValue;
|
||||
if fFilteredTreeview <> nil then
|
||||
begin
|
||||
Filter := Text;
|
||||
InternalSetFilter(Text);
|
||||
fFilteredTreeview.FreeNotification(Self);
|
||||
fFilteredTreeview.AddHandlerOnBeforeDestruction(@OnBeforeTreeDestroy);
|
||||
end;
|
||||
@ -461,6 +462,7 @@ begin
|
||||
if not Assigned(fFilteredTreeview) then
|
||||
raise Exception.Create('Showing directory hierarchy requires Treeview.');
|
||||
fShowDirHierarchy:=AValue;
|
||||
InvalidateFilter;
|
||||
end;
|
||||
|
||||
function TTreeFilterEdit.FilterTree(Node: TTreeNode): Boolean;
|
||||
@ -634,6 +636,7 @@ begin
|
||||
if fBranches[i].fRootNode = ARootNode then begin
|
||||
fBranches.Delete(i);
|
||||
Result := True;
|
||||
InvalidateFilter;
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
|
@ -514,7 +514,6 @@ begin
|
||||
FActiveTree := InheritanceTree;
|
||||
end;
|
||||
end;
|
||||
TreeFilterEd.InvalidateFilter;
|
||||
EnvironmentOptions.ComponentListPageIndex := PageControl.PageIndex;
|
||||
FActiveTree.BeginUpdate;
|
||||
tmDeselect.Enabled := True;
|
||||
|
@ -379,7 +379,6 @@ begin
|
||||
FSortAlphabetically:=AValue;
|
||||
SortAlphabeticallyButton.Down:=FSortAlphabetically;
|
||||
FilterEdit.SortData:=FSortAlphabetically;
|
||||
FilterEdit.InvalidateFilter;
|
||||
end;
|
||||
|
||||
procedure TEditorFileManagerForm.UpdateCheckAllCaption;
|
||||
|
@ -347,8 +347,7 @@ begin
|
||||
if ShortCutDialog.ShowModal = mrOK then begin
|
||||
KeyMapKeyFilter := ShortCutDialog.PrimaryShortCut;
|
||||
UpdateKeyFilterButton;
|
||||
FilterEdit.Filter:=''; // Allow only one of the filters to be active.
|
||||
FilterEdit.InvalidateFilter;
|
||||
FilterEdit.ResetFilter; // Allow only one of the filters to be active.
|
||||
end;
|
||||
finally
|
||||
ShortCutDialog.Free;
|
||||
|
@ -1199,7 +1199,6 @@ begin
|
||||
FShowDirectoryHierarchy:=AValue;
|
||||
DirectoryHierarchyButton.Down:=FShowDirectoryHierarchy;
|
||||
FilterEdit.ShowDirHierarchy:=FShowDirectoryHierarchy;
|
||||
FilterEdit.InvalidateFilter;
|
||||
EnvironmentOptions.ProjInspShowDirHierarchy := ShowDirectoryHierarchy;
|
||||
end;
|
||||
|
||||
@ -1209,7 +1208,6 @@ begin
|
||||
FSortAlphabetically:=AValue;
|
||||
SortAlphabeticallyButton.Down:=FSortAlphabetically;
|
||||
FilterEdit.SortData:=FSortAlphabetically;
|
||||
FilterEdit.InvalidateFilter;
|
||||
EnvironmentOptions.ProjInspSortAlphabetically := SortAlphabetically;
|
||||
end;
|
||||
|
||||
|
@ -1036,8 +1036,7 @@ begin
|
||||
else
|
||||
NewTreeView:=nil;
|
||||
Result:= Pages[PageIndex];
|
||||
SearchInListEdit.Text:='';
|
||||
SearchInListEdit.Filter:='';
|
||||
SearchInListEdit.ResetFilter;
|
||||
SearchInListEdit.FilteredTreeview := NewTreeView;
|
||||
end;//with
|
||||
end;
|
||||
|
@ -519,7 +519,6 @@ begin
|
||||
FSortAlphabetically:=AValue;
|
||||
SortAlphabeticallySpeedButton.Down:=SortAlphabetically;
|
||||
FilterEdit.SortData:=SortAlphabetically;
|
||||
FilterEdit.InvalidateFilter;
|
||||
end;
|
||||
|
||||
procedure TViewUnitDialog.ShowEntries;
|
||||
|
@ -231,7 +231,10 @@ type
|
||||
fSortData: Boolean; // Data needs to be sorted.
|
||||
fIsFirstSetFormActivate: Boolean;
|
||||
fOnAfterFilter: TNotifyEvent;
|
||||
procedure ApplyFilter(Immediately: Boolean = False);
|
||||
procedure SetFilter(const AValue: string);
|
||||
procedure SetFilterOptions(AValue: TFilterStringOptions);
|
||||
procedure SetSortData(AValue: Boolean);
|
||||
procedure SetIdleConnected(const AValue: Boolean);
|
||||
procedure OnIdle(Sender: TObject; var Done: Boolean);
|
||||
function IsTextHintStored: Boolean;
|
||||
@ -243,6 +246,7 @@ type
|
||||
fOnFilterItemEx: TFilterItemExEvent;
|
||||
fOnCheckItem: TCheckItemEvent;
|
||||
procedure DestroyWnd; override;
|
||||
procedure InternalSetFilter(const AValue: string);
|
||||
function DoDefaultFilterItem(const ACaption: string;
|
||||
const ItemData: Pointer): Boolean; virtual;
|
||||
function DoFilterItem(const ACaption: string;
|
||||
@ -251,7 +255,6 @@ type
|
||||
procedure EditChange; override;
|
||||
procedure BuddyClick; override;
|
||||
procedure SortAndFilter; virtual; abstract;
|
||||
procedure ApplyFilter(Immediately: Boolean = False);
|
||||
procedure ApplyFilterCore; virtual; abstract;
|
||||
procedure MoveNext(ASelect: Boolean = False); virtual; abstract;
|
||||
procedure MovePrev(ASelect: Boolean = False); virtual; abstract;
|
||||
@ -274,11 +277,11 @@ type
|
||||
property Filter: string read fFilter write SetFilter;
|
||||
property FilterLowercase: string read fFilterLowercase;
|
||||
property IdleConnected: Boolean read fIdleConnected write SetIdleConnected;
|
||||
property SortData: Boolean read fSortData write fSortData;
|
||||
property SortData: Boolean read fSortData write SetSortData;
|
||||
property SelectedPart: TObject read fSelectedPart write fSelectedPart;
|
||||
published
|
||||
property CharCase default ecLowerCase;
|
||||
property FilterOptions: TFilterStringOptions read fFilterOptions write fFilterOptions default [];
|
||||
property FilterOptions: TFilterStringOptions read fFilterOptions write SetFilterOptions default [];
|
||||
property OnAfterFilter: TNotifyEvent read fOnAfterFilter write fOnAfterFilter;
|
||||
property OnFilterItem: TFilterItemEvent read fOnFilterItem write fOnFilterItem;
|
||||
deprecated 'Use OnFilterItemEx with a caption parameter instead.';
|
||||
@ -1168,6 +1171,36 @@ begin
|
||||
inherited DestroyWnd;
|
||||
end;
|
||||
|
||||
procedure TCustomControlFilterEdit.InternalSetFilter(const AValue: string);
|
||||
begin
|
||||
if fFilter=AValue then Exit;
|
||||
Button.Enabled:=AValue<>'';
|
||||
fFilter:=AValue;
|
||||
fFilterLowercase:=UTF8LowerCase(fFilter);
|
||||
InvalidateFilter;
|
||||
end;
|
||||
|
||||
procedure TCustomControlFilterEdit.SetFilter(const AValue: string);
|
||||
begin
|
||||
if Text=AValue then Exit;
|
||||
Text:=AValue;
|
||||
InternalSetFilter(AValue);
|
||||
end;
|
||||
|
||||
procedure TCustomControlFilterEdit.SetFilterOptions(AValue: TFilterStringOptions);
|
||||
begin
|
||||
if fFilterOptions=AValue then Exit;
|
||||
fFilterOptions:=AValue;
|
||||
InvalidateFilter;
|
||||
end;
|
||||
|
||||
procedure TCustomControlFilterEdit.SetSortData(AValue: Boolean);
|
||||
begin
|
||||
if fSortData=AValue then Exit;
|
||||
fSortData:=AValue;
|
||||
InvalidateFilter;
|
||||
end;
|
||||
|
||||
function TCustomControlFilterEdit.DoDefaultFilterItem(const ACaption: string;
|
||||
const ItemData: Pointer): Boolean;
|
||||
var
|
||||
@ -1217,16 +1250,6 @@ begin
|
||||
fOnAfterFilter(Self);
|
||||
end;
|
||||
|
||||
procedure TCustomControlFilterEdit.SetFilter(const AValue: string);
|
||||
begin
|
||||
Button.Enabled:=AValue<>'';
|
||||
if fFilter=AValue then
|
||||
Exit;
|
||||
fFilter:=AValue;
|
||||
fFilterLowercase:=UTF8LowerCase(fFilter);
|
||||
ApplyFilter;
|
||||
end;
|
||||
|
||||
procedure TCustomControlFilterEdit.SetIdleConnected(const AValue: Boolean);
|
||||
begin
|
||||
if fIdleConnected=AValue then exit;
|
||||
@ -1271,14 +1294,14 @@ end;
|
||||
|
||||
procedure TCustomControlFilterEdit.EditChange;
|
||||
begin
|
||||
Filter:=Text;
|
||||
InternalSetFilter(Text);
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TCustomControlFilterEdit.BuddyClick;
|
||||
begin
|
||||
Text:='';
|
||||
Filter:='';
|
||||
ResetFilter;
|
||||
if FocusOnButtonClick then
|
||||
Edit.SetFocus; //don't SelectAll here
|
||||
inherited;
|
||||
@ -1310,12 +1333,12 @@ end;
|
||||
|
||||
function TCustomControlFilterEdit.IsTextHintStored: Boolean;
|
||||
begin
|
||||
Result := TextHint <> rsFilter;
|
||||
Result := TextHint<>rsFilter;
|
||||
end;
|
||||
|
||||
procedure TCustomControlFilterEdit.ResetFilter;
|
||||
begin
|
||||
Filter := '';
|
||||
Filter:='';
|
||||
end;
|
||||
|
||||
function TCustomControlFilterEdit.ForceFilter(AFilter: String): String;
|
||||
|
@ -269,8 +269,8 @@ end;
|
||||
|
||||
procedure TInstallPkgSetDialog.InstallPkgSetDialogShow(Sender: TObject);
|
||||
begin
|
||||
InstalledFilterEdit.Filter:=''; // (filter) - text is shown after this.
|
||||
AvailableFilterEdit.Filter:='';
|
||||
InstalledFilterEdit.ResetFilter; // (filter) - TextHint is shown after this.
|
||||
AvailableFilterEdit.ResetFilter;
|
||||
SetControlsWidthOnMax([UninstallButton, AddToInstallButton]);
|
||||
SetControlsWidthOnMax([ImportButton, ExportButton]);
|
||||
end;
|
||||
|
@ -1885,7 +1885,6 @@ begin
|
||||
FShowDirectoryHierarchy:=AValue;
|
||||
DirectoryHierarchyButton.Down:=FShowDirectoryHierarchy;
|
||||
FilterEdit.ShowDirHierarchy:=FShowDirectoryHierarchy;
|
||||
FilterEdit.InvalidateFilter;
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.SetSortAlphabetically(const AValue: boolean);
|
||||
@ -1894,7 +1893,6 @@ begin
|
||||
FSortAlphabetically:=AValue;
|
||||
SortAlphabeticallyButton.Down:=FSortAlphabetically;
|
||||
FilterEdit.SortData:=FSortAlphabetically;
|
||||
FilterEdit.InvalidateFilter;
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.UpdateAll(Immediately: boolean);
|
||||
@ -2233,7 +2231,7 @@ var
|
||||
OldFilter : String;
|
||||
begin
|
||||
if not CanUpdate(pefNeedUpdateFiles,Immediately) then exit;
|
||||
OldFilter := FilterEdit.ForceFilter('');
|
||||
OldFilter:=FilterEdit.ForceFilter('');
|
||||
|
||||
// files belonging to package
|
||||
FilesBranch:=FilterEdit.GetCleanBranch(FFilesNode);
|
||||
@ -2259,8 +2257,8 @@ begin
|
||||
if (FNextSelectedPart<>nil) and (FNextSelectedPart.Typ=penFile) then
|
||||
FreeAndNil(FNextSelectedPart);
|
||||
|
||||
FilterEdit.Filter := OldFilter; // This triggers ApplyFilter
|
||||
FilterEdit.InvalidateFilter;
|
||||
FilterEdit.Filter:=OldFilter;
|
||||
FilterEdit.InvalidateFilter; // Needed when OldFilter = ''
|
||||
UpdatePEProperties;
|
||||
UpdateButtons;
|
||||
end;
|
||||
@ -2295,8 +2293,8 @@ begin
|
||||
// No more removed files left -> delete the root node
|
||||
if FRemovedFilesNode<>nil then begin
|
||||
FilterEdit.DeleteBranch(FRemovedFilesNode);
|
||||
FreeAndNil(FRemovedFilesNode);
|
||||
FilterEdit.InvalidateFilter;
|
||||
FreeAndNil(FRemovedFilesNode);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -2312,7 +2310,7 @@ var
|
||||
NodeData: TPENodeData;
|
||||
begin
|
||||
if not CanUpdate(pefNeedUpdateRequiredPkgs,Immediately) then exit;
|
||||
OldFilter := FilterEdit.ForceFilter('');
|
||||
OldFilter:=FilterEdit.ForceFilter('');
|
||||
// required packages
|
||||
RequiredBranch:=FilterEdit.GetCleanBranch(FRequiredPackagesNode);
|
||||
RequiredBranch.ClearNodeData;
|
||||
@ -2355,10 +2353,8 @@ begin
|
||||
end;
|
||||
end;
|
||||
FNextSelectedPart:=nil;
|
||||
if OldFilter <> '' then begin
|
||||
FilterEdit.Filter := OldFilter; // This triggers ApplyFilter
|
||||
FilterEdit.InvalidateFilter;
|
||||
end;
|
||||
FilterEdit.Filter:=OldFilter;
|
||||
FilterEdit.InvalidateFilter; // Needed when OldFilter = ''
|
||||
UpdatePEProperties;
|
||||
UpdateButtons;
|
||||
end;
|
||||
@ -2993,7 +2989,7 @@ begin
|
||||
FilesBranch.Move(OldIndex,NewIndex);
|
||||
UpdatePEProperties;
|
||||
UpdateStatusBar;
|
||||
FilterEdit.InvalidateFilter;
|
||||
//FilterEdit.InvalidateFilter;
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.DoMoveDependency(Offset: integer);
|
||||
@ -3016,7 +3012,7 @@ begin
|
||||
RequiredBranch.Move(OldIndex,NewIndex);
|
||||
UpdatePEProperties;
|
||||
UpdateStatusBar;
|
||||
FilterEdit.InvalidateFilter;
|
||||
//FilterEdit.InvalidateFilter;
|
||||
end;
|
||||
|
||||
procedure TPackageEditorForm.DoSortFiles;
|
||||
|
Loading…
Reference in New Issue
Block a user