123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810 |
- {
- TIGCC IDE
- Copyright (C) 2000-2004 Sebastian Reichelt
- Copyright (C) 2006 Kevin Kofler
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
- 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. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- }
- unit SourceFileWinUnit;
- interface
- uses
- SourceFileUnit,
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- ComCtrls, Menus, ActnList, ToolWin, MemoComponentUnit, ExtCtrls{$IFDEF CODINGEXT}, CompletionForm{$ENDIF};
- type
- TSourceFileForm = class(TForm)
- Actions: TActionList;
- ActionFilePrint: TAction;
- ActionFilePrintQuickly: TAction;
- ActionFileClose: TAction;
- ActionEditUndo: TAction;
- ActionEditRedo: TAction;
- ActionEditDelete: TAction;
- ActionEditCut: TAction;
- ActionEditCopy: TAction;
- ActionEditPaste: TAction;
- ActionEditSelectAll: TAction;
- ActionFindFind: TAction;
- ActionFindReplace: TAction;
- ActionFindOpenFile: TAction;
- ActionFindFunctions: TAction;
- ActionEditIncreaseIndent: TAction;
- ActionEditDecreaseIndent: TAction;
- MainMenu: TMainMenu;
- File1: TMenuItem;
- Print1: TMenuItem;
- Edit1: TMenuItem;
- Undo1: TMenuItem;
- Redo1: TMenuItem;
- N2: TMenuItem;
- Delete1: TMenuItem;
- Cut1: TMenuItem;
- Copy1: TMenuItem;
- Paste1: TMenuItem;
- N9: TMenuItem;
- SelectAll1: TMenuItem;
- N18: TMenuItem;
- IncreaseIndent1: TMenuItem;
- DecreaseIndent1: TMenuItem;
- Find1: TMenuItem;
- Find2: TMenuItem;
- Replace1: TMenuItem;
- N13: TMenuItem;
- Functions1: TMenuItem;
- N15: TMenuItem;
- OpenFileAtCursor1: TMenuItem;
- ActionFileSave: TAction;
- ActionFileSaveAs: TAction;
- ActionFileCompile: TAction;
- Save1: TMenuItem;
- SaveAs1: TMenuItem;
- N1: TMenuItem;
- Compile1: TMenuItem;
- N3: TMenuItem;
- N4: TMenuItem;
- Close1: TMenuItem;
- StatusBar: TStatusBar;
- EditorToolBar: TToolBar;
- ToolButton3: TToolButton;
- ToolButton4: TToolButton;
- ToolButton23: TToolButton;
- ToolButton24: TToolButton;
- ToolButton6: TToolButton;
- ToolButton7: TToolButton;
- ToolButton8: TToolButton;
- ToolButton9: TToolButton;
- ToolButton10: TToolButton;
- ToolButton5: TToolButton;
- ToolButton19: TToolButton;
- ToolButton11: TToolButton;
- ToolButton20: TToolButton;
- ToolButton21: TToolButton;
- ToolButton25: TToolButton;
- ToolButton22: TToolButton;
- ToolButton13: TToolButton;
- ToolBarBevel: TBevel;
- ToolButton1: TToolButton;
- EditorPopup: TPopupMenu;
- Undo2: TMenuItem;
- Redo2: TMenuItem;
- N16: TMenuItem;
- Clear1: TMenuItem;
- Cut2: TMenuItem;
- Copy2: TMenuItem;
- Paste2: TMenuItem;
- N17: TMenuItem;
- SelectAll2: TMenuItem;
- N20: TMenuItem;
- IncreaseIndent2: TMenuItem;
- DecreaseIndent2: TMenuItem;
- N5: TMenuItem;
- OpenFileatCursor2: TMenuItem;
- FindDlg: TFindDialog;
- ReplaceDlg: TReplaceDialog;
- FunctionPopup: TPopupMenu;
- NoFunctionsItem: TMenuItem;
- ActionFileAddToProject: TAction;
- AddtoProject1: TMenuItem;
- N6: TMenuItem;
- ToolButton2: TToolButton;
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- procedure FormCreate(Sender: TObject);
- procedure ActionFileCloseExecute(Sender: TObject);
- procedure FileSave(Sender: TObject);
- procedure FileSaveAs(Sender: TObject);
- procedure FileCompile(Sender: TObject);
- procedure FilePrint(Sender: TObject);
- procedure FilePrintQuickly(Sender: TObject);
- procedure EditorChange(Sender: TObject);
- procedure EditUndo(Sender: TObject);
- procedure EditRedo(Sender: TObject);
- procedure EditDelete(Sender: TObject);
- procedure EditCut(Sender: TObject);
- procedure EditCopy(Sender: TObject);
- procedure EditPaste(Sender: TObject);
- procedure EditSelectAll(Sender: TObject);
- procedure EditIncreaseIndent(Sender: TObject);
- procedure EditDecreaseIndent(Sender: TObject);
- procedure FindDlgFind(Sender: TObject);
- procedure ReplaceDlgReplace(Sender: TObject);
- procedure FindString(Sender: TObject);
- procedure FindFind(Sender: TObject);
- procedure FindReplace(Sender: TObject);
- procedure FindOpenFile(Sender: TObject);
- procedure FunctionPopupPopup(Sender: TObject);
- procedure FindFunctions(Sender: TObject);
- procedure FindFunctionFromPopup(Sender: TObject);
- procedure FileAddToProject(Sender: TObject);
- procedure FormEnable(Sender: TObject);
- procedure FormShow(Sender: TObject);
- procedure FindDlgClose(Sender: TObject);
- private
- FSourceFile: TSourceFile;
- procedure SetSourceFile(const Value: TSourceFile);
- function GetEditor: TMemoComponent;
- protected
- procedure CreateParams(var Params: TCreateParams); override;
- public
- OriginalCaption: string;
- EnableTimer: TTimer;
- Funcs: TSourceFileFunctions;
- procedure UpdateCaption;
- procedure UpdateEditButtons;
- procedure UpdateStatusBar;
- procedure UpdateFuncs;
- property SourceFile: TSourceFile read FSourceFile write SetSourceFile;
- property Editor: TMemoComponent read GetEditor;
- {$IFDEF CODINGEXT}
- procedure InitCodingExt;
- procedure ActionFindSymbolExecute(Sender: TObject);
- {$ENDIF}
- end;
- implementation
- {$R *.DFM}
- uses
- Printers,
- UtilsDos, UtilsWin,
- MasterUnit,
- MainUnit, FunctionsWinUnit;
- procedure TSourceFileForm.SetSourceFile(const Value: TSourceFile);
- begin
- FSourceFile := Value;
- UpdateCaption;
- if Assigned (SourceFile) and (SourceFile is TTextSourceFile) then
- with SourceFile as TTextSourceFile do
- if Assigned (TextEditor) then
- with TextEditor do begin
- OnKeyDown := MainForm.EditorKeyDown;
- OnChange := EditorChange;
- OnSelectionChange := EditorChange;
- PopupMenu := EditorPopup;
- end;
- ActionFileCompile.Enabled := Assigned (SourceFile) and SourceFile.Compilable;
- ActionFilePrint.Enabled := Assigned (SourceFile) and SourceFile.Printable and (Printer.Printers.Count > 0);
- ActionFilePrintQuickly.Enabled := ActionFilePrint.Enabled;
- ActionFindFunctions.Enabled := Assigned (SourceFile) and (SourceFile is TSourceTextSourceFile);
- EditorChange (Editor);
- end;
- procedure TSourceFileForm.UpdateCaption;
- begin
- if Assigned (SourceFile) then begin
- Caption := OriginalCaption + ' - ' + SourceFile.SourceName;
- if (MainForm.ProjectFile = '') and (ExtractFilePath (SourceFile.FileName) = 'C:\') then
- StatusBar.Panels.Items[5].Text := ExtractFileName (SourceFile.FileName)
- else
- StatusBar.Panels.Items[5].Text := SourceFile.FileName;
- end else
- Caption := OriginalCaption;
- end;
- function TSourceFileForm.GetEditor: TMemoComponent;
- begin
- if Assigned (SourceFile) and (SourceFile is TTextSourceFile) then
- Result := (SourceFile as TTextSourceFile).TextEditor
- else
- Result := nil;
- end;
- procedure TSourceFileForm.FormClose(Sender: TObject;
- var Action: TCloseAction);
- begin
- if Assigned (SourceFile) and (SourceFile.ParentForm = Self) then begin
- SourceFile.ParentForm := nil;
- SourceFile.Free;
- end;
- Action := caFree;
- end;
- procedure TSourceFileForm.FormCloseQuery(Sender: TObject;
- var CanClose: Boolean);
- begin
- if Compiling then
- CanClose := False
- else if Assigned (SourceFile) and (SourceFile.ParentForm = Self) then
- SourceFile.WarnIfModified;
- end;
- procedure TSourceFileForm.FormCreate(Sender: TObject);
- begin
- OriginalCaption := Caption;
- {$IFDEF CODINGEXT}
- InitCodingExt;
- {$ENDIF}
- end;
- procedure TSourceFileForm.ActionFileCloseExecute(Sender: TObject);
- begin
- if not Compiling then
- Close;
- end;
- procedure TSourceFileForm.FileSave(Sender: TObject);
- begin
- if Assigned (SourceFile) then begin
- SourceFile.Save;
- UpdateCaption;
- end;
- end;
- procedure TSourceFileForm.FileSaveAs(Sender: TObject);
- begin
- if Assigned (SourceFile) then begin
- SourceFile.SaveAs;
- UpdateCaption;
- UpdateStatusBar;
- end;
- end;
- procedure TSourceFileForm.FileCompile(Sender: TObject);
- begin
- if (not Compiling) and Assigned (SourceFile) then
- with MainForm do begin
- BeginCompilation;
- CopyHeaders;
- Self.SourceFile.Compile;
- DeleteHeaders;
- EndCompilation;
- end;
- end;
- procedure TSourceFileForm.FilePrint(Sender: TObject);
- var
- Cp: Integer;
- begin
- if Assigned (SourceFile) and (Printer.Printers.Count > 0) then
- with MainForm do try
- PrintDlg.PrintRange := prAllPages;
- PrintDlg.MaxPage := TSourceFile(ProjectTree.Selected.Data).CountPages;
- PrintDlg.ToPage := PrintDlg.MaxPage;
- if Assigned (CurrentEditor) then begin
- if CurrentEditor.Selection.RLength > 0 then
- PrintDlg.Options := PrintDlg.Options + [poSelection]
- else
- PrintDlg.Options := PrintDlg.Options - [poSelection];
- end;
- if Assigned (Sender) then begin
- if not PrintDlg.Execute then
- Abort;
- Cp := PrintDlg.Copies;
- if Cp < 1 then
- Cp := 1;
- end else
- Cp := 1;
- SourceFile.Print (Cp, PrintDlg.PrintRange, PrintDlg.FromPage, PrintDlg.ToPage);
- except
- Abort;
- end;
- end;
- procedure TSourceFileForm.FilePrintQuickly(Sender: TObject);
- begin
- FilePrint (nil);
- end;
- procedure TSourceFileForm.EditorChange(Sender: TObject);
- begin
- UpdateEditButtons;
- UpdateStatusBar;
- end;
- procedure TSourceFileForm.UpdateEditButtons;
- var
- TextSel: Boolean;
- begin
- if Assigned (Editor) then begin
- TextSel := Editor.SelLength > 0;
- ActionEditDelete.Enabled := TextSel;
- ActionEditCut.Enabled := TextSel;
- ActionEditCopy.Enabled := TextSel;
- ActionEditUndo.Enabled := Editor.CanUndo;
- ActionEditRedo.Enabled := Editor.CanRedo;
- end;
- end;
- procedure TSourceFileForm.UpdateStatusBar;
- var
- S: string;
- I: Integer;
- Cell: TTextCell;
- begin
- with StatusBar.Panels do begin
- if Assigned (Editor) then begin
- with Editor do begin
- if Enabled then begin
- if Selection.RLength > 0 then begin
- I := Selection.RLength + Selection.StartRowCol.Row - Selection.EndRowCol.Row;
- if Selection.EndRowCol.Col > LineLength [Selection.EndRowCol.Row] then
- Dec (I);
- S := IntToStr (I);
- if Items[0].Text <> S then
- Items[0].Text := S;
- if Items[1].Text <> '' then
- Items[1].Text := '';
- if Items[0].Width <> 60 then
- Items[0].Width := 60;
- if Items[1].Width <> 0 then
- Items[1].Width := 0;
- end else begin
- Cell := Selection.StartRowCol;
- S := IntToStr (Cell.Row);
- if Items[0].Text <> S then
- Items[0].Text := S;
- S := IntToStr (Cell.Col);
- if Items[1].Text <> S then
- Items[1].Text := S;
- if Items[0].Width <> 30 then
- Items[0].Width := 30;
- if Items[1].Width <> 30 then
- Items[1].Width := 30;
- end;
- I := TextLength - LineCount + 1;
- S := IntToStr (I) + ' Character';
- if I <> 1 then
- S := S + 's';
- if Items[3].Text <> S then
- Items[3].Text := S;
- if Items[2].Width <> 1 then
- Items[2].Width := 1;
- if Items[3].Width <> 93 then
- Items[3].Width := 93;
- if Items[2].Width <> 1 then
- Items[2].Width := 1;
- end;
- end;
- end else begin
- if Items[0].Text <> '' then
- Items[0].Text := '';
- if Items[1].Text <> '' then
- Items[1].Text := '';
- if Items[3].Text <> '' then
- Items[3].Text := '';
- if Items[0].Width <> 0 then
- Items[0].Width := 0;
- if Items[1].Width <> 0 then
- Items[1].Width := 0;
- if Items[2].Width <> 0 then
- Items[2].Width := 0;
- if Items[3].Width <> 0 then
- Items[3].Width := 0;
- if Items[4].Width <> 0 then
- Items[4].Width := 0;
- end;
- end;
- Update;
- end;
- procedure TSourceFileForm.EditUndo(Sender: TObject);
- begin
- if Assigned (Editor) then
- Editor.Undo;
- end;
- procedure TSourceFileForm.EditRedo(Sender: TObject);
- begin
- if Assigned (Editor) then
- Editor.Redo;
- end;
- procedure TSourceFileForm.EditDelete(Sender: TObject);
- begin
- if Assigned (Editor) then
- Editor.ClearSelection;
- end;
- procedure TSourceFileForm.EditCut(Sender: TObject);
- begin
- if Assigned (Editor) then
- Editor.CutToClipboard;
- end;
- procedure TSourceFileForm.EditCopy(Sender: TObject);
- begin
- if Assigned (Editor) then
- Editor.CopyToClipboard;
- end;
- procedure TSourceFileForm.EditPaste(Sender: TObject);
- begin
- if Assigned (Editor) then
- Editor.PasteFromClipboard;
- end;
- procedure TSourceFileForm.EditSelectAll(Sender: TObject);
- begin
- if Assigned (Editor) then
- Editor.SelectAll;
- end;
- procedure TSourceFileForm.EditIncreaseIndent(Sender: TObject);
- begin
- if Assigned (Editor) then
- Editor.ChangeIndent (1);
- end;
- procedure TSourceFileForm.EditDecreaseIndent(Sender: TObject);
- begin
- if Assigned (Editor) then
- Editor.ChangeIndent (-1);
- end;
- procedure TSourceFileForm.FindDlgFind(Sender: TObject);
- begin
- try
- FindString (Sender);
- except
- ShowDefaultMessageBox ('Text ''' + (Sender as TFindDialog).FindText + ''' not found.', 'Search Failed', mtProgramError);
- end;
- end;
- procedure TSourceFileForm.ReplaceDlgReplace(Sender: TObject);
- begin
- if Assigned (Editor) then
- with Sender as TReplaceDialog do
- repeat
- if UpperCase (Editor.Selection.Text) = UpperCase (FindText) then
- Editor.Selection.Text := ReplaceText;
- Options := Options + [frFindNext];
- FindString (Sender);
- until not (frReplaceAll in Options);
- end;
- procedure TSourceFileForm.FindString(Sender: TObject);
- var
- P: Integer;
- S,
- T: string;
- Valid: Boolean;
- FPos: Integer;
- begin
- if Assigned (Editor) then begin
- with Sender as TFindDialog do begin
- if frFindNext in Options then
- P := Editor.SelStart + 1
- else
- if frDown in Options then
- P := 1
- else
- P := Length (Editor.Text);
- repeat
- Valid := False;
- if frDown in Options then
- T := Copy (Editor.Text, P + 1, Length (Editor.Text))
- else
- T := Copy (Editor.Text, 1, P - 1);
- if frMatchCase in Options then
- S := FindText
- else begin
- S := UpperCase (FindText);
- T := UpperCase (T);
- end;
- if frDown in Options then
- FPos := Pos (S, T)
- else
- FPos := LastPos (S, T);
- if FPos > 0 then begin
- Valid := True;
- if frWholeWord in Options then begin
- if ((FPos > 1) and (T <> '') and (T [FPos - 1] in ['A'..'Z', 'a'..'z', '0'..'9', '_', '$'])) then
- Valid := False;
- if ((FPos + Length (S) < Length (T)) and (T <> '') and (T [FPos + Length (S)] in ['A'..'Z', 'a'..'z', '0'..'9', '_', '$'])) then
- Valid := False;
- end;
- if not (frDown in Options) then
- P := 0;
- if not Valid then
- Inc (P, FPos);
- end;
- until Valid or (FPos <= 0);
- if Valid then begin
- with Editor.Selection do begin
- DoChanging;
- RStart := P + FPos;
- RLength := Length (S);
- DoChange;
- ScrollInView (2);
- end;
- SetFocus;
- end else
- Abort;
- end;
- end;
- end;
- procedure TSourceFileForm.FindFind(Sender: TObject);
- begin
- FindDlg.Execute;
- SetFocus;
- end;
- procedure TSourceFileForm.FindReplace(Sender: TObject);
- begin
- ReplaceDlg.Execute;
- SetFocus;
- end;
- procedure TSourceFileForm.FindOpenFile(Sender: TObject);
- var
- I: Integer;
- S: string;
- QuotesInLine: Boolean;
- SourceFile: TSourceFile;
- begin
- if Assigned (Editor) then begin
- QuotesInLine := Pos ('"', Editor.Lines [Editor.Selection.StartRowCol.Row - 1]) > 0;
- S := '';
- for I := Editor.Selection.RStart - 1 downto 1 do begin
- if (not QuotesInLine) and (Editor.Text [I] = ' ') then
- Break;
- if Editor.Text [I] in [' ', 'A'..'Z', 'a'..'z', '0'..'9', '_', '-', '.', '\', ':'] then
- S := Editor.Text [I] + S
- else
- Break;
- end;
- for I := Editor.Selection.RStart to Length (Editor.Text) do begin
- if (not QuotesInLine) and (Editor.Text [I] = ' ') then
- Break;
- if Editor.Text [I] in [' ', 'A'..'Z', 'a'..'z', '0'..'9', '_', '-', '.', '\', ':'] then
- S := S + Editor.Text [I]
- else
- Break;
- end;
- S := Trim (S);
- if Length (S) > 0 then begin
- SourceFile := MainForm.SourceFiles.FindFileNameOnly (S);
- if Assigned (SourceFile) then
- SourceFile.Edit
- else begin
- SourceFile := Self.SourceFile;
- if FileExists (ExpandFileName (S)) then
- MainForm.AddSourceFile (ExpandFileName (S), True)
- else if Assigned (SourceFile) and (SourceFile is TGNUAsmSourceFile) and FileExists (WithBackslash (TIGCCFolder) + GASIncludeLocation + S) then
- MainForm.AddSourceFile (WithBackslash (TIGCCFolder) + GASIncludeLocation + S, True)
- else if Assigned (SourceFile) and (SourceFile is TAsmSourceFile) and FileExists (WithBackslash (TIGCCFolder) + ASMIncludeLocation + S) then
- MainForm.AddSourceFile (WithBackslash (TIGCCFolder) + ASMIncludeLocation + S, True)
- else if FileExists (WithBackslash (TIGCCFolder) + CIncludeLocation + S) then
- MainForm.AddSourceFile (WithBackslash (TIGCCFolder) + CIncludeLocation + S, True)
- else
- ShowDefaultMessageBox ('File ''' + S + ''' not found.', 'Search Failed', mtProgramError);
- end;
- end;
- end;
- end;
- procedure TSourceFileForm.FunctionPopupPopup(Sender: TObject);
- var
- I: Integer;
- M: TMenuItem;
- begin
- with (Sender as TPopupMenu).Items do begin
- for I := Count - 1 downto 0 do
- Remove (Items [I]);
- UpdateFuncs;
- for I := Low (Funcs) to High (Funcs) do begin
- M := TMenuItem.Create (Self);
- with M do begin
- Tag := I;
- Caption := Funcs[I].Name;
- OnClick := FindFunctionFromPopup;
- end;
- if (Pos ('main', Funcs[I].Name) > 0) and (Pos ('main', Funcs[I].Name) = Length (Funcs[I].Name) - Length ('main') + 1) then
- Insert (0, M)
- else
- Add (M);
- end;
- if Count <= 0 then
- Add (NoFunctionsItem);
- end;
- end;
- procedure TSourceFileForm.FindFunctions(Sender: TObject);
- var
- I: Integer;
- begin
- UpdateFuncs;
- with TFunctionsForm.Create (Self) do try
- Funcs := @Self.Funcs;
- with FuncList.Items do begin
- BeginUpdate;
- Clear;
- for I := Low (Self.Funcs) to High (Self.Funcs) do
- AddObject (Self.Funcs[I].Name, TObject (I));
- EndUpdate;
- end;
- FuncListClick (FuncList);
- case ShowModal of
- mrYes: begin
- if Assigned (Editor) then begin
- Editor.Selection.NoSelAtPos (Editor.CellToCharIdx (TextCell (Self.Funcs[Integer(FuncList.Items.Objects[FuncList.ItemIndex])].PrototypeLine, 1)));
- Editor.Selection.ScrollInView (5);
- end;
- end;
- mrNo: begin
- if Assigned (Editor) then begin
- Editor.Selection.NoSelAtPos (Editor.CellToCharIdx (TextCell (Self.Funcs[Integer(FuncList.Items.Objects[FuncList.ItemIndex])].ImplementationLine, 1)));
- Editor.Selection.ScrollInView (5);
- end;
- end;
- end;
- with FuncList.Items do begin
- BeginUpdate;
- for I := Count - 1 downto 0 do begin
- Objects [I] := nil;
- Delete (I);
- end;
- EndUpdate;
- end;
- finally
- Free;
- end;
- end;
- procedure TSourceFileForm.UpdateFuncs;
- begin
- if Assigned (SourceFile) and (SourceFile is TSourceTextSourceFile) then
- with SourceFile as TSourceTextSourceFile do
- Funcs := GetFunctions
- else
- SetLength (Funcs, 0);
- end;
- procedure TSourceFileForm.FindFunctionFromPopup(Sender: TObject);
- var
- L: Integer;
- begin
- if Sender is TMenuItem then
- with Sender as TMenuItem do begin
- if Funcs[Tag].ImplementationLine > 0 then
- L := Funcs[Tag].ImplementationLine
- else
- L := Funcs[Tag].PrototypeLine;
- if L > 0 then begin
- if Assigned (Editor) then begin
- Editor.Selection.NoSelAtPos (Editor.CellToCharIdx (TextCell (L, 1)));
- Editor.Selection.ScrollInView (5);
- end;
- end;
- end;
- end;
- procedure TSourceFileForm.FileAddToProject(Sender: TObject);
- var
- N: TTreeNode;
- begin
- if (not Compiling) and Assigned (SourceFile) then
- with MainForm, SourceFile do begin
- ParentForm := nil;
- N := ProjectTree.Items.AddChildObject (TopNode.Item [ClassTreeIndex], SourceName, Pointer (SourceFile));
- with N do begin
- ImageIndex := ClassImageIndex;
- SelectedIndex := ImageIndex;
- end;
- TreeItem := N;
- if Assigned (Editor) then
- with Editor do begin
- Hide;
- Parent := EditorPanel;
- Align := alClient;
- end;
- if SourceFile is TTextSourceFile then
- with SourceFile as TTextSourceFile do
- if Assigned (TextEditor) then
- with TextEditor do begin
- OnEnter := EditorEnter;
- OnExit := EditorExit;
- OnKeyDown := EditorKeyDown;
- OnChange := EditorChange;
- OnSelectionChange := EditorChange;
- PopupMenu := EditorPopup;
- end;
- SortFiles;
- MainForm.Modify;
- ProjectTree.Selected := N;
- SourceFile := nil;
- Self.Close;
- end;
- end;
- procedure TSourceFileForm.FormEnable(Sender: TObject);
- begin
- if Assigned (EnableTimer) then begin
- EnableTimer.Free;
- EnableTimer := nil;
- end;
- Enabled := True;
- if Assigned (Editor) then begin
- Editor.Enabled := False;
- Editor.Enabled := True;
- ActiveControl := Editor;
- end;
- SetFocus;
- end;
- procedure TSourceFileForm.FormShow(Sender: TObject);
- begin
- if not (Enabled or Assigned (EnableTimer)) then begin
- EnableTimer := TTimer.Create (Self);
- EnableTimer.OnTimer := FormEnable;
- EnableTimer.Interval := 100;
- EnableTimer.Enabled := True;
- end;
- end;
- procedure TSourceFileForm.CreateParams(var Params: TCreateParams);
- begin
- inherited;
- Params.WndParent := GetDesktopWindow;
- end;
- {$IFDEF CODINGEXT}
- procedure TSourceFileForm.InitCodingExt;
- var
- ActionFindSymbol: TAction;
- begin
- // Find Symbol declaration tool
- ActionFindSymbol := TAction.Create(Self);
- with ActionFindSymbol do begin
- ActionList := Actions;
- Caption := 'F&ind Symbol Declaration';
- Category := 'Extension';
- OnExecute := ActionFindSymbolExecute;
- end;
- InsertsAction(Self, [OpenFileAtCursor1, OpenFileatCursor2], ActionFindSymbol);
- end;
- procedure TSourceFileForm.ActionFindSymbolExecute(Sender: TObject);
- begin
- CompForm.FindSymbolDecl;
- end;
- {$ENDIF}
- procedure TSourceFileForm.FindDlgClose(Sender: TObject);
- begin
- SetFocus;
- end;
- end.
|