diff --git a/designer/controlselection.pp b/designer/controlselection.pp index ff6c1a78c9..2c8461645d 100644 --- a/designer/controlselection.pp +++ b/designer/controlselection.pp @@ -37,8 +37,8 @@ interface { $DEFINE VerboseDesigner} uses - Classes, LCLIntf, LCLType, Controls, Forms, GraphType, Graphics, SysUtils, - Menus, EnvironmentOpts, PropEdits, DesignerProcs; + Classes, SysUtils, Math, LCLIntf, LCLType, Controls, Forms, GraphType, + Graphics, Menus, EnvironmentOpts, PropEdits, DesignerProcs; type TControlSelection = class; @@ -459,9 +459,6 @@ var TheControlSelection: TControlSelection; implementation -uses - Math; - const GRAB_CURSOR: array[TGrabIndex] of TCursor = ( crSizeNWSE, crSizeNS, crSizeNESW, diff --git a/designer/designer.pp b/designer/designer.pp index a5615b27ce..8e78264bd5 100644 --- a/designer/designer.pp +++ b/designer/designer.pp @@ -36,8 +36,8 @@ interface { $DEFINE VerboseDesignerDraw} uses - Classes, LCLType, LCLIntf, Forms, Controls, LMessages, GraphType, Graphics, - Dialogs, ExtCtrls, Menus, ClipBrd, IDEProcs, + Classes, SysUtils, Math, LCLType, LCLIntf, Forms, Controls, LMessages, + GraphType, Graphics, Dialogs, ExtCtrls, Menus, ClipBrd, IDEProcs, LazarusIDEStrConsts, EnvironmentOpts, KeyMapping, ComponentReg, NonControlForms, AlignCompsDlg, SizeCompsDlg, ScaleCompsDlg, TabOrderDlg, DesignerProcs, PropEdits, ComponentEditors, CustomFormEditor, @@ -302,9 +302,6 @@ type implementation -uses - SysUtils, Math; - const mk_lbutton = 1; mk_rbutton = 2; diff --git a/ide/addtoprojectdlg.pas b/ide/addtoprojectdlg.pas index c94e800bc9..3abf170f87 100644 --- a/ide/addtoprojectdlg.pas +++ b/ide/addtoprojectdlg.pas @@ -35,8 +35,8 @@ unit AddToProjectDlg; interface uses - Classes, SysUtils, LCLProc, LResources, Forms, Controls, Buttons, ComCtrls, - StdCtrls, ExtCtrls, Menus, Dialogs, Graphics, FileCtrl, AVL_Tree, + Classes, SysUtils, Math, LCLProc, LResources, Forms, Controls, Buttons, + ComCtrls, StdCtrls, ExtCtrls, Menus, Dialogs, Graphics, FileCtrl, AVL_Tree, LazarusIDEStrConsts, IDEProcs, IDEOptionDefs, EnvironmentOpts, Project, PackageDefs, PackageSystem; @@ -101,9 +101,6 @@ function CheckAddingDependency(LazProject: TProject; implementation -uses - Math; - function ShowAddToProjectDlg(AProject: TProject; var AddResult: TAddToProjectResult): TModalResult; var diff --git a/ide/buildlazdialog.pas b/ide/buildlazdialog.pas index bd41333a5a..08c53b320a 100644 --- a/ide/buildlazdialog.pas +++ b/ide/buildlazdialog.pas @@ -34,10 +34,10 @@ unit BuildLazDialog; interface uses - Classes, SysUtils, Forms, Controls, LCLType, LCLIntf, Graphics, GraphType, - StdCtrls, ExtCtrls, Buttons, FileCtrl, Dialogs, LResources, Laz_XMLCfg, - LazarusIDEStrConsts, TransferMacros, LazConf, IDEProcs, InputHistory, - ExtToolDialog, ExtToolEditDlg; + Classes, SysUtils, Math, Forms, Controls, LCLType, LCLIntf, Graphics, + GraphType, StdCtrls, ExtCtrls, Buttons, FileCtrl, Dialogs, LResources, + Laz_XMLCfg, LazarusIDEStrConsts, TransferMacros, LazConf, IDEProcs, + InputHistory, ExtToolDialog, ExtToolEditDlg; type { TBuildLazarusItem } @@ -222,9 +222,6 @@ function GetTranslatedMakeModes(MakeMode: TMakeMode): string; implementation -uses - Math; - const DefaultIDEMakeOptionFilename = 'idemake.cfg'; diff --git a/ide/customformeditor.pp b/ide/customformeditor.pp index f164b6e51c..28bcc82adb 100644 --- a/ide/customformeditor.pp +++ b/ide/customformeditor.pp @@ -38,7 +38,7 @@ uses {$IFDEF IDE_MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, AbstractFormeditor, Controls, PropEdits, TypInfo, + Classes, SysUtils, Math, AbstractFormeditor, Controls, PropEdits, TypInfo, Forms, Menus, Dialogs, AVL_Tree, ObjectInspector, JITForms, NonControlForms, ComponentReg, IDEProcs, ComponentEditors, KeyMapping, EditorOptions, Designerprocs; @@ -188,9 +188,6 @@ function CompareComponentAndInterface(Key, Data: Pointer): integer; implementation -uses - Math; - function CompareComponentInterfaces(Data1, Data2: Pointer): integer; var CompIntf1: TComponentInterface; diff --git a/ide/diffdialog.pas b/ide/diffdialog.pas index 5cbd39ef77..b867f5385f 100644 --- a/ide/diffdialog.pas +++ b/ide/diffdialog.pas @@ -39,9 +39,9 @@ unit DiffDialog; interface uses - Classes, SysUtils, Forms, Controls, Buttons, ExtCtrls, StdCtrls, SynEdit, - LResources, LazarusIDEStrConsts, EditorOptions, IDEOptionDefs, InputHistory, - DiffPatch; + Classes, SysUtils, Math, Forms, Controls, Buttons, ExtCtrls, StdCtrls, + SynEdit, LResources, LazarusIDEStrConsts, EditorOptions, IDEOptionDefs, + InputHistory, DiffPatch; type TOnGetDiffFile = procedure(TextID: integer; OnlySelection: boolean; @@ -148,9 +148,6 @@ function ShowDiffDialog(Files: TDiffFiles; Text1Index: integer; implementation -uses - Math; - function ShowDiffDialog(Files: TDiffFiles; Text1Index: integer; OnGetDiffFile: TOnGetDiffFile; diff --git a/ide/editoroptions.pp b/ide/editoroptions.pp index 89a7229652..85eadea9d2 100644 --- a/ide/editoroptions.pp +++ b/ide/editoroptions.pp @@ -38,8 +38,8 @@ unit EditorOptions; interface uses - LCLIntf, LCLType, - Forms, Classes, SysUtils, ComCtrls, Buttons, StdCtrls, ExtCtrls, LazConf, + Classes, SysUtils, Math, LCLIntf, LCLType, + Forms, ComCtrls, Buttons, StdCtrls, ExtCtrls, LazConf, FileCtrl, GraphType, Graphics, Controls, Dialogs, LResources, IDEProcs, SynEdit, SynEditHighlighter, SynEditAutoComplete, SynEditKeyCmds, SynHighlighterPas, SynHighlighterHTML, SynHighlighterCPP, SynHighlighterXML, @@ -531,8 +531,6 @@ function ExtensionToLazSyntaxHighlighter(Ext:string): TLazSyntaxHighlighter; implementation -uses Math; - const ValidAttribChars = ['a'..'z','A'..'Z','_','0'..'9']; diff --git a/ide/findinfilesdlg.pas b/ide/findinfilesdlg.pas index 5b152f26d9..1cb862cfb8 100644 --- a/ide/findinfilesdlg.pas +++ b/ide/findinfilesdlg.pas @@ -24,7 +24,7 @@ interface uses Classes, SysUtils, LCLIntf, Controls, StdCtrls, Forms, Buttons, ExtCtrls, - LResources, LazarusIDEStrConsts, DirSel, Dialogs, SynEditTypes; + LResources, FileCtrl, LazarusIDEStrConsts, DirSel, Dialogs, SynEditTypes; type TLazFindInFileSearchOption = (fifMatchCase, fifWholeWord, fifRegExpr, @@ -78,9 +78,6 @@ var FindInFilesDialog: TLazFindInFilesDialog; implementation -uses - filectrl; - { TLazFindInFilesDialog } constructor TLazFindInFilesDialog.Create(AOwner: TComponent); diff --git a/ide/frmsearch.pas b/ide/frmsearch.pas index 2da6c4a22a..b90c90482b 100644 --- a/ide/frmsearch.pas +++ b/ide/frmsearch.pas @@ -31,8 +31,14 @@ unit frmSearch; interface uses - Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls, - StdCtrls, Buttons, FindInFilesDlg; + // LCL + Classes, SysUtils, LResources, LCLType, LCLIntf, Forms, Controls, Graphics, + Dialogs, ExtCtrls, StdCtrls, Buttons, FileCtrl, + // synedit + SynRegExpr, + // ide + LazarusIDEStrConsts, FindInFilesDlg, SearchResultView; + type TSearchForm = class(TForm) @@ -68,6 +74,7 @@ type fSearchFileList: TStringList; fSearchFiles: boolean; fResultsList: TStrings; + fResultsWindow: integer; fPad: string; procedure SearchFile(TheFileName: string); procedure DoFindInFiles(TheFileName: string); @@ -89,6 +96,7 @@ type property ResultsList: TStrings read fResultsList write fResultsList; property SearchMask: string read fMask write fMask; property Pad: string read fPad write fPad; + property ResultsWindow: integer read fResultsWindow write fResultsWindow; end; var @@ -96,9 +104,6 @@ var implementation -uses - SynRegExpr, FileCtrl, LCLType, LCLIntf, LazarusIDEStrConsts; - const {$IFDEF Win32} FindMask = '*.*'; @@ -201,6 +206,8 @@ procedure TSearchForm.SearchFile(TheFileName: string); EndWord: boolean; //Does the word end with a seperator charater? TheLine: string; //Temp Storage for the current line in the file. TempSearch: string; //Temp Storage for the search string. + TheHeader: string; + MatchLen: integer; const WordBreakChars = ['.', ',', ';', ':', '"', '''', '!', '?', '[', ']', '(', @@ -208,6 +215,7 @@ procedure TSearchForm.SearchFile(TheFileName: string); begin try ThisFile:= TStringList.Create; + MatchLen:= Length(fSearchFor); //if this is not a regular expression search if (Not fCaseSensitive) then TempSearch:= UpperCase(fSearchFor) @@ -217,7 +225,7 @@ procedure TSearchForm.SearchFile(TheFileName: string); for Lines:= 0 to ThisFile.Count -1 do begin Application.ProcessMessages; - TheLine:= ThisFile.Strings[Lines]; + TheLine:= Trim(ThisFile.Strings[Lines]); if not fCaseSensitive then TheLine:= UpperCase(TheLine); Match:= pos(TempSearch,TheLine); @@ -239,17 +247,23 @@ procedure TSearchForm.SearchFile(TheFileName: string); end;//if if StartWord And EndWord then begin - fResultsList.Add(TheFileName +'('+IntToStr(lines+1)+ ',' + - IntToStr(match) + ')' + ' ' + - copy(ThisFile.Strings[Lines],Match,60)); + TheHeader:= TheFileName +'('+IntToStr(lines+1)+ ','+ IntToStr(match) + +')' + ' '; + SearchResultsView.AddMatch(fResultsWindow, + TheHeader + Trim(ThisFile.Strings[Lines]), + match + Length(TheHeader), + MatchLen); UpdateMatches; end;//if end;//if if not fWholeWord and (Match > 0) then begin - fResultsList.Add(TheFileName +'('+IntToStr(lines+1)+ ','+ - IntToStr(match) +')' + ' ' + - copy(ThisFile.Strings[Lines],Match,60)); + TheHeader:= TheFileName +'('+IntToStr(lines+1)+ ','+ IntToStr(match) + +')' + ' '; + SearchResultsView.AddMatch(fResultsWindow, + TheHeader + Trim(ThisFile.Strings[Lines]), + match + Length(TheHeader), + MatchLen); UpdateMatches; end;//if if fAbort and not fAborting then @@ -271,10 +285,12 @@ procedure TSearchForm.SearchFile(TheFileName: string); {DoRegExpSearch is called if the search is a regular expression} procedure DoRegExpSearch; var - ThisFile: TStringList; + ThisFile: TStringList; Lines: integer; //Loop Counter Match: integer; //Position of match in line. + MatchLen: integer; TheLine: string; //Temp Storage for the current line in the file. + TheHeader: string; RE: TRegExpr; //Regular expression search engin begin try @@ -291,13 +307,17 @@ procedure TSearchForm.SearchFile(TheFileName: string); for Lines:= 0 to ThisFile.Count - 1 do begin Application.ProcessMessages; - TheLine:= ThisFile[Lines]; + TheLine:= Trim(ThisFile[Lines]); if RE.Exec(TheLine) then begin Match:= RE.MatchPos[0]; - fResultsList.Add(TheFileName +'('+IntToStr(lines+1) + - ','+ IntToStr(Match) + ')' + - copy(TheLine,Match,60)); + MatchLen:= Re.MatchLen[0]; + + TheHeader:= TheFileName +'('+IntToStr(lines+1)+ ','+ IntToStr(match) + +')' + ' '; + SearchResultsView.AddMatch(fResultsWindow,TheHeader + TheLine, + match + Length(TheHeader), + MatchLen); UpdateMatches; end;//if if fAbort and not fAborting then diff --git a/ide/inputfiledialog.pas b/ide/inputfiledialog.pas index 528682e1ad..0d6469eb9c 100644 --- a/ide/inputfiledialog.pas +++ b/ide/inputfiledialog.pas @@ -28,8 +28,11 @@ unit InputFileDialog; interface uses - Classes, SysUtils, Forms, Controls, Dialogs, Buttons, StdCtrls, IDEProcs, - LResources, TransferMacros, InputHistory, FileCtrl; + // LCL + Classes, SysUtils, Math, Forms, Controls, Dialogs, Buttons, StdCtrls, + FileCtrl, LResources, + // IDE + IDEProcs, TransferMacros, InputHistory; type TInputFileFlag = (iftDirectory, iftFilename, iftCmdLine, @@ -113,9 +116,6 @@ function GetInputFileDialog: TInputFileDialog; implementation -uses - Math; - var InputFileDlg: TInputFileDialog; function GetInputFileDialog: TInputFileDialog; diff --git a/ide/main.pp b/ide/main.pp index 4e0b53df9f..8960bd2ea7 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -925,7 +925,13 @@ procedure TMainIDE.CreateSearchResultWindow; begin if SearchResultsView<>nil then exit; Application.CreateForm(TSearchResultsView, SearchResultsView); - SearchResultsView.OnSelectionChanged:= @SearchResultsViewSelectionChanged; + with SearchResultsView do + begin +// ListBoxFont.Name:= EditorOpts.EditorFont; +// ListBoxFont.Size:= EditorOpts.EditorFontHeight; +// ListBoxFont.Style:=[]; + OnSelectionChanged:= @SearchResultsViewSelectionChanged; + end;//with end; procedure TMainIDE.OIOnSelectComponents(Sender: TObject); @@ -10100,6 +10106,9 @@ end. { ============================================================================= $Log$ + Revision 1.671 2003/11/22 15:14:12 mattias + prepared IDE units for split + Revision 1.670 2003/11/16 19:28:33 mattias build lazarus now uses custom compiler path diff --git a/ide/searchresultview.lfm b/ide/searchresultview.lfm index adc4c88c26..c6ac9fa6db 100644 --- a/ide/searchresultview.lfm +++ b/ide/searchresultview.lfm @@ -1,21 +1,21 @@ object SearchResultsView: TSearchResultsView CAPTION = 'SearchResultsView' - CLIENTHEIGHT = 225 + CLIENTHEIGHT = 229 CLIENTWIDTH = 799 ONCREATE = Form1Create ONDESTROY = SearchResultsViewDestroy HORZSCROLLBAR.PAGE = 800 - VERTSCROLLBAR.PAGE = 226 - LEFT = 280 - HEIGHT = 225 - TOP = 389 + VERTSCROLLBAR.PAGE = 230 + LEFT = 151 + HEIGHT = 229 + TOP = 481 WIDTH = 799 object ResultsNoteBook: TNOTEBOOK ALIGN = albottom ANCHORS = [aktop, akleft] ONCLOSETABCLICKED = ResultsNoteBookClosetabclicked OPTIONS = [nboshowclosebuttons, nbomultiline] - HEIGHT = 185 + HEIGHT = 189 TOP = 40 WIDTH = 799 end diff --git a/ide/searchresultview.lrs b/ide/searchresultview.lrs index 9c72c495d6..a7a4a65cfd 100644 --- a/ide/searchresultview.lrs +++ b/ide/searchresultview.lrs @@ -2,13 +2,13 @@ LazarusResources.Add('TSearchResultsView','FORMDATA',[ 'TPF0'#18'TSearchResultsView'#17'SearchResultsView'#7'CAPTION'#6#17'SearchRes' - +'ultsView'#12'CLIENTHEIGHT'#3#225#0#11'CLIENTWIDTH'#3#31#3#8'ONCREATE'#7#11 + +'ultsView'#12'CLIENTHEIGHT'#3#229#0#11'CLIENTWIDTH'#3#31#3#8'ONCREATE'#7#11 +'Form1Create'#9'ONDESTROY'#7#24'SearchResultsViewDestroy'#18'HORZSCROLLBAR.P' - +'AGE'#3' '#3#18'VERTSCROLLBAR.PAGE'#3#226#0#4'LEFT'#3#24#1#6'HEIGHT'#3#225#0 - +#3'TOP'#3#133#1#5'WIDTH'#3#31#3#0#9'TNOTEBOOK'#15'ResultsNoteBook'#5'ALIGN'#7 + +'AGE'#3' '#3#18'VERTSCROLLBAR.PAGE'#3#230#0#4'LEFT'#3#151#0#6'HEIGHT'#3#229#0 + +#3'TOP'#3#225#1#5'WIDTH'#3#31#3#0#9'TNOTEBOOK'#15'ResultsNoteBook'#5'ALIGN'#7 +#8'albottom'#7'ANCHORS'#11#5'aktop'#6'akleft'#0#17'ONCLOSETABCLICKED'#7#30'R' +'esultsNoteBookClosetabclicked'#7'OPTIONS'#11#19'nboshowclosebuttons'#12'nbo' - +'multiline'#0#6'HEIGHT'#3#185#0#3'TOP'#2'('#5'WIDTH'#3#31#3#0#0#7'TBUTTON'#14 + +'multiline'#0#6'HEIGHT'#3#189#0#3'TOP'#2'('#5'WIDTH'#3#31#3#0#0#7'TBUTTON'#14 +'btnSearchAgain'#7'ANCHORS'#11#5'aktop'#6'akleft'#0#7'CAPTION'#6#12'Search A' +'gain'#7'TABSTOP'#9#8'TABORDER'#2#1#7'ONCLICK'#7#19'btnSearchAgainClick'#4'L' +'EFT'#2#8#6'HEIGHT'#2#25#3'TOP'#2#8#5'WIDTH'#2's'#0#0#0 diff --git a/ide/searchresultview.pp b/ide/searchresultview.pp index d3d8dc4a46..bae103b205 100644 --- a/ide/searchresultview.pp +++ b/ide/searchresultview.pp @@ -39,8 +39,56 @@ interface uses Classes, SysUtils, Math, LResources, Forms, Controls, Graphics, Dialogs, ComCtrls, ExtCtrls, StdCtrls, Buttons, LCLType, - IDEOptionDefs, LazarusIDEStrConsts, EnvironmentOpts; + IDEOptionDefs, LazarusIDEStrConsts, EnvironmentOpts, FindInFilesDlg, Project; + + {TLazSearchMatchPos} +type + TLazSearchMatchPos = class(TObject) + private + fMatchStart: integer; + fMatchLen: integer; + public + property MatchStart: integer read fMatchStart write fMatchStart; + property MatchLen: integer read fMatchLen write fMatchLen; +end;//TLazSearchMatchPos + + {TLazSearch} +type + TLazSearch = Class(TObject) + private + fSearchString: string; + fSearchOptions: TLazFindInFileSearchOptions; + fSearchDirectory: string; + fSearchMask: string; + public + property SearchString: string read fSearchString write fSearchString; + property SearchOptions: TLazFindInFileSearchOptions read fSearchOptions + write fSearchOptions; + property SearchDirectory: string read fSearchDirectory + write fSearchDirectory; + property SearchMask: string read fSearchMask write fSearchMask; +end;//TLazSearch + + {TLazSearchResultLB} +type + TLazSearchResultLB = Class(TCustomListBox) + private + fSearchObject: TLazSearch; + fUpdateStrings: TStrings; + fUpdating: boolean; + fUpdateCount: integer; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property SearchObject: TLazSearch read fSearchObject write fSearchObject; + procedure BeginUpdate; + procedure EndUpdate; + property UpdateItems: TStrings read fUpdateStrings write fUpdateStrings; + property UpdateState: boolean read fUpdating; +end; + +{TSearchResultsView} type TSearchResultsView = class(TForm) btnSearchAgain: TBUTTON; @@ -52,42 +100,51 @@ type procedure btnSearchAgainClick(Sender: TObject); procedure ListboxDrawitem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); + procedure LazLBShowHint(Sender: TObject; HintInfo: Pointer); + procedure LazLBMousemove(Sender: TObject; Shift: TShiftState; + X, Y: Integer); + Procedure LazLBMouseWheel(Sender: TObject; Shift: TShiftState; + WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); private { private declarations } - fUpdating: boolean; - fSearchObjectList: TStringList; - function PageExists(APageName: string): boolean; + function PageExists(const APageName: string): boolean; function GetPageIndex(APageName: string): integer; - function GetListBox(APageIndex: integer): TListBox; + function GetListBox(APageIndex: integer): TLazSearchResultLB; procedure ListBoxClicked(Sender: TObject); procedure ListBoxDoubleClicked(Sender: TObject); + procedure SetItems(Index: Integer; Value: TStrings); + function GetItems(Index: integer): TStrings; fOnSelectionChanged: TNotifyEvent; + fListBoxFont: TFont; + fMouseOverIndex: integer; public { public declarations } - function AddResult(const ResultsName: string; SearchText: string): TStrings; + function AddResult(const ResultsName: string; + const SearchText: string; + const ADirectory: string; + const AMask: string; + const TheOptions: TLazFindInFileSearchOptions): integer; function GetSourcePositon: TPoint; function GetSourceFileName: string; function GetSelectedText: string; - procedure BringResultsToFront(APageName: string); - procedure BeginUpdate; - procedure EndUpdate; + procedure BringResultsToFront(const APageName: string); + procedure AddMatch(const AIndex: integer; const TheText: string; + const MatchStart: integer; const MatchLen: integer); + procedure BeginUpdate(AIndex: integer); + procedure EndUpdate(AIndex: integer); + property ListBoxFont: TFont read fListBoxFont write fListBoxFont; property OnSelectionChanged: TNotifyEvent read fOnSelectionChanged write fOnSelectionChanged; + property Items[Index: integer]: TStrings read GetItems write SetItems; end; -type - TLazSearch = Class(TObject) - private - fSearchString: string; - public - property SearchString: string read fSearchString write fSearchString; - end; - var SearchResultsView: TSearchResultsView; implementation - +uses + MainBar; + { TSearchResultsView } const @@ -108,8 +165,13 @@ begin ItemByEnum(nmiwSearchResultsViewName); ALayout.Form:=TForm(Self); ALayout.Apply; - fSearchObjectList:= TStringList.Create; + fListBoxFont:= TFont.Create; + fListBoxFont.Name:= 'courier'; + fListBoxFont.Height:= 12; + fListBoxFont.Style:= []; fOnSelectionChanged:= nil; + self.ShowHint:= True; + fMouseOverIndex:= -1; end;//Create procedure TSearchResultsView.ResultsNoteBookChangebounds(Sender: TObject); @@ -117,41 +179,89 @@ begin end; -procedure TSearchResultsView.SearchResultsViewDestroy(Sender: TObject); -var - i: integer; - TheObject: TObject; +{Keeps track of the Index of the Item the mouse is over, Sets ShowHint to true +if the Item length is longer than the Listbox client width.} +procedure TSearchResultsView.LazLBMousemove(Sender: TObject; Shift: TShiftState; + X, Y: Integer); begin - try - if not Assigned(fSearchObjectList) then - Writeln('fSearchObject is not assigned'); - for i:= 0 to fSearchObjectList.Count - 1 do + if Sender is TLazSearchResultLB then + begin + with Sender as TLazSearchResultLB do begin - if Assigned(fSearchObjectList.Objects[i]) then + fMouseOverIndex:= GetIndexAtY(Y); + if (fMouseOverIndex > -1) and (fMouseOverIndex < Items.Count) then begin - TheObject:= fSearchObjectList.Objects[i]; - FreeAndNil(TheObject); + if (Canvas.TextWidth(Items[fMouseOverIndex]) > Width) then + ShowHint:= True + else + ShowHint:= False; end;//if - end;//for - except - writeln('Exception in form destroy!'); - end;//except - FreeAndNil(fSearchObjectList); + end;//with + end;// +end;//LazLBMousemove + +{Keep track of the mouse position over the list box when the wheel is used} +procedure TSearchResultsView.LazLBMouseWheel(Sender: TObject; + Shift: TShiftState; + WheelDelta: Integer; + MousePos: TPoint; + var Handled: Boolean); +begin + LazLBMouseMove(Sender,Shift,MousePos.X, MousePos.Y); + Handled:= false; +end;//LazLBMouseWheel + +procedure TSearchResultsView.AddMatch(const AIndex: integer; + const TheText: string; + const MatchStart: integer; + const MatchLen: integer); +var + CurrentLB: TLazSearchResultLB; + SearchPos: TLazSearchMatchPos; +begin + CurrentLB:= GetListBox(AIndex); + if Assigned(CurrentLB) then + begin + SearchPos:= TLazSearchMatchPos.Create; + SearchPos.MatchStart:= MatchStart; + SearchPos.MatchLen:= MatchLen; + if CurrentLB.UpdateState then + CurrentLB.UpdateItems.AddObject(TheText, SearchPos) + else + CurrentLB.Items.AddObject(TheText, SearchPos); + end;//if +end;//AddMatch + +procedure TSearchResultsView.SearchResultsViewDestroy(Sender: TObject); +begin + fListBoxFont.free; end;//SearchResulstViewDestroy -Procedure TSearchResultsView.BeginUpdate; +Procedure TSearchResultsView.BeginUpdate(AIndex: integer); +var + CurrentLB: TLazSearchResultLB; begin - fUpDating:= true; + CurrentLB:= GetListBox(AIndex); + if Assigned(CurrentLB) then + CurrentLB.BeginUpdate; end;//BeginUpdate -procedure TSearchResultsView.EndUpdate; +procedure TSearchResultsView.EndUpdate(AIndex: integer); +var + CurrentLB: TLazSearchResultLB; begin - fUpdating:= false; + CurrentLB:= GetListBox(AIndex); + if Assigned(CurrentLB) then + begin + CurrentLB.EndUpdate; + CurrentLB.ItemIndex:= 0; + CurrentLB.TopIndex:= 0; + end;//if end;//EndUpdate {Brings the results tab named APageName to front. If APageName does not exist, does nothing} -procedure TSearchResultsView.BringResultsToFront(APageName: string); +procedure TSearchResultsView.BringResultsToFront(const APageName: string); begin if PageExists(APageName) then begin @@ -159,19 +269,46 @@ begin end;//if end;//BringResultsToFront -procedure TSearchResultsView.ResultsNoteBookClosetabclicked(Sender: TObject); +{Sets the Items from the list box on the currently selected page in the + TNoteBook} +procedure TSearchResultsView.SetItems(Index: integer; Value: TStrings); var - TheObject: TObject; - i: integer; + CurrentLB: TLazSearchResultLB; +begin + if Index > -1 then + begin + CurrentLB:= GetListBox(Index); + if Assigned(CurrentLB) then + begin + if CurrentLB.UpdateState then + CurrentLB.UpdateItems.Assign(Value) + else + CurrentLB.Items.Assign(Value); + end;//if + end//if +end;//SetItems + +function TSearchResultsView.GetItems(Index: integer): TStrings; +var + CurrentLB: TLazSearchResultLB; +begin + result:= nil; + CurrentLB:= GetListBox(Index); + if Assigned(CurrentLB) then + begin + if CurrentLB.UpdateState then + result:= CurrentLB.UpdateItems + else + result:= CurrentLB.Items; + end;//if +end;//GetItems + +procedure TSearchResultsView.ResultsNoteBookClosetabclicked(Sender: TObject); begin if (Sender is TPage) then begin with sender as TPage do begin - i:= fSearchObjectList.IndexOf(Caption); - TheObject:= fSearchObjectList.Objects[i]; - FreeAndNil(TheObject); - fSearchObjectList.Delete(i); ResultsNoteBook.Pages.Delete(PageIndex); end;//with end;//if @@ -180,13 +317,29 @@ begin end;//ResultsNoteBookClosetabclicked procedure TSearchResultsView.btnSearchAgainClick(Sender: TObject); +var + CurrentLB: TLazSearchResultLB; + SearchObj: TLazSearch; begin - MessageDlg('Working On it!', mtInformation,[mbOk],0); + CurrentLB:= GetListBox(ResultsNoteBook.PageIndex); + if not Assigned(CurrentLB) then exit; + SearchObj:= CurrentLB.SearchObject; + if Assigned(FindInFilesDialog) then + begin + with FindInFilesDialog do + begin + DirectoryComboBox.Text:= SearchObj.SearchDirectory; + FindText:= SearchObj.SearchString; + Options:= SearchObj.SearchOptions; + FileMaskComboBox.Text:= SearchObj.SearchMask; + end;//with + SourceNotebook.FindInFiles(Project1); + end;//if end; {Searched the notebook control for a page with APageName name, returns true if found} -function TSearchResultsView.PageExists(APageName: string): boolean; +function TSearchResultsView.PageExists(const APageName: string): boolean; var i: integer; begin @@ -202,17 +355,18 @@ begin end;//PageExists {Add Result will create a tab in the Results view window with an new - list box and return the Items from the new listbox to be filled in - by the search routine.} + list box or focus an existing listbox and update it's searchoptions.} function TSearchResultsView.AddResult(const ResultsName: string; - SearchText: string ): TStrings; + const SearchText: string; + const ADirectory: string; + const AMask: string; + const TheOptions: TLazFindInFileSearchOptions): integer; var - NewListBox: TListBox; + NewListBox: TLazSearchResultLB; NewPage: LongInt; i: integer; - SearchObj: TLazSearch; begin - Result:= nil; + result:= -1; if Assigned(ResultsNoteBook) then begin With ResultsNoteBook do @@ -226,29 +380,56 @@ begin else begin NewPage:= Pages.Add(ResultsName + SPACE); - SearchObj:= TLazSearch.Create; - SearchObj.SearchString:= SearchText; - fSearchObjectList.AddObject(ResultsName + SPACE, SearchObj); + ResultsNoteBook.PageIndex:= NewPage; if NewPage > -1 then begin - NewListBox:= TListBox.Create(Page[NewPage]); - NewListBox.Parent:= Page[NewPage]; - NewListBox.Align:= alClient; - NewListBox.OnClick:= @ListBoxClicked; - NewListBox.OnDblClick:= @ListBoxDoubleClicked; - //NewListBox.Style:= lbOwnerDrawFixed; - //NewListBox.OnDrawItem:= @ListBoxDrawItem; - //NewListBox.Font.Name:= 'courier'; - //NewListBox.Font.Height:= 12; - //NewListBox.ItemHeight:= 2 * NewListBox.Canvas.TextHeight('0'); + NewListBox:= TLazSearchResultLB.Create(Page[NewPage]); + with NewListBox do + begin + Parent:= Page[NewPage]; + Align:= alClient; + OnClick:= @ListBoxClicked; + OnDblClick:= @ListBoxDoubleClicked; + Style:= lbOwnerDrawFixed; + OnDrawItem:= @ListBoxDrawItem; + Font.Name:= fListBoxFont.Name; + Font.Height:= fListBoxFont.Height; + OnShowHint:= @LazLBShowHint; + OnMouseMove:= @LazLBMousemove; + OnMouseWheel:= @LazLBMouseWheel; + ShowHint:= true; + NewLIstBox.Canvas.Color:= clWhite; + end;//with end;//if end;//else - end;// + end;//with + with NewListBox.SearchObject do + begin + SearchString:= SearchText; + SearchDirectory:= ADirectory; + SearchMask:= AMask; + SearchOptions:= TheOptions; + end;//with + result:= ResultsNoteBook.PageIndex; end;//if - if NewListBox<>nil then - Result:= NewListBox.Items; end;//AddResult + +procedure TSearchResultsView.LazLBShowHint(Sender: TObject; HintInfo: Pointer); +begin + if Sender is TLazSearchResultLB then + begin + With Sender as TLazSearchResultLB do + begin + if (fMouseOverIndex >= 0) and (fMouseOverIndex < Items.Count) then + begin + Hint:= Items[fMouseOverIndex]; + end;//if + end;//with + end;//if +end;//LazLBShowHint + + procedure TSearchResultsView.ListboxDrawitem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); @@ -256,56 +437,42 @@ var FirstPart: string; BoldPart: string; LastPart: string; - i: integer; BoldLen: integer; - SearchObj: TLazSearch; TheText: string; - SearchText: string; TheTop: integer; + MatchPos: TLazSearchMatchPos; begin - //if not fUpdating then - //begin - With Control as TListBox do + With Control as TLazSearchResultLB do + begin + Canvas.FillRect(ARect); + TheText:= Items[Index]; + if Items.Objects[Index] is TLazSearchMatchPos then + MatchPos:= TLazSearchMatchPos(Items.Objects[Index]) + else + MatchPos:= nil; + + if Assigned(MatchPos) then begin - Canvas.FillRect(ARect); - TheText:= Items[Index]; - if Items.Count > 0 then - begin - i:= fSearchObjectList.IndexOf(ResultsNoteBook.ActivePage); - SearchObj:= TLazSearch(fSearchObjectList.Objects[i]); - end; - if Assigned(SearchObj) then - begin - SearchText:= SearchObj.SearchString; - TheText:= Items[Index]; - i:= pos(SearchText,TheText); - if i > 0 then - begin - TheTop:= ARect.Top + 1; - BoldLen:= Length(SearchText); - FirstPart:= copy(TheText,1,i-1); - BoldPart:= copy(TheText,i,BoldLen + 1); - LastPart:= copy(TheText, i + BoldLen +1, Length(TheText) - - (i + BoldLen)); - Canvas.TextOut(ARect.Left, TheTop, FirstPart); - Canvas.Font.Style:= Canvas.Font.Style + [fsBold]; - Canvas.TextOut(ARect.Left + Canvas.TextWidth(FirstPart), - TheTop, BoldPart); - Canvas.Font.Style:= Canvas.Font.Style - [fsBold]; - Canvas.TextOut(ARect.Left + Canvas.TextWidth(FirstPart + BoldPart), - TheTop, LastPart); - end//if - else - begin - Canvas.TextOut(ARect.Left, ARect.Top + 1, TheText); - end;//else - end - else - begin - Canvas.TextOut(ARect.Left, ARect.Top + 1, TheText); - end;//else - end;//with - //end;//if + TheTop:= ARect.Top; + BoldLen:= MatchPos.MatchLen; + FirstPart:= copy(TheText,1,MatchPos.MatchStart - 1); + BoldPart:= copy(TheText,MatchPos.MatchStart ,BoldLen); + LastPart:= copy(TheText, MatchPos.MatchStart + BoldLen, + Length(TheText) - (MatchPos.MatchStart + BoldLen) + 2); + Canvas.TextOut(ARect.Left, TheTop, FirstPart); + Canvas.Font.Style:= Canvas.Font.Style + [fsBold]; + {TODO: Find out why bold is 1 pixel off} + Canvas.TextOut(ARect.Left + Canvas.TextWidth(FirstPart), + TheTop - 1, BoldPart); + Canvas.Font.Style:= Canvas.Font.Style - [fsBold]; + Canvas.TextOut(ARect.Left + Canvas.TextWidth(FirstPart + BoldPart), + TheTop, LastPart); + end//if + else + begin + Canvas.TextOut(ARect.Left, ARect.Top + 1, TheText); + end;//else + end;//with end;//ListBoxDrawItem procedure TSearchResultsView.ListBoxClicked(Sender: TObject); @@ -381,7 +548,7 @@ end;//GetSourceFileName function TSearchResultsView.GetSelectedText: string; var ThePage: TPage; - TheListBox: TListBox; + TheListBox: TLazSearchResultLB; i: integer; begin result:= ''; @@ -419,7 +586,7 @@ end;//GetPageIndex {Returns a the listbox control from a Tab if both the page and the listbox exist else returns nil} -function TSearchResultsView.GetListBox(APageIndex: integer): TListBox; +function TSearchResultsView.GetListBox(APageIndex: integer): TLazSearchResultLB; var i: integer; ThePage: TPage; @@ -432,9 +599,9 @@ begin begin for i:= 0 to ThePage.ComponentCount - 1 do begin - if ThePage.Components[i] is TListBox then + if ThePage.Components[i] is TLazSearchResultLB then begin - result:= TListBox(ThePage.Components[i]); + result:= TLazSearchResultLB(ThePage.Components[i]); break; end;//if end;//for @@ -442,6 +609,76 @@ begin end;//if end;//GetListBox + +{****************************************************************************** + TLazSearchResultLB +******************************************************************************} +Constructor TLazSearchResultLB.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + fSearchObject:= TLazSearch.Create; + fUpdating:= false; + fUpdateCount:= 0; + fUpdateStrings:= TStringList.Create; +end;//Create + +Destructor TLazSearchResultLB.Destroy; +var + i: integer; +begin + if Assigned(fSearchObject) then + FreeAndNil(fSearchObject); + if Assigned(fUpdateStrings) then + begin + for i:= 0 to fUpdateStrings.Count -1 do + begin + if Assigned(fUpdateStrings.Objects[i]) then + fUpdateStrings.Objects[i].free; + end;//for + FreeAndNil(fUpdateStrings); + end;//if + + inherited Destroy; +end;//Destroy + +procedure TLazSearchResultLB.BeginUpdate; +begin + inc(fUpdateCount); + if (fUpdateCount = 1) then + begin + if Assigned(Items) then + fUpdateStrings.Assign(Items); + fUpdating:= true; + end;//if +end;//BeginUpdate + +procedure TLazSearchResultLB.EndUpdate; +var + i: integer; +begin + dec(fUpdateCount); + if (fUpdateCount < 0) then + fUpdateCount:= 0; + if (fUpdateCount = 0) then + begin + fUpdating:= false; + for i:= 0 to Items.Count -1 do + begin + try + if Assigned(Items.Objects[i]) then + begin + Items.Objects[i].free; + end;//if + except + writeln('Exception in TLazSearchResultLB.EndUpdate,' + + ' Pointer assigned free failed'); + end;//except + end;//for + Items.Assign(fUpdateStrings); + end;//if +end;//EndUpdate + + initialization {$I searchresultview.lrs} diff --git a/ide/uniteditor.pp b/ide/uniteditor.pp index 6aef6201b2..ef73392308 100644 --- a/ide/uniteditor.pp +++ b/ide/uniteditor.pp @@ -55,7 +55,7 @@ uses MsgView, SearchResultView, InputHistory, LazarusIDEStrConsts, BaseDebugManager, Debugger, TypInfo, LResources, LazConf, EnvironmentOpts, Compiler, SortSelectionDlg, EncloseSelectionDlg, ClipBoardHistory, DiffDialog, - SourceEditProcs, SourceMarks, CharacterMapDlg; + SourceEditProcs, SourceMarks, CharacterMapDlg, frmSearch; type TSourceNoteBook = class; @@ -566,6 +566,17 @@ type procedure EndIncrementalFind; property IncrementalSearchStr: string read FIncrementalSearchStr write SetIncrementalSearchStr; + //FindInFiles + function CreateFindInFilesDialog: TLazFindInFilesDialog; + procedure LoadFindInFilesHistory(ADialog: TLazFindInFilesDialog); + procedure SaveFindInFilesHistory(ADialog: TLazFindInFilesDialog); + procedure FIFSearchProject(AProject: TProject; + ADialog: TLazFindInFilesDialog); + procedure FIFSearchOpenFiles(ADialog: TLazFindInFilesDialog); + procedure FIFSearchDir(ADialog: TLazFindInFilesDialog); + function FIFCreateSearchForm(ADialog:TLazFindInFilesDialog): TSearchForm; + procedure DoFindInFiles(ASearchForm: TSearchForm); + published property OnAddJumpPoint: TOnAddJumpPoint read FOnAddJumpPoint write FOnAddJumpPoint; @@ -638,9 +649,6 @@ type implementation -uses - frmSearch; - var Highlighters: array[TLazSyntaxHighlighter] of TSynCustomHighlighter; // aCompletion: @@ -3353,98 +3361,167 @@ Begin if TempEditor <> nil then TempEditor.FindPrevious; End; -Procedure TSourceNotebook.FindInFiles(AProject: TProject); -var - TheFileList: TStringList; //List of Files to be searched. - i: integer; //loop counter - AnUnitInfo: TUnitInfo; - LocalFindText: String; //Text to search for - SearchForm: TSearchForm; // -Begin - if FindInFilesDialog=nil then - FindInFilesDialog:=TLazFindInFilesDialog.Create(Application); - with FindInFilesDialog do +//FindInFiles +function TSourceNotebook.CreateFindInFilesDialog: TLazFindInFilesDialog; +begin + Result:=TLazFindInFilesDialog.Create(Application); + LoadFindInFilesHistory(Result); +end;//CreateFindInFilesDialog + +procedure TSourceNotebook.LoadFindInFilesHistory(ADialog: TLazFindInFilesDialog); +begin + if Assigned(ADialog) then begin - TextToFindComboBox.Items.Assign(InputHistories.FindHistory); - DirectoryComboBox.Items.Assign(InputHistories.FindInFilesPathHistory); - FileMaskComboBox.Items.Assign(InputHistories.FindInFilesMaskHistory); - end;//With - if FindInFilesDialog.ShowModal=mrOk then + with ADialog do + begin + TextToFindComboBox.Items.Assign(InputHistories.FindHistory); + DirectoryComboBox.Items.Assign(InputHistories.FindInFilesPathHistory); + FileMaskComboBox.Items.Assign(InputHistories.FindInFilesMaskHistory); + end;//With + end;//if +end;//LoadFindInFilesHistory + +procedure TSourceNoteBook.SaveFindInFilesHistory(ADialog: TLazFindInFilesDialog); +begin + if Assigned(ADialog) then begin - LocalFindText:=FindInFilesDialog.FindText; - with FindInFilesDialog do + with ADialog do begin InputHistories.AddToFindHistory(FindText); InputHistories.AddToFindInFilesPathHistory(DirectoryComboBox.Text); InputHistories.AddToFindInFilesMaskHistory(FileMaskComboBox.Text); end;//with InputHistories.Save; - if LocalFindText<>'' then + end;//if +end;//SaveFindInFilesHistory + +{Search All the files in a project and add the results to the SearchResultsView + Dialog} +procedure TSourceNoteBook.FIFSearchProject(AProject: TProject; + ADialog: TLazFindInFilesDialog); +var + AnUnitInfo: TUnitInfo; + TheFileList: TStringList; + SearchForm: TSearchForm; +begin + try + TheFileList:= TStringList.Create; + AnUnitInfo:=AProject.FirstPartOfProject; + while AnUnitInfo<>nil do begin + //Only if file exists on disk. + if FilenameIsAbsolute(AnUnitInfo.FileName) and + FileExists(AnUnitInfo.FileName) then + TheFileList.Add(AnUnitInfo.FileName); + AnUnitInfo:=AnUnitInfo.NextPartOfProject; + end;//while + SearchForm:= FIFCreateSearchForm(ADialog); + SearchForm.SearchFileList:= TheFileList; + DoFindInFiles(SearchForm); + finally + FreeAndNil(TheFileList); + FreeAndNil(SearchForm); + end;//finally +end;//FIFSearchProject + +procedure TSourceNoteBook.FIFSearchDir(ADialog: TLazFindInFilesDialog); +var + SearchForm: TSearchForm; +begin + try + SearchForm:= FIFCreateSearchForm(ADialog); + SearchForm.SearchFileList:= Nil; + DoFindInFiles(SearchForm); + finally + FreeAndNil(SearchForm); + end; +end;//FIFSearchDir; + +Procedure TSourceNoteBook.DoFindInFiles(ASearchForm: TSearchForm); +var + ListIndex: integer; +begin + ShowSearchResultsView; + ListIndex:=SearchResultsView.AddResult('Search For '+ASearchForm.SearchText, + ASearchForm.SearchText, + ASearchForm.SearchDirectory, + ASearchForm.SearchMask, + ASearchForm.SearchOptions); + + try + SearchResultsView.BeginUpdate(ListIndex); + ASearchForm.ResultsList:= SearchResultsView.Items[ListIndex]; + SearchResultsView.Items[ListIndex].Clear; + ASearchForm.ResultsWindow:= ListIndex; + try + ASearchForm.Show; + ASearchForm.DoSearch; + except + on E: ERegExpr do + MessageDlg(lisUEErrorInRegularExpression, E.Message,mtError, + [mbCancel],0); + end;//except + finally + SearchResultsView.EndUpdate(ListIndex); + SearchResultsView.ShowOnTop; + end;//finally +end;//DoFindInFiles + +procedure TSourceNoteBook.FIFSearchOpenFiles(ADialog: TLazFindInFilesDialog); +var + i: integer; + TheFileList: TStringList; + SearchForm: TSearchForm; +begin + try + TheFileList:= TStringList.Create; + for i:= 0 to self.EditorCount -1 do begin - try - TheFileList:= TStringList.Create; - if (FindInFilesDialog.WhereRadioGroup.ItemIndex = 1) or - (FindInFilesDialog.WhereRadioGroup.ItemIndex = 0) then - begin - if FindInFilesDialog.WhereRadioGroup.ItemIndex = 0 then - begin - AnUnitInfo:=AProject.FirstPartOfProject; - while AnUnitInfo<>nil do begin - //Only if file exists on disk. - if FilenameIsAbsolute(AnUnitInfo.FileName) - and FileExists(AnUnitInfo.FileName) then - TheFileList.Add(AnUnitInfo.FileName); - AnUnitInfo:=AnUnitInfo.NextPartOfProject; - end;//while - end//if - else - begin - for i:= 0 to self.EditorCount -1 do - begin - //only if file exists on disk - if FilenameIsAbsolute(Editors[i].FileName) and - FileExists(Editors[i].FileName) then - begin - TheFileList.Add(Editors[i].FileName); - end;//if - end;//for - end;//else - end;//if - try - SearchForm:= TSearchForm.Create(SearchResultsView); - ShowSearchResultsView; - with SearchForm do - begin - SearchOptions:= FindInFilesDialog.Options; - SearchText:= LocalFindText; - SearchFileList:= TheFileList; - ResultsList:= SearchResultsView.AddResult('Search For ' + - LocalFindText, - LocalFindText); - if Assigned(ResultsList) then - begin - ResultsList.Clear; - SearchMask:= FindInFilesDialog.FileMaskComboBox.Text; - SearchDirectory:= FindInFilesDialog.DirectoryComboBox.Text; - end;//if - end;//with - try - SearchResultsView.BeginUpdate; - SearchForm.Show; - SearchForm.DoSearch; - except - on E: ERegExpr do - MessageDlg(lisUEErrorInRegularExpression, E.Message,mtError, - [mbCancel],0); - end;//try-except - finally - FreeAndNil(SearchForm); - SearchResultsView.EndUpdate; - SearchResultsView.ShowOnTop; - end;//finally - finally - FreeAndNil(TheFileList); - end;//finally + //only if file exists on disk + if FilenameIsAbsolute(Editors[i].FileName) and + FileExists(Editors[i].FileName) then + begin + TheFileList.Add(Editors[i].FileName); + end;//if + end;//for + SearchForm:= FIFCreateSearchForm(ADialog); + SearchForm.SearchFileList:= TheFileList; + DoFindInFiles(SearchForm); + finally + FreeAndNil(TheFileList); + FreeAndNil(SearchForm); + end;//finally +end;//FIFSearchOpenFiles + +{Creates the search form and loads the options selected in the + findinfilesdialog} +function TSourceNoteBook.FIFCreateSearchForm + (ADialog: TLazFindInFilesDialog): TSearchForm; +begin + result:= TSearchForm.Create(SearchResultsView); + with result do + begin + SearchOptions:= ADialog.Options; + SearchText:= ADialog.FindText; + SearchMask:= ADialog.FileMaskComboBox.Text; + SearchDirectory:= ADialog.DirectoryComboBox.Text; + end;//with +end;//FIFCreateSearchForm + +Procedure TSourceNotebook.FindInFiles(AProject: TProject); +Begin + if FindInFilesDialog=nil then + FindInFilesDialog:=CreateFindInFilesDialog; + if FindInFilesDialog.ShowModal=mrOk then + begin + SaveFindInFilesHistory(FindInFilesDialog); + LoadFindInFilesHistory(FindInFilesDialog); + if FindInFilesDialog.FindText <>'' then + begin + case FindInFilesDialog.WhereRadioGroup.ItemIndex of + Integer(0): FIFSearchProject(AProject, FindInFilesDialog); + integer(1): FIFSearchOpenFiles(FindInFilesDialog); + integer(2): FIFSearchDir(FindInFilesDialog); + end;//case end;//if end;//if End;//FindInFilesClicked