From dac2e43b3465fe79b8229bc95848410d4a8f22e8 Mon Sep 17 00:00:00 2001 From: martin Date: Fri, 26 Mar 2010 21:49:08 +0000 Subject: [PATCH] SourceEditor: Refactor, removed dependency on Project unit git-svn-id: trunk@24231 - --- ide/main.pp | 78 +++++++++++++++++++++- ide/mainbase.pas | 18 ++++- ide/project.pp | 4 +- ide/sourceeditor.pp | 147 ++++++++++++++++------------------------- ideintf/lazideintf.pas | 2 + 5 files changed, 153 insertions(+), 96 deletions(-) diff --git a/ide/main.pp b/ide/main.pp index 7a75034ae7..8818da3600 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -68,7 +68,7 @@ uses CodeBeautifier, FindDeclarationTool, LinkScanner, BasicCodeTools, AVL_Tree, Laz_XMLCfg, CodeToolsStructs, CodeToolManager, CodeCache, DefineTemplates, // synedit - SynEditKeyCmds, SynBeautifier, + SynEditKeyCmds, SynBeautifier, SynEditMarks, // IDE interface AllIDEIntf, BaseIDEIntf, ObjectInspector, PropEdits, PropEditUtils, MacroIntf, IDECommands, @@ -389,7 +389,12 @@ type Reason: TSynEditorCommand; SetIndentProc: TSynBeautifierSetIndentProc): Boolean; procedure OnSrcNotebookDeleteLastJumPoint(Sender: TObject); procedure OnSrcNotebookEditorVisibleChanged(Sender: TObject); + procedure OnSrcNotebookEditorPlaceBookmark(Sender: TObject; var Mark: TSynEditMark); + procedure OnSrcNotebookEditorClearBookmark(Sender: TObject; var Mark: TSynEditMark); + procedure OnSrcNotebookProject1BookmarkMeeded(Sender: TObject); procedure OnSrcNotebookEditorChanged(Sender: TObject); + procedure OnSrcNotebookEditorMoved(Sender: TObject); + procedure OnSrcNotebookEditorClosed(Sender: TObject); procedure OnSrcNotebookCurCodeBufferChanged(Sender: TObject); procedure OnSrcNotebookFileNew(Sender: TObject); procedure OnSrcNotebookFileOpen(Sender: TObject); @@ -859,6 +864,8 @@ type deprecated; // deprecated in 0.9.29 March 2010 procedure GetDesignerUnit(ADesigner: TDesigner; var ActiveSourceEditor: TSourceEditor; var ActiveUnitInfo: TUnitInfo); override; + function GetDesignerForProjectEditor(AEditor: TSourceEditorInterface; + LoadForm: boolean): TIDesigner; override; function GetDesignerWithProjectFile(AFile: TLazProjectFile; LoadForm: boolean): TIDesigner; override; function GetDesignerFormOfSource(AnUnitInfo: TUnitInfo; @@ -1935,6 +1942,11 @@ begin SourceEditorManager.OnDeleteLastJumpPoint := @OnSrcNotebookDeleteLastJumPoint; SourceEditorManager.OnEditorVisibleChanged := @OnSrcNotebookEditorVisibleChanged; SourceEditorManager.OnEditorChanged := @OnSrcNotebookEditorChanged; + SourceEditorManager.OnEditorMoved := @OnSrcNotebookEditorMoved; + SourceEditorManager.OnEditorClosed := @OnSrcNotebookEditorClosed; + SourceEditorManager.OnPlaceBookmark := @OnSrcNotebookEditorPlaceBookmark; + SourceEditorManager.OnClearBookmark := @OnSrcNotebookEditorClearBookmark; + SourceEditorManager.OnProject1BookmarksNeeded := @OnSrcNotebookProject1BookmarkMeeded; SourceEditorManager.OnEditorPropertiesClicked := @mnuEnvEditorOptionsClicked; SourceEditorManager.OnFindDeclarationClicked := @OnSrcNotebookFindDeclaration; SourceEditorManager.OnInitIdentCompletion :=@OnSrcNotebookInitIdentCompletion; @@ -3968,6 +3980,7 @@ begin // save shortcuts to editor options EnvironmentOptions.ExternalTools.SaveShortCuts(EditorOpts.KeyMap); EditorOpts.Save; + UpdateHighlighters(True); SourceEditorManager.ReloadEditorOptions; UpdateCustomToolsInMenu; end; @@ -4269,6 +4282,7 @@ begin end; if IDEOptionsDialog.ShowModal = mrOk then begin IDEOptionsDialog.WriteAll; + UpdateHighlighters(True); SourceEditorManager.ReloadEditorOptions; end; finally @@ -4385,6 +4399,7 @@ end; procedure TMainIDE.DoEditorOptionsAfterWrite(Sender: TObject); begin Project1.UpdateAllSyntaxHighlighter; + UpdateHighlighters(True); SourceEditorManager.ReloadEditorOptions; ReloadMenuShortCuts; end; @@ -4540,8 +4555,10 @@ end; procedure TMainIDE.mnuEnvCodeTemplatesClicked(Sender: TObject); begin - if ShowCodeTemplateDialog=mrOk then + if ShowCodeTemplateDialog=mrOk then begin + UpdateHighlighters(True); SourceEditorManager.ReloadEditorOptions; + end; end; procedure TMainIDE.mnuEnvCodeToolsDefinesEditorClicked(Sender: TObject); @@ -11527,6 +11544,19 @@ begin end; end; +function TMainIDE.GetDesignerForProjectEditor(AEditor: TSourceEditorInterface; + LoadForm: boolean): TIDesigner; +var + AProjectFile: TLazProjectFile; +begin + AProjectFile := Project1.UnitWithEditorComponent(AEditor); + if AProjectFile <> nil then + Result:=LazarusIDE.GetDesignerWithProjectFile( + Project1.UnitWithEditorComponent(AEditor), LoadForm) + else + Result := nil; +end; + function TMainIDE.GetDesignerWithProjectFile(AFile: TLazProjectFile; LoadForm: boolean): TIDesigner; var @@ -14424,6 +14454,10 @@ var begin if SourceEditorManager.SourceEditorCount = 0 then Exit; + if Sender <> nil then + Project1.UpdateVisibleUnit(TSourceNotebook(Sender).ActiveEditor, + SourceEditorManager.IndexOfSourceWindow(TSourceNotebook(Sender))); + ActiveUnitInfo := Project1.UnitWithEditorComponent(SourceEditorManager.ActiveEditor); if ActiveUnitInfo = nil then Exit; @@ -14435,6 +14469,25 @@ begin MainIDEBar.ToggleFormSpeedBtn.Enabled := MainIDEBar.itmViewToggleFormUnit.Enabled; end; +procedure TMainIDE.OnSrcNotebookEditorPlaceBookmark(Sender: TObject; + var Mark: TSynEditMark); +begin + Project1.UnitWithEditorComponent(TSourceEditor(Sender)).AddBookmark + (Mark.Column, Mark.Line, Mark.BookmarkNumber); +end; + +procedure TMainIDE.OnSrcNotebookEditorClearBookmark(Sender: TObject; + var Mark: TSynEditMark); +begin + Project1.UnitWithEditorComponent(TSourceEditor(Sender)).DeleteBookmark + (Mark.BookmarkNumber); +end; + +procedure TMainIDE.OnSrcNotebookProject1BookmarkMeeded(Sender: TObject); +begin + SourceEditorManager.Project1BookMarks := Project1.Bookmarks; +end; + //this is fired when the editor is focused, changed, ?. Anything that causes the status change procedure TMainIDE.OnSrcNotebookEditorChanged(Sender: TObject); begin @@ -14442,6 +14495,27 @@ begin UpdateSaveMenuItemsAndButtons(false); end; +procedure TMainIDE.OnSrcNotebookEditorMoved(Sender: TObject); +var + p: TUnitInfo; +begin + p :=Project1.UnitWithEditorComponent(TSourceEditor(Sender)); + if p = nil then exit; + p.EditorIndex := TSourceEditor(Sender).PageIndex; + p.WindowIndex := SourceEditorManager.IndexOfSourceWindow(TSourceEditor(Sender).SourceNotebook); +end; + +procedure TMainIDE.OnSrcNotebookEditorClosed(Sender: TObject); +var + p: TUnitInfo; + SrcEditor: TSourceEditor; +begin + SrcEditor := TSourceEditor(Sender); + p :=Project1.UnitWithEditorComponent(SrcEditor); + if (p <> nil) then + p.EditorComponent := nil // Set EditorIndex := -1 +end; + procedure TMainIDE.OnSrcNotebookCurCodeBufferChanged(Sender: TObject); begin if SourceEditorManager.SourceEditorCount = 0 then Exit; diff --git a/ide/mainbase.pas b/ide/mainbase.pas index 3eb527af20..491d8334f3 100644 --- a/ide/mainbase.pas +++ b/ide/mainbase.pas @@ -1125,11 +1125,27 @@ begin end; procedure TMainIDEBase.UpdateHighlighters(Immediately: boolean = false); +var + ASrcEdit: TSourceEditor; + AnUnitInfo: TUnitInfo; + h: TLazSyntaxHighlighter; + i: Integer; begin if Immediately then begin FNeedUpdateHighlighters:=false; Project1.UpdateAllSyntaxHighlighter; - SourceEditorManager.ReloadHighlighters; + for h := Low(TLazSyntaxHighlighter) to High(TLazSyntaxHighlighter) do + if Highlighters[h]<>nil then begin + Highlighters[h].BeginUpdate; + EditorOpts.GetHighlighterSettings(Highlighters[h]); + Highlighters[h].EndUpdate; + end; + for i := 0 to SourceEditorManager.SourceEditorCount - 1 do begin + ASrcEdit := SourceEditorManager.SourceEditors[i]; + AnUnitInfo:=Project1.UnitWithEditorComponent(ASrcEdit); + if AnUnitInfo<>nil then + ASrcEdit.SyntaxHighlighterType := AnUnitInfo.SyntaxHighlighter; + end; end else begin FNeedUpdateHighlighters:=true; end; diff --git a/ide/project.pp b/ide/project.pp index f523abbfb3..78a8cc5083 100644 --- a/ide/project.pp +++ b/ide/project.pp @@ -50,9 +50,7 @@ uses {$ENDIF} Classes, SysUtils, TypInfo, FPCAdds, LCLProc, LCLIntf, LCLType, Forms, Controls, Dialogs, InterfaceBase, - Laz_XMLCfg, ExprEval, FileUtil, DefineTemplates, CodeToolManager, CodeCache, - // IDEIntf - PropEdits, ProjectIntf, MacroIntf, LazIDEIntf, + Laz_XMLCfg, ExprEval, FileUtil, DefineTemplates, CodeToolManager, CodeCache, ProjectIntf, MacroIntf, LazIDEIntf, // IDE CompOptsModes, ProjectResources, LazConf, frmCustomApplicationOptions, LazarusIDEStrConsts, CompilerOptions, diff --git a/ide/sourceeditor.pp b/ide/sourceeditor.pp index e39a7470e1..8609b83f9d 100644 --- a/ide/sourceeditor.pp +++ b/ide/sourceeditor.pp @@ -50,10 +50,11 @@ uses SynEditHighlighter, SynEditAutoComplete, SynEditKeyCmds, SynCompletion, SynEditMiscClasses, SynEditMarkupHighAll, SynEditMarks, SynBeautifier, SynEditTextBase, SynPluginTemplateEdit, SynPluginSyncroEdit, - SynPluginSyncronizedEditBase, ProjectIntf, SrcEditorIntf, MenuIntf, LazIDEIntf, PackageIntf, - IDEDialogs, IDEHelpIntf, IDEImagesIntf, + SynPluginSyncronizedEditBase, + // Intf + SrcEditorIntf, MenuIntf, LazIDEIntf, PackageIntf, IDEHelpIntf, IDEImagesIntf, // IDE units - LazarusIDEStrConsts, IDECommands, EditorOptions, Project, + IDEDialogs, LazarusIDEStrConsts, IDECommands, EditorOptions, WordCompletion, FindReplaceDialog, IDEProcs, IDEOptionDefs, MacroPromptDlg, TransferMacros, CodeContextForm, SrcEditHintFrm, EnvironmentOpts, MsgView, InputHistory, CodeMacroPrompt, @@ -76,6 +77,7 @@ type TOnLinesInsertedDeleted = procedure(Sender : TObject; FirstLine,Count : Integer) of Object; + TPlaceBookMarkEvent = procedure(Sender: TObject; var Mark: TSynEditMark) of object; TCharSet = set of Char; @@ -169,10 +171,8 @@ type FLineInfoNotification: TIDELineInfoNotification; FModified: boolean; - FOnAfterClose: TNotifyEvent; FOnAfterOpen: TNotifyEvent; FOnAfterSave: TNotifyEvent; - FOnBeforeClose: TNotifyEvent; FOnBeforeOpen: TNotifyEvent; FOnBeforeSave: TNotifyEvent; FOnEditorChange: TNotifyEvent; @@ -386,7 +386,6 @@ type procedure SetLines(const AValue: TStrings); override; // context - function GetProjectFile: TLazProjectFile; override; procedure UpdateProjectFile; override; function GetDesigner(LoadForm: boolean): TIDesigner; override; @@ -411,9 +410,6 @@ type property ExecutionLine: integer read FExecutionLine write SetExecutionLine; property HasExecutionMarks: Boolean read FHasExecutionMarks; property InsertMode: Boolean read GetInsertmode; - property OnAfterClose: TNotifyEvent read FOnAfterClose write FOnAfterClose; - property OnBeforeClose: TNotifyEvent read FOnBeforeClose - write FOnBeforeClose; property OnAfterOpen: TNotifyEvent read FOnAfterOpen write FOnAfterOpen; property OnBeforeOpen: TNotifyEvent read FOnBeforeOpen write FOnBeforeOpen; property OnAfterSave: TNotifyEvent read FOnAfterSave write FOnAfterSave; @@ -721,7 +717,6 @@ type procedure CopyFilenameClicked(Sender: TObject); procedure ReloadEditorOptions; - procedure ReloadHighlighters; procedure CheckFont; function GetEditorControlSettings(EditControl: TControl): boolean; override; deprecated {$IFDEF VER2_5}'use SourceEditorManager'{$ENDIF}; // deprecated in 0.9.29 March 2010 @@ -835,8 +830,10 @@ type TSourceEditorManager = class(TSourceEditorManagerBase) private + FProject1BookMarks: TProjectBookmarkList; function GetActiveSourceNotebook: TSourceNotebook; function GetActiveSrcEditor: TSourceEditor; + function GetProject1BookMarks: TProjectBookmarkList; function GetSourceEditorsByPage(WindowIndex, PageIndex: integer ): TSourceEditor; function GetSrcEditors(Index: integer): TSourceEditor; @@ -873,7 +870,6 @@ type procedure ClearExecutionLines; procedure ClearExecutionMarks; procedure ReloadEditorOptions; - procedure ReloadHighlighters; // find / replace text procedure FindClicked(Sender: TObject); procedure FindNextClicked(Sender: TObject); @@ -898,6 +894,8 @@ type procedure BookMarkGotoNext(GoForward: boolean); procedure BookMarkNextClicked(Sender: TObject); procedure BookMarkPrevClicked(Sender: TObject); + property Project1BookMarks: TProjectBookmarkList + read GetProject1BookMarks write FProject1BookMarks; // get Project1.Bookmarks protected // macros function MacroFuncCol(const s:string; const Data: PtrInt; @@ -948,11 +946,14 @@ type function CreateNewWindow(Activate: Boolean= False): TSourceNotebook; private FOnAddJumpPoint: TOnAddJumpPoint; + FOnClearBookmark: TPlaceBookMarkEvent; FOnClickLink: TMouseEvent; FOnCloseClicked: TOnCloseSrcEditor; FOnCurrentCodeBufferChanged: TNotifyEvent; FOnDeleteLastJumpPoint: TNotifyEvent; FOnEditorChanged: TNotifyEvent; + FOnEditorClosed: TNotifyEvent; + FOnEditorMoved: TNotifyEvent; FOnEditorPropertiesClicked: TNotifyEvent; FOnFindDeclarationClicked: TNotifyEvent; FOnGetIndent: TOnGetIndentEvent; @@ -961,8 +962,10 @@ type FOnJumpToHistoryPoint: TOnJumpToHistoryPoint; FOnMouseLink: TSynMouseLinkEvent; FOnOpenFileAtCursorClicked: TNotifyEvent; + FOnPlaceMark: TPlaceBookMarkEvent; FOnPopupMenu: TSrcEditPopupMenuEvent; FOnProcessUserCommand: TOnProcessUserCommand; + FOnProject1BookmarksNeeded: TNotifyEvent; fOnReadOnlyChanged: TNotifyEvent; FOnShowCodeContext: TOnShowCodeContext; FOnShowHintForSource: TOnShowHintForSource; @@ -988,6 +991,10 @@ type read FOnDeleteLastJumpPoint write FOnDeleteLastJumpPoint; property OnEditorChanged: TNotifyEvent read FOnEditorChanged write FOnEditorChanged; + property OnEditorMoved: TNotifyEvent + read FOnEditorMoved write FOnEditorMoved; + property OnEditorClosed: TNotifyEvent + read FOnEditorClosed write FOnEditorClosed; property OnEditorPropertiesClicked: TNotifyEvent read FOnEditorPropertiesClicked write FOnEditorPropertiesClicked; property OnFindDeclarationClicked: TNotifyEvent @@ -1000,6 +1007,12 @@ type read FOnShowCodeContext write FOnShowCodeContext; property OnJumpToHistoryPoint: TOnJumpToHistoryPoint read FOnJumpToHistoryPoint write FOnJumpToHistoryPoint; + property OnPlaceBookmark: TPlaceBookMarkEvent + read FOnPlaceMark write FOnPlaceMark; + property OnClearBookmark: TPlaceBookMarkEvent + read FOnClearBookmark write FOnClearBookmark; + property OnProject1BookmarksNeeded: TNotifyEvent + read FOnProject1BookmarksNeeded write FOnProject1BookmarksNeeded; property OnOpenFileAtCursorClicked: TNotifyEvent read FOnOpenFileAtCursorClicked write FOnOpenFileAtCursorClicked; property OnProcessUserCommand: TOnProcessUserCommand @@ -1092,13 +1105,14 @@ var procedure RegisterStandardSourceEditorMenuItems; +var + Highlighters: array[TLazSyntaxHighlighter] of TSynCustomHighlighter; implementation {$R *.lfm} var - Highlighters: array[TLazSyntaxHighlighter] of TSynCustomHighlighter; SourceCompletionTimer: TIdleTimer = nil; SourceCompletionCaretXY: TPoint; AWordCompletion: TWordCompletion = nil; @@ -3727,23 +3741,14 @@ Begin end; Function TSourceEditor.Close: Boolean; -var - p: TUnitInfo; Begin Result := True; - If Assigned(FOnBeforeClose) then - FOnBeforeClose(Self); - Visible := False; - Manager.EditorRemoved(self); + Manager.EditorRemoved(Self); SourceEditorMarks.DeleteAllForEditor(FEditor); UnbindEditor; FEditor.Parent:=nil; CodeBuffer := nil; - If Assigned(FOnAfterClose) then FOnAfterClose(Self); - p :=Project1.UnitWithEditorComponent(Self); - if p <> nil then - p.EditorComponent := nil; // Set EditorIndex := -1 end; procedure TSourceEditor.BeginUndoBlock; @@ -3844,13 +3849,15 @@ end; procedure TSourceEditor.EditorPlaceBookmark(Sender: TObject; var Mark: TSynEditMark); begin - Project1.UnitWithEditorComponent(self).AddBookmark(Mark.Column, Mark.Line, Mark.BookmarkNumber); + if Assigned(Manager) and Assigned(Manager.OnPlaceBookmark) then + Manager.OnPlaceBookmark(Self, Mark); end; procedure TSourceEditor.EditorClearBookmark(Sender: TObject; var Mark: TSynEditMark); begin - Project1.UnitWithEditorComponent(self).DeleteBookmark(Mark.BookmarkNumber); + if Assigned(Manager) and Assigned(Manager.OnClearBookmark) then + Manager.OnClearBookmark(Self, Mark); end; procedure TSourceEditor.EditorEnter(Sender: TObject); @@ -3977,30 +3984,15 @@ begin FEditor.Lines:=AValue; end; -function TSourceEditor.GetProjectFile: TLazProjectFile; -begin - Result:=Project1.UnitWithEditorComponent(Self); -end; - procedure TSourceEditor.UpdateProjectFile; -var - p: TUnitInfo; begin - p :=Project1.UnitWithEditorComponent(Self); - if p = nil then exit; - p.EditorIndex := PageIndex; - p.WindowIndex := Manager.IndexOfSourceWindow(SourceNotebook); + if Assigned(Manager) and Assigned(Manager.OnEditorMoved) + then Manager.OnEditorMoved(self); end; function TSourceEditor.GetDesigner(LoadForm: boolean): TIDesigner; -var - AProjectFile: TLazProjectFile; begin - AProjectFile:=GetProjectFile; - if AProjectFile<>nil then - Result:=LazarusIDE.GetDesignerWithProjectFile(AProjectFile,LoadForm) - else - Result:=nil; + Result:=LazarusIDE.GetDesignerForProjectEditor(Self, LoadForm) end; function TSourceEditor.GetCursorScreenXY: TPoint; @@ -4619,7 +4611,7 @@ begin for BookMarkID:=0 to 9 do begin MarkDesc:=' '+IntToStr(BookMarkID); MarkSrcEdit := TSourceEditor( - Project1.Bookmarks.EditorComponentForBookmarkWithIndex(BookMarkID)); + Manager.Project1BookMarks.EditorComponentForBookmarkWithIndex(BookMarkID)); if (MarkSrcEdit<>nil) and MarkSrcEdit.EditorComponent.GetBookMark(BookMarkID,BookMarkX,BookMarkY) then begin @@ -6207,10 +6199,9 @@ Begin (TempEditor.FileName <> '') then TempEditor.FillExecutionMarks; if Assigned(Manager.OnEditorVisibleChanged) then - Manager.OnEditorVisibleChanged(sender); + Manager.OnEditorVisibleChanged(Self); end; - Project1.UpdateVisibleUnit(TempEditor, Manager.IndexOfSourceWindow(self)); CheckCurrentCodeBufferChanged; Manager.UpdateFPDocEditor; end; @@ -6310,14 +6301,6 @@ var I: integer; h: TLazSyntaxHighlighter; Begin - // this reloads the colors for the highlighter and other editor settings. - for h:=Low(TLazSyntaxHighlighter) to High(TLazSyntaxHighlighter) do - if Highlighters[h]<>nil then begin - Highlighters[h].BeginUpdate; - EditorOpts.GetHighlighterSettings(Highlighters[h]); - Highlighters[h].EndUpdate; - end; - ReloadHighlighters; for i := 0 to EditorCount-1 do Editors[i].RefreshEditorSettings; @@ -6335,20 +6318,6 @@ Begin UpdatePageNames; end; -procedure TSourceNotebook.ReloadHighlighters; -var - i: Integer; - ASrcEdit: TSourceEditor; - AnUnitInfo: TUnitInfo; -begin - for i := 0 to EditorCount-1 do begin - ASrcEdit:=Editors[i]; - AnUnitInfo:=Project1.UnitWithEditorComponent(ASrcEdit); - if AnUnitInfo<>nil then - ASrcEdit.SyntaxHighlighterType:=AnUnitInfo.SyntaxHighlighter; - end; -end; - procedure TSourceNotebook.CheckFont; var SrcEdit: TSourceEditor; @@ -7100,15 +7069,10 @@ begin inherited Notification(AComponent, Operation); if Operation=opRemove then begin - if AComponent is TSourceNotebook then begin - FChangeNotifyLists[semWindowDestroy].CallNotifyEvents(AComponent); - end - else begin - if Assigned(fCompletionPlugins) then - fCompletionPlugins.Remove(AComponent); - if ActiveCompletionPlugin = AComponent then - DeactivateCompletionForm; - end; + if Assigned(fCompletionPlugins) then + fCompletionPlugins.Remove(AComponent); + if ActiveCompletionPlugin = AComponent then + DeactivateCompletionForm; end; end; @@ -7214,6 +7178,13 @@ begin Result := TSourceEditor(inherited ActiveEditor); end; +function TSourceEditorManager.GetProject1BookMarks: TProjectBookmarkList; +begin + if Assigned(OnProject1BookmarksNeeded) then + OnProject1BookmarksNeeded(Self); + Result := FProject1BookMarks; +end; + function TSourceEditorManager.GetSourceEditorsByPage(WindowIndex, PageIndex: integer): TSourceEditor; begin @@ -7324,6 +7295,8 @@ procedure TSourceEditorManager.EditorRemoved(AEditor: TSourceEditor); begin if FDefaultCompletionForm <> nil then FDefaultCompletionForm.RemoveEditor(AEditor.EditorComponent); + if Assigned(OnEditorClosed) then + OnEditorClosed(AEditor); end; procedure TSourceEditorManager.Notification(AComponent: TComponent; @@ -7381,14 +7354,6 @@ begin end; -procedure TSourceEditorManager.ReloadHighlighters; -var - i: Integer; -begin - for i := FSourceWindowList.Count - 1 downto 0 do - SourceWindows[i].ReloadHighlighters; -end; - procedure TSourceEditorManager.FindClicked(Sender: TObject); begin if ActiveEditor <> nil then ActiveEditor.StartFindAndReplace(false); @@ -7460,7 +7425,7 @@ Begin NewXY := ActEdit.EditorComponent.CaretXY; SetMark:=true; - OldEdit := TSourceEditor(Project1.Bookmarks.EditorComponentForBookmarkWithIndex(Value)); + OldEdit := TSourceEditor(Project1BookMarks.EditorComponentForBookmarkWithIndex(Value)); if (OldEdit<>nil) and OldEdit.EditorComponent.GetBookMark(Value,OldX,OldY) then begin if (not Toggle) and (OldX=NewXY.X) and (OldY=NewXY.Y) then @@ -7480,7 +7445,7 @@ var i: Integer; begin for i:=0 to 9 do - if (Project1.Bookmarks.BookmarkWithID(i) = nil) then begin + if (Project1BookMarks.BookmarkWithID(i) = nil) then begin BookMarkSet(i); exit; end; @@ -7500,7 +7465,7 @@ procedure TSourceEditorManager.BookMarkGoTo(Index: Integer); var AnEditor:TSourceEditor; begin - AnEditor := TSourceEditor(Project1.Bookmarks.EditorComponentForBookmarkWithIndex(Index)); + AnEditor := TSourceEditor(Project1BookMarks.EditorComponentForBookmarkWithIndex(Index)); if AnEditor = nil then exit; ActiveEditor := AnEditor; ShowActiveWindowOnTop(True); @@ -7537,7 +7502,7 @@ var BestBookmarkID: Integer; CurPos: TProjectBookmark; begin - if Project1.Bookmarks.Count = 0 then exit; + if Project1BookMarks.Count = 0 then exit; SrcEdit := ActiveEditor; if SrcEdit = nil then exit; @@ -7546,8 +7511,8 @@ begin List := TFPList.Create; CurPos := TProjectBookmark.Create(i, SrcEdit.EditorComponent.CaretY, -1, SrcEdit); try - for i := 0 to Project1.Bookmarks.Count - 1 do - List.Add(Project1.Bookmarks[i]); + for i := 0 to Project1BookMarks.Count - 1 do + List.Add(Project1BookMarks[i]); List.Add(CurPos); List.Sort(TListSortCompare(@CompareBookmarkEditorPos)); @@ -8049,6 +8014,8 @@ begin FActiveWindow := nil else if FActiveWindow = AWindow then FActiveWindow := SourceWindows[Max(0, Min(i, SourceWindowCount-1))]; + if i >= 0 then + FChangeNotifyLists[semWindowDestroy].CallNotifyEvents(AWindow); end; initialization diff --git a/ideintf/lazideintf.pas b/ideintf/lazideintf.pas index 0d46032a18..0b813869e4 100644 --- a/ideintf/lazideintf.pas +++ b/ideintf/lazideintf.pas @@ -271,6 +271,8 @@ type procedure AbortBuild; virtual; abstract; // designer + function GetDesignerForProjectEditor(AEditor: TSourceEditorInterface; + LoadForm: boolean): TIDesigner; virtual; abstract; function GetDesignerWithProjectFile(AFile: TLazProjectFile; LoadForm: boolean): TIDesigner; virtual; abstract; function GetProjectFileWithRootComponent(AComponent: TComponent): TLazProjectFile; virtual; abstract;