From 5821b61cdc95d6abb203edce6861f2e3743c65cc Mon Sep 17 00:00:00 2001 From: Juha Date: Tue, 20 Jun 2023 19:14:18 +0300 Subject: [PATCH] IDE: Fix minor bugs in SearchResultView. Issue #40334, patch by n7800. --- ide/findrenameidentifier.pas | 5 ++-- ide/main.pp | 3 +-- ide/searchfrm.pas | 9 +++---- ide/searchresultview.pp | 49 ++++++++++++++++++++---------------- 4 files changed, 34 insertions(+), 32 deletions(-) diff --git a/ide/findrenameidentifier.pas b/ide/findrenameidentifier.pas index ea5d96435d..46e16a32ee 100644 --- a/ide/findrenameidentifier.pas +++ b/ide/findrenameidentifier.pas @@ -582,7 +582,6 @@ begin // create a search result page //debugln(['ShowIdentifierReferences ',DbgSName(SearchResultsView)]); SearchPageIndex:=SearchResultsView.AddSearch( - 'Ref: '+Identifier, Identifier, '', ExtractFilePath(DeclarationCode.Filename), @@ -596,11 +595,11 @@ begin TreeOfPCodeXYPosition,true,SearchPageIndex.PageIndex); OldSearchPageIndex:=SearchPageIndex; SearchPageIndex:=nil; - SearchResultsView.EndUpdate(OldSearchPageIndex.PageIndex); + SearchResultsView.EndUpdate(OldSearchPageIndex.PageIndex, 'Ref: '+Identifier); IDEWindowCreators.ShowForm(SearchResultsView,true); finally if SearchPageIndex <> nil then - SearchResultsView.EndUpdate(SearchPageIndex.PageIndex); + SearchResultsView.EndUpdate(SearchPageIndex.PageIndex, 'Ref: '+Identifier); end; end; diff --git a/ide/main.pp b/ide/main.pp index 5c074fe090..0e0370f96c 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -10567,7 +10567,6 @@ begin // create a search result page //debugln(['ShowIdentifierReferences ',DbgSName(SearchResultsView)]); SearchPageIndex:=SearchResultsView.AddSearch( - 'Ref: '+ExtractFileName(UsedUnitFilename), UsedUnitFilename, '', ExtractFilePath(UsedUnitFilename), @@ -10597,7 +10596,7 @@ begin OldSearchPageIndex:=SearchPageIndex; SearchPageIndex:=nil; - SearchResultsView.EndUpdate(OldSearchPageIndex.PageIndex); + SearchResultsView.EndUpdate(OldSearchPageIndex.PageIndex, 'Ref: '+ExtractFileName(UsedUnitFilename)); IDEWindowCreators.ShowForm(SearchResultsView,true); finally diff --git a/ide/searchfrm.pas b/ide/searchfrm.pas index 717b15cc94..672a18eee2 100644 --- a/ide/searchfrm.pas +++ b/ide/searchfrm.pas @@ -989,15 +989,13 @@ end; procedure TSearchProgressForm.DoSearchAndAddToSearchResults; var ListPage: TTabSheet; - Cnt: integer; State: TIWGetFormState; begin - Cnt:= 0; LazarusIDE.DoShowSearchResultsView(iwgfShow); if fResultsPageIndex >= 0 then ListPage := SearchResultsView.GetResultsPage(fResultsPageIndex) else - ListPage := SearchResultsView.AddSearch(SearchText, SearchText, ReplaceText, + ListPage := SearchResultsView.AddSearch(SearchText, ReplaceText, SearchDirectories, SearchMask, SearchOptions); try (* BeginUpdate prevents ListPage from being closed, @@ -1008,21 +1006,20 @@ begin ResultsWindow:= ListPage; try Show; // floating window, not dockable - Cnt:= DoSearch; + DoSearch; except on E: ERegExpr do IDEMessageDialog(lisUEErrorInRegularExpression, E.Message,mtError, [mbCancel]); end; finally - SearchResultsView.SetPageFoundCount(ListPage, Cnt); // show, but bring to front only if Search Progress dialog was active if fWasActive then State := iwgfShowOnTop else State := iwgfShow; LazarusIDE.DoShowSearchResultsView(State); - SearchResultsView.EndUpdate(ListPage.PageIndex); + SearchResultsView.EndUpdate(ListPage.PageIndex, SearchText); end; end; diff --git a/ide/searchresultview.pp b/ide/searchresultview.pp index c8569f68d1..b160073664 100644 --- a/ide/searchresultview.pp +++ b/ide/searchresultview.pp @@ -246,8 +246,7 @@ type procedure UpdateShowing; override; property AsyncUpdateCloseButtons: TSVCloseButtonsState read FAsyncUpdateCloseButtons write SetAsyncUpdateCloseButtons; public - function AddSearch(const aResultsName: string; - const aSearchText: string; + function AddSearch(const aSearchText: string; const aReplaceText: string; const aDirectories: string; const aFileMask: string; @@ -261,7 +260,7 @@ type const TheText: string; const MatchStart: integer; const MatchLen: integer); procedure BeginUpdate(APageIndex: integer); - procedure EndUpdate(APageIndex: integer); + procedure EndUpdate(APageIndex: integer; APageName: string = ''); procedure Parse_Search_Phrases(var slPhrases: TStrings); procedure ClosePage(PageIndex: integer); @@ -271,7 +270,6 @@ type write fOnSelectionChanged; property Items[Index: integer]: TStrings read GetItems write SetItems; function GetResultsPage(aIndex: integer): TTabSheet; - procedure SetPageFoundCount(aPage: TTabSheet; aCnt: integer); end; var @@ -588,12 +586,16 @@ begin TCustomTreeView(lTree).BeginUpdate; // TCustomTreeView, but not TLazSearchResultTV! try lNode := lTree.Selected; - lNodeText := lNode.Text; - lOldScroll.X := lTree.ScrolledLeft; - lOldScroll.Y := lTree.ScrolledTop; - lTree.MoveEnd; - lNode.MakeVisible; - lDeltaScrollY := lTree.ScrolledTop - lOldScroll.Y; + lNodeText := ''; + if lNode <> nil then + begin + lNodeText := lNode.Text; + lOldScroll.X := lTree.ScrolledLeft; + lOldScroll.Y := lTree.ScrolledTop; + lTree.MoveEnd; + lNode.MakeVisible; + lDeltaScrollY := lTree.ScrolledTop - lOldScroll.Y; + end; finally lTree.ScrolledTop := lOldScroll.Y; // go back while searching TCustomTreeView(lTree).EndUpdate; @@ -915,10 +917,12 @@ begin UpdateToolbar; end; -procedure TSearchResultsView.EndUpdate(APageIndex: integer); +procedure TSearchResultsView.EndUpdate(APageIndex: integer; APageName: string = ''); var lTree: TLazSearchResultTV; lNode: TTreeNode; + lPage: TTabSheet; + lEllipsed: boolean; begin lTree := GetTreeView(APageIndex); if assigned(lTree) then @@ -938,6 +942,17 @@ begin if lNode <> nil then lNode.Selected := true; end; + + // Page name + lPage := GetResultsPage(APageIndex); // this also check APageIndex range + if (lPage <> nil) and (APageName <> '') then + begin + lPage.Caption := BeautifyPageName(APageName, lEllipsed); + end; + + // Count + lPage.Caption := lPage.Caption + ' (' + inttostr(lTree.Items.Count - lTree.Items.TopLvlCount) + ')'; + UpdateToolbar; if FFocusTreeViewInEndUpdate and assigned(lTree) then ActivateControl(lTree) @@ -1005,11 +1020,6 @@ begin Result := nil; end; -procedure TSearchResultsView.SetPageFoundCount(aPage: TTabSheet; aCnt: integer); -begin - aPage.Caption := aPage.Caption + Format(' (%d)',[aCnt]); -end; - {Sets the Items from the treeview on the currently selected page in the TNoteBook} procedure TSearchResultsView.SetItems(Index: Integer; Value: TStrings); var @@ -1230,7 +1240,6 @@ end; { Add Result will create a tab in the Results view window with an new treeview or focus an existing TreeView and update it's searchoptions.} function TSearchResultsView.AddSearch( - const aResultsName: string; const aSearchText: string; const aReplaceText: string; const aDirectories: string; @@ -1247,7 +1256,7 @@ begin with ResultsNoteBook do begin FFocusTreeViewInEndUpdate := (ActivePage = nil) and SearchInListEdit.IsParentOf(ActivePage); - FWorkedSearchText := BeautifyPageName(aResultsName, lTabEllipsed); + FWorkedSearchText := BeautifyPageName(aSearchText, lTabEllipsed); // default page name PageIndex := TCustomTabControl(ResultsNoteBook).Pages.Add(FWorkedSearchText); lNewTree := TLazSearchResultTV.Create(Page[PageIndex]); @@ -1564,9 +1573,7 @@ var lPage: TTabSheet; begin result := nil; - if not InRange(APageIndex, 0, ResultsNoteBook.PageCount - 1) then exit; - - lPage := ResultsNoteBook.Pages[APageIndex]; + lPage := GetResultsPage(APageIndex); // this also check APageIndex range if not assigned(lPage) then exit; for i:= 0 to lPage.ComponentCount - 1 do