From f89932be90b78808a0e6e939e790a7d4953617a4 Mon Sep 17 00:00:00 2001 From: juha Date: Tue, 16 Aug 2011 18:41:24 +0000 Subject: [PATCH] =?UTF-8?q?SearchResultView:=20shortcuts=20and=20menu=20fo?= =?UTF-8?q?r=20page=20navigation=20and=20expand/collapse.=20Issue=20#19954?= =?UTF-8?q?,=20based=20on=20patch=20from=20Fl=C3=A1vio=20Etrusco?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: trunk@31996 - --- ide/lazarusidestrconsts.pas | 2 ++ ide/searchresultview.lfm | 32 ++++++++++++++---- ide/searchresultview.pp | 66 +++++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+), 6 deletions(-) diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index e1fa5a570c..29157eb566 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -282,6 +282,8 @@ resourcestring lisCopyItemToClipboard = 'Copy item to clipboard'; lisCopySelectedItemToClipboard = 'Copy selected items to clipboard'; lisCopyAllItemsToClipboard = 'Copy all items to clipboard'; + lisExpandAll = 'Expand All (*)'; + lisCollapseAll = 'Collapse All (/)'; lisSaveAllMessagesToFile = 'Save all messages to file'; lisMenuViewSearchResults = 'Search Results'; lisMenuViewAnchorEditor = 'Anchor Editor'; diff --git a/ide/searchresultview.lfm b/ide/searchresultview.lfm index 6896f40043..92fc91b12b 100644 --- a/ide/searchresultview.lfm +++ b/ide/searchresultview.lfm @@ -12,7 +12,7 @@ object SearchResultsView: TSearchResultsView OnCreate = Form1Create OnKeyDown = FormKeyDown Position = poScreenCenter - LCLVersion = '0.9.29' + LCLVersion = '0.9.31' object ResultsNoteBook: TPageControl Left = 0 Height = 248 @@ -21,6 +21,7 @@ object SearchResultsView: TSearchResultsView Align = alClient MultiLine = True TabOrder = 0 + OnChange = ResultsNoteBookPageChanged OnCloseTabClicked = ResultsNoteBookClosetabclicked OnMouseDown = ResultsNoteBookMouseDown OnPageChanged = ResultsNoteBookPageChanged @@ -52,33 +53,33 @@ object SearchResultsView: TSearchResultsView object ToolButton3: TToolButton Left = 47 Top = 2 - Width = 8 + Width = 10 Caption = 'ToolButton3' Style = tbsSeparator end object FilterButton: TToolButton - Left = 55 + Left = 57 Top = 2 Caption = 'FilterButton' ImageIndex = 2 OnClick = FilterButtonClick end object ForwardSearchButton: TToolButton - Left = 78 + Left = 80 Top = 2 Caption = 'ForwardSearchButton' ImageIndex = 3 OnClick = ForwardSearchButtonClick end object ResetResultsButton: TToolButton - Left = 449 + Left = 451 Top = 2 Caption = 'ResetResultsButton' ImageIndex = 4 OnClick = ResetResultsButtonClick end object SearchInListEdit: TEdit - Left = 101 + Left = 103 Height = 23 Top = 2 Width = 348 @@ -272,6 +273,17 @@ object SearchResultsView: TSearchResultsView Caption = 'Copy Selected' OnClick = mniCopySelectedClick end + object MenuItem1: TMenuItem + Caption = '-' + end + object mniExpandAll: TMenuItem + Caption = 'Expand All' + OnClick = mniExpandAllClick + end + object mniCollapseAll: TMenuItem + Caption = 'Collapse All' + OnClick = mniCollapseAllClick + end end object ActionList: TActionList Images = ImageList @@ -282,5 +294,13 @@ object SearchResultsView: TSearchResultsView OnExecute = ClosePageButtonClick ShortCut = 16499 end + object actNextPage: TAction + OnExecute = actNextPageExecute + ShortCut = 16393 + end + object actPrevPage: TAction + OnExecute = actPrevPageExecute + ShortCut = 24585 + end end end diff --git a/ide/searchresultview.pp b/ide/searchresultview.pp index ac3262a201..4a81c7e17c 100644 --- a/ide/searchresultview.pp +++ b/ide/searchresultview.pp @@ -130,7 +130,12 @@ type TSearchResultsView = class(TForm) actClosePage: TAction; + actNextPage: TAction; + actPrevPage: TAction; ActionList: TActionList; + MenuItem1: TMenuItem; + mniCollapseAll: TMenuItem; + mniExpandAll: TMenuItem; mniCopySelected: TMenuItem; mniCopyAll: TMenuItem; mniCopyItem: TMenuItem; @@ -145,6 +150,8 @@ type ClosePageButton: TToolButton; ForwardSearchButton: TToolButton; ResetResultsButton: TToolButton; + procedure actNextPageExecute(Sender: TObject); + procedure actPrevPageExecute(Sender: TObject); procedure ClosePageButtonClick(Sender: TObject); procedure Form1Create(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); @@ -152,6 +159,8 @@ type procedure mniCopyAllClick(Sender: TObject); procedure mniCopyItemClick(Sender: TObject); procedure mniCopySelectedClick(Sender: TObject); + procedure mniExpandAllClick(Sender: TObject); + procedure mniCollapseAllClick(Sender: TObject); procedure ResultsNoteBookMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure TreeViewKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); @@ -165,6 +174,7 @@ type X, Y: Integer); Procedure LazTVMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); + procedure TreeViewKeyPress(Sender: TObject; var Key: char); procedure edSearchInListChange(Sender: TObject ); procedure ResultsNoteBookPageChanged (Sender: TObject ); procedure ForwardSearchButtonClick(Sender: TObject ); @@ -311,6 +321,8 @@ begin mniCopyItem.Caption := lisCopyItemToClipboard; mniCopySelected.Caption := lisCopySelectedItemToClipboard; mniCopyAll.Caption := lisCopyAllItemsToClipboard; + mniExpandAll.Caption := lisExpandAll; + mniCollapseAll.Caption := lisCollapseAll; end;//Create procedure TSearchResultsView.FormClose(Sender: TObject; @@ -368,6 +380,26 @@ begin Clipboard.AsText := GetTreeSelectedItemsAsText(popList.PopupComponent as TCustomTreeView); end; +procedure TSearchResultsView.mniExpandAllClick(Sender: TObject); +var + CurrentTV: TLazSearchResultTV; + Key: Char = '*'; +begin + CurrentTV := GetTreeView(ResultsNoteBook.PageIndex); + if Assigned(CurrentTV) then + TreeViewKeyPress(CurrentTV, Key); +end; + +procedure TSearchResultsView.mniCollapseAllClick(Sender: TObject); +var + CurrentTV: TLazSearchResultTV; + Key: Char = '/'; +begin + CurrentTV := GetTreeView(ResultsNoteBook.PageIndex); + if Assigned(CurrentTV) then + TreeViewKeyPress(CurrentTV, Key); +end; + procedure TSearchResultsView.ResultsNoteBookMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var @@ -385,6 +417,16 @@ begin ClosePage(ResultsNoteBook.PageIndex); end; +procedure TSearchResultsView.actNextPageExecute(Sender: TObject); +begin + ResultsNoteBook.SelectNextPage(True); +end; + +procedure TSearchResultsView.actPrevPageExecute(Sender: TObject); +begin + ResultsNoteBook.SelectNextPage(False); +end; + {Keeps track of the Index of the Item the mouse is over, Sets ShowHint to true if the Item length is longer than the TreeView client width.} procedure TSearchResultsView.LazTVMousemove(Sender: TObject; Shift: TShiftState; @@ -418,6 +460,29 @@ begin Handled:= false; end;//LazTVMouseWheel +procedure TSearchResultsView.TreeViewKeyPress(Sender: TObject; var Key: char); +var + i: Integer; + Tree: TLazSearchResultTV; + Node: TTreeNode; + Collapse: Boolean; +begin + if Key in ['/', '*'] then + begin + Collapse := Key = '/'; + Tree := (Sender as TLazSearchResultTV); + for i := Tree.Items.TopLvlCount -1 downto 0 do + begin + Node := Tree.Items.TopLvlItems[i]; + if Collapse then + Node.Collapse(False) + else + Node.Expand(False); + end; + Key := #0; + end; +end; + procedure TSearchResultsView.edSearchInListChange (Sender: TObject ); var CurrentTV: TLazSearchResultTV; begin @@ -872,6 +937,7 @@ begin OnMouseMove:= @LazTVMousemove; OnMouseWheel:= @LazTVMouseWheel; OnMouseDown:=@TreeViewMouseDown; + OnKeyPress:=@TreeViewKeyPress; ShowHint:= true; RowSelect := True; // we are using custom draw Options := Options + [tvoAllowMultiselect] - [tvoThemedDraw];