123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- {
- This file is part of the Free Pascal Integrated Development Environment
- Copyright (c) 1998 by Berczi Gabor
- Search menu entries
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- function ProcedureDialog(S : string) : PDialog;
- var D: PDialog;
- R,R1,R2: TRect;
- IL: PEditorInputLine;
- begin
- R.Assign(0,0,40,8);
- New(D, Init(R, dialog_proceduredialog));
- with D^ do
- begin
- Options:=Options or ofCentered;
- GetExtent(R); R.Grow(-3,-2); R.B.Y:=R.A.Y+1;
- R1.Copy(R);
- R2.Copy(R); Inc(R2.A.Y);Inc(R2.B.Y);
- New(IL, Init(R2,255));
- Insert(IL);
- IL^.SetData(S);
- Insert(New(PLabel, Init(R1, label_enterproceduretofind, IL)));
- GetExtent(R); R.Grow(-8,-1); R.A.Y:=R.B.Y-2; R.B.X:=R.A.X+10;
- Insert(New(PButton, Init(R, button_OK, cmOK, bfDefault)));
- R.Move(15,0);
- Insert(New(PButton, Init(R, button_Cancel, cmCancel, bfNormal)));
- end;
- IL^.Select;
- ProcedureDialog:=D;
- end;
- procedure TIDEApp.FindProcedure;
- var R: TRect;
- S: PSortedSymbolCollection;
- Overflow: boolean;
- ProcS : string;
- Level : longint;
- function NameMatches(const St : string) : boolean;
- begin
- NameMatches:=(ProcS='') or (Pos(ProcS,UpcaseStr(St)) > 0);
- end;
- procedure InsertInS(P: PSymbol);
- procedure InsertItemsInS(P: PSymbolCollection);
- var I: Sw_integer;
- begin
- for I:=0 to P^.Count-1 do
- InsertInS(P^.At(I));
- end;
- begin
- Inc(level);
- if S^.Count=MaxCollectionSize then
- begin Overflow:=true; Exit; end;
- if {(P^.typ = procsym) this needs symconst unit which I prefer to avoid }
- ((P^.GetTypeName='proc') or (P^.GetTypeName='func'))
- and NameMatches(P^.GetName) then
- S^.Insert(P);
- { this is wrong because it inserted args or locals of proc
- in the globals list !! PM}
- if (P^.Items<>nil) and (level=1) then
- InsertItemsInS(P^.Items);
- Dec(level);
- end;
- var
- EditorWindow : PSourceWindow;
- begin
- level:=0;
- if BrowCol.Modules=nil then
- begin ErrorBox(msg_nodebuginfoavailable,nil); Exit; end;
- EditorWindow:=FirstEditorWindow;
- If assigned(EditorWindow) then
- ProcS:=LowerCaseStr(EditorWindow^.Editor^.GetCurrentWord)
- else
- ProcS:='';
- if ExecuteDialog(ProcedureDialog(ProcS),@ProcS)=cmCancel then
- exit;
- ProcS:=UpcaseStr(ProcS);
- Overflow:=false;
- if assigned(ProcedureCollection) then
- begin
- ProcedureCollection^.deleteAll;
- Dispose(ProcedureCollection,done);
- end;
- New(S, Init(500,500));
- ProcedureCollection:=S;
- BrowCol.Modules^.ForEach(TCallbackProcParam(@InsertInS));
- if Overflow then
- WarningBox(msg_toomanysymbolscantdisplayall,nil);
- Desktop^.GetExtent(R); R.A.X:=R.B.X-35;
- Desktop^.Insert(New(PBrowserWindow, Init(R,
- label_sym_findprocedure,SearchFreeWindowNo,nil,label_sym_findprocedure2+ProcS,'',S,nil,nil,nil)));
- end;
- procedure TIDEApp.Objects;
- begin
- if ObjectTree=nil then
- begin ErrorBox(msg_nodebuginfoavailable,nil); Exit; end;
- OpenSymbolBrowser(0,0,label_sym_objects,label_sym_globalscope,nil,nil,nil,nil,ObjectTree,nil);
- end;
- procedure TIDEApp.Globals;
- var R: TRect;
- S: PSortedSymbolCollection;
- Overflow: boolean;
- Level : longint;
- procedure InsertInS(P: PSymbol);
- procedure InsertItemsInS(P: PSymbolCollection);
- var I: Sw_integer;
- begin
- for I:=0 to P^.Count-1 do
- InsertInS(P^.At(I));
- end;
- begin
- Inc(level);
- if S^.Count=MaxCollectionSize then
- begin Overflow:=true; Exit; end;
- S^.Insert(P);
- { this is wrong because it inserted args or locals of proc
- in the globals list !! PM}
- if (P^.Items<>nil) and (level=1) then
- InsertItemsInS(P^.Items);
- Dec(level);
- end;
- begin
- level:=0;
- if BrowCol.Modules=nil then
- begin ErrorBox(msg_nodebuginfoavailable,nil); Exit; end;
- Overflow:=false;
- if assigned(GlobalsCollection) then
- begin
- GlobalsCollection^.deleteAll;
- Dispose(GlobalsCollection,done);
- end;
- New(S, Init(500,500));
- GlobalsCollection:=S;
- BrowCol.Modules^.ForEach(TCallbackProcParam(@InsertInS));
- if Overflow then
- WarningBox(msg_toomanysymbolscantdisplayall,nil);
- Desktop^.GetExtent(R); R.A.X:=R.B.X-35;
- Desktop^.Insert(New(PBrowserWindow, Init(R,
- label_sym_globals,SearchFreeWindowNo,nil,label_sym_globalscope,'',S,nil,nil,nil)));
- end;
- procedure TIDEApp.Modules;
- var
- R: TRect;
- S: PSortedSymbolCollection;
- procedure InsertInS(P: PSymbol);
- begin
- S^.Insert(P);
- end;
- begin
- if BrowCol.Modules=nil then
- begin ErrorBox(msg_nodebuginfoavailable,nil); Exit; end;
- if assigned(ModulesCollection) then
- begin
- ModulesCollection^.deleteAll;
- Dispose(ModulesCollection,done);
- end;
- New(S, Init(500,500));
- ModulesCollection:=S;
- BrowCol.Modules^.ForEach(TCallbackProcParam(@InsertInS));
- Desktop^.GetExtent(R); R.A.X:=R.B.X-35;
- Desktop^.Insert(New(PBrowserWindow, Init(R,
- dialog_units,SearchFreeWindowNo,nil,label_sym_globalscope,'',S,nil,nil,nil)));
- end;
- function SymbolDialog(S : string) : PDialog;
- var D: PDialog;
- R,R1,R2: TRect;
- IL: PEditorInputLine;
- begin
- R.Assign(0,0,40,8);
- New(D, Init(R, dialog_browsesymbol));
- with D^ do
- begin
- Options:=Options or ofCentered;
- GetExtent(R); R.Grow(-3,-2); R.B.Y:=R.A.Y+1;
- R1.Copy(R);
- R2.Copy(R); Inc(R2.A.Y);Inc(R2.B.Y);
- New(IL, Init(R2,255));
- Insert(IL);
- IL^.SetData(S);
- Insert(New(PLabel, Init(R1, label_entersymboltobrowse, IL)));
- GetExtent(R); R.Grow(-8,-1); R.A.Y:=R.B.Y-2; R.B.X:=R.A.X+10;
- Insert(New(PButton, Init(R, button_OK, cmOK, bfDefault)));
- R.Move(15,0);
- Insert(New(PButton, Init(R, button_Cancel, cmCancel, bfNormal)));
- end;
- IL^.Select;
- SymbolDialog:=D;
- end;
- procedure TIDEApp.SearchSymbol;
- var
- EditorWindow : PSourceWindow;
- S : string;
- begin
- EditorWindow:=FirstEditorWindow;
- If assigned(EditorWindow) then
- S:=LowerCaseStr(EditorWindow^.Editor^.GetCurrentWord)
- else
- S:='';
- if ExecuteDialog(SymbolDialog(S),@S)<>cmCancel then
- OpenOneSymbolBrowser(S);
- end;
|