From eb52aebd6407d04e7260c008724959c7799e1a03 Mon Sep 17 00:00:00 2001 From: paul Date: Mon, 1 Mar 2010 04:29:29 +0000 Subject: [PATCH] =?UTF-8?q?ide:=20implement=20Copy=20to=20Clipboard=20beha?= =?UTF-8?q?vior=20in=20Search=20results=20dialog=20by=20Fl=C3=A1vio=20Etru?= =?UTF-8?q?sco=20(issue=20#0015851)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: trunk@23809 - --- ide/lazarusidestrconsts.pas | 3 ++ ide/searchresultview.lfm | 16 ++++++++++ ide/searchresultview.pp | 59 +++++++++++++++++++++++++++++++++++-- 3 files changed, 76 insertions(+), 2 deletions(-) diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index 03358d85f0..9976558a93 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -280,6 +280,9 @@ resourcestring lisCopyAllMessagesToClipboard = 'Copy all messages to clipboard'; lisCopyAllAndHiddenMessagesToClipboard = 'Copy all and hidden messages ' +'to clipboard'; + lisCopyItemToClipboard = 'Copy item to clipboard'; + lisCopySelectedItemToClipboard = 'Copy selected items to clipboard'; + lisCopyAllItemsToClipboard = 'Copy all items to clipboard'; lisSaveAllMessagesToFile = 'Save all messages to file'; lisMVDocking = 'Docking'; lisMenuViewSearchResults = 'Search Results'; diff --git a/ide/searchresultview.lfm b/ide/searchresultview.lfm index 3cf8068596..fd3af9ed02 100644 --- a/ide/searchresultview.lfm +++ b/ide/searchresultview.lfm @@ -254,4 +254,20 @@ object SearchResultsView: TSearchResultsView 0000000000000000000000000000 } end + object popList: TPopupMenu + left = 190 + top = 133 + object mniCopyItem: TMenuItem + Caption = 'Copy Item' + OnClick = mniCopyItemClick + end + object mniCopyAll: TMenuItem + Caption = 'Copy All' + OnClick = mniCopyAllClick + end + object mniCopySelected: TMenuItem + Caption = 'Copy Selected' + OnClick = mniCopySelectedClick + end + end end diff --git a/ide/searchresultview.pp b/ide/searchresultview.pp index 8bf0cadaf4..3790ed3d09 100644 --- a/ide/searchresultview.pp +++ b/ide/searchresultview.pp @@ -38,9 +38,9 @@ interface uses Classes, SysUtils, LCLProc, Forms, Controls, Graphics, Dialogs, - ComCtrls, ExtCtrls, StdCtrls, Buttons, LCLType, LCLIntf, + ComCtrls, ExtCtrls, StdCtrls, Buttons, LCLType, LCLIntf, Menus, IDEOptionDefs, LazarusIDEStrConsts, EnvironmentOpts, EditorOptions, InputHistory, - IDEProcs, FindInFilesDlg, Project, MainIntf; + IDEProcs, FindInFilesDlg, Project, MainIntf, Clipbrd; type { TLazSearchMatchPos } @@ -129,6 +129,10 @@ type { TSearchResultsView } TSearchResultsView = class(TForm) + mniCopySelected: TMenuItem; + mniCopyAll: TMenuItem; + mniCopyItem: TMenuItem; + popList: TPopupMenu; SearchInListEdit: TEdit; ImageList: TImageList; ResultsNoteBook: TNotebook; @@ -142,6 +146,9 @@ type procedure ClosePageButtonClick(Sender: TObject); procedure Form1Create(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure mniCopyAllClick(Sender: TObject); + procedure mniCopyItemClick(Sender: TObject); + procedure mniCopySelectedClick(Sender: TObject); procedure TreeViewKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ResultsNoteBookClosetabclicked(Sender: TObject); procedure SearchAgainButtonClick(Sender: TObject); @@ -225,6 +232,22 @@ begin Result := True; end; +function GetTreeSelectedItemsAsText(ATreeView: TCustomTreeView): string; +var + sl: TStringList; + node: TTreeNode; +begin + sl:=TStringList.Create; + node := ATreeView.GetFirstMultiSelected; + while assigned(node) do + begin + sl.Add(node.Text); + node := node.GetNextMultiSelected; + end; + Result:=sl.Text; + sl.Free; +end; + procedure TSearchResultsView.Form1Create(Sender: TObject); var ALayout: TIDEWindowLayout; @@ -251,6 +274,10 @@ begin fOnSelectionChanged:= nil; ShowHint:= True; fMouseOverIndex:= -1; + + mniCopyItem.Caption := lisCopyItemToClipboard; + mniCopySelected.Caption := lisCopySelectedItemToClipboard; + mniCopyAll.Caption := lisCopyAllItemsToClipboard; end;//Create procedure TSearchResultsView.FormKeyDown(Sender: TObject; var Key: Word; @@ -263,6 +290,32 @@ begin end; end; +procedure TSearchResultsView.mniCopyAllClick(Sender: TObject); +var + sl: TStrings; +begin + sl := (popList.PopupComponent as TLazSearchResultTV).ItemsAsStrings; + Clipboard.AsText := sl.Text; + sl.Free; +end; + +procedure TSearchResultsView.mniCopyItemClick(Sender: TObject); +var + tv: TCustomTreeView; + node: TTreeNode; +begin + tv := popList.PopupComponent as TCustomTreeView; + with tv.ScreenToClient(popList.PopupPoint) do + node := tv.GetNodeAt(X, Y); + if node <> nil then + Clipboard.AsText := node.Text; +end; + +procedure TSearchResultsView.mniCopySelectedClick(Sender: TObject); +begin + Clipboard.AsText := GetTreeSelectedItemsAsText(popList.PopupComponent as TCustomTreeView); +end; + procedure TSearchResultsView.ClosePageButtonClick(Sender: TObject); begin ClosePage(ResultsNoteBook.PageIndex); @@ -770,6 +823,8 @@ begin OnMouseWheel:= @LazTVMouseWheel; ShowHint:= true; RowSelect := True; + Options := Options + [tvoAllowMultiselect]; + PopupMenu := popList; NewTreeView.Canvas.Brush.Color:= clWhite; end;//with end;//if