mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-01 03:36:07 +02:00
SourceEditor: Added logging/debugln
git-svn-id: trunk@37310 -
This commit is contained in:
parent
43b55bf526
commit
3b402f3e72
@ -45,7 +45,7 @@ uses
|
||||
SynEditMouseCmds,
|
||||
Classes, SysUtils, Math, Controls, ExtendedNotebook, LCLProc, LCLType, LResources,
|
||||
LCLIntf, FileUtil, Forms, ComCtrls, Dialogs, StdCtrls, Graphics, Translations,
|
||||
ClipBrd, types, Extctrls, Menus, HelpIntfs, LConvEncoding, Messages,
|
||||
ClipBrd, types, Extctrls, Menus, HelpIntfs, LConvEncoding, Messages, LazLoggerBase,
|
||||
// codetools
|
||||
BasicCodeTools, CodeBeautifier, CodeToolManager, CodeCache, SourceLog,
|
||||
// synedit
|
||||
@ -551,6 +551,12 @@ type
|
||||
);
|
||||
TSourceNotebookStates = set of TSourceNotebookState;
|
||||
|
||||
TSourceNotebookUpdateFlag = (
|
||||
ufPageNames, ufTabsAndPage, ufStatusBar, ufProjectFiles,
|
||||
ufFocusEditor, ufActiveEditorChanged
|
||||
);
|
||||
TSourceNotebookUpdateFlags = set of TSourceNotebookUpdateFlag;
|
||||
|
||||
{ TSourceNotebook }
|
||||
|
||||
TSourceNotebook = class(TSourceEditorWindowInterface)
|
||||
@ -598,7 +604,7 @@ type
|
||||
private
|
||||
FManager: TSourceEditorManager;
|
||||
FUpdateLock, FFocusLock: Integer;
|
||||
FUpdateFlags: set of (ufPageNames, ufTabsAndPage, ufStatusBar, ufProjectFiles, ufFocusEditor, ufActiveEditorChanged);
|
||||
FUpdateFlags: TSourceNotebookUpdateFlags;
|
||||
FPageIndex: Integer;
|
||||
fAutoFocusLock: integer;
|
||||
FIncrementalSearchPos: TPoint; // last set position
|
||||
@ -1244,6 +1250,9 @@ implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
var
|
||||
SRCED_LOCK, SRCED_OPEN, SRCED_CLOSE, SRCED_PAGES: PLazLoggerLogGroup;
|
||||
|
||||
const
|
||||
(* SoftCenter are th visible Lines in the Editor where the caret can be locateted,
|
||||
without CenterCursor adjusting the topline.
|
||||
@ -1259,6 +1268,21 @@ var
|
||||
SourceCompletionCaretXY: TPoint;
|
||||
AWordCompletion: TWordCompletion = nil;
|
||||
|
||||
function dbgs(AFlag: TSourceNotebookUpdateFlag): string; overload;
|
||||
begin
|
||||
WriteStr(Result, AFlag);
|
||||
end;
|
||||
function dbgs(AFlags: TSourceNotebookUpdateFlags): string; overload;
|
||||
var i: TSourceNotebookUpdateFlag;
|
||||
begin
|
||||
for i := low(TSourceNotebookUpdateFlags) to high(TSourceNotebookUpdateFlags) do
|
||||
if i in AFlags then begin
|
||||
if Result <> '' then Result := Result + ',';
|
||||
Result := Result + dbgs(i);
|
||||
end;
|
||||
Result := '['+ Result + ']';
|
||||
end;
|
||||
|
||||
function SourceEditorManager: TSourceEditorManager;
|
||||
begin
|
||||
Result := TSourceEditorManager(SourceEditorManagerIntf);
|
||||
@ -2525,6 +2549,7 @@ end;
|
||||
|
||||
destructor TSourceEditor.Destroy;
|
||||
begin
|
||||
DebugLnEnter(SRCED_CLOSE, ['TSourceEditor.Destroy ']);
|
||||
if FInEditorChangedUpdating then begin
|
||||
debugln(['***** TSourceEditor.Destroy: FInEditorChangedUpdating was true']);
|
||||
DebugBoss.UnLockCommandProcessing;
|
||||
@ -2548,6 +2573,7 @@ begin
|
||||
FSharedValues.RemoveSharedEditor(Self);
|
||||
if FSharedValues.SharedEditorCount = 0 then
|
||||
FreeAndNil(FSharedValues);
|
||||
DebugLnExit(SRCED_CLOSE, ['TSourceEditor.Destroy ']);
|
||||
end;
|
||||
|
||||
{------------------------------G O T O L I N E -----------------------------}
|
||||
@ -2834,22 +2860,16 @@ end;
|
||||
|
||||
Procedure TSourceEditor.FocusEditor;
|
||||
Begin
|
||||
{$IFDEF VerboseFocus}
|
||||
debugln('TSourceEditor.FocusEditor A ',PageName,' ',FEditor.Name);
|
||||
{$ENDIF}
|
||||
DebugLnEnter(SRCED_PAGES, ['>> TSourceEditor.FocusEditor A ',PageName,' ',FEditor.Name]);
|
||||
IDEWindowCreators.ShowForm(SourceNotebook,true);
|
||||
if FEditor.IsVisible then begin
|
||||
FEditor.SetFocus; // TODO: will cal EditorEnter, which does self.Activate => maybe lock, and do here?
|
||||
FSharedValues.SetActiveSharedEditor(Self);
|
||||
end else begin
|
||||
{$IFDEF VerboseFocus}
|
||||
debugln('TSourceEditor.FocusEditor not IsVisible: ',PageName,' ',FEditor.Name);
|
||||
{$ENDIF}
|
||||
debugln(SRCED_PAGES, ['TSourceEditor.FocusEditor not IsVisible: ',PageName,' ',FEditor.Name]);
|
||||
end;
|
||||
//DebugLn('TSourceEditor.FocusEditor ',dbgsName(FindOwnerControl(GetFocus)),' ',dbgs(GetFocus));
|
||||
{$IFDEF VerboseFocus}
|
||||
debugln('TSourceEditor.FocusEditor END ',PageName,' ',FEditor.Name);
|
||||
{$ENDIF}
|
||||
DebugLnExit(SRCED_PAGES, ['<< TSourceEditor.FocusEditor END ',PageName,' ',FEditor.Name]);
|
||||
end;
|
||||
|
||||
Function TSourceEditor.GetReadOnly: Boolean;
|
||||
@ -4376,6 +4396,7 @@ end;
|
||||
|
||||
Function TSourceEditor.Close: Boolean;
|
||||
Begin
|
||||
DebugLnEnter(SRCED_CLOSE, ['TSourceEditor.Close ShareCount=', FSharedValues.SharedEditorCount]);
|
||||
Result := True;
|
||||
Visible := False;
|
||||
Manager.EditorRemoved(Self);
|
||||
@ -4383,6 +4404,7 @@ Begin
|
||||
FEditor.Parent:=nil;
|
||||
if FSharedValues.SharedEditorCount = 1 then
|
||||
CodeBuffer := nil;
|
||||
DebugLnExit(SRCED_CLOSE, ['TSourceEditor.Close ']);
|
||||
end;
|
||||
|
||||
procedure TSourceEditor.BeginUndoBlock{$IFDEF SynUndoDebugBeginEnd}(ACaller: String = ''){$ENDIF};
|
||||
@ -4527,6 +4549,7 @@ procedure TSourceEditor.EditorEnter(Sender: TObject);
|
||||
var
|
||||
SrcEdit: TSourceEditor;
|
||||
begin
|
||||
debugln(SRCED_PAGES, ['TSourceEditor.EditorEnter ']);
|
||||
if (FSourceNoteBook.FUpdateLock <> 0) or
|
||||
(FSourceNoteBook.FFocusLock <> 0)
|
||||
then exit;
|
||||
@ -5189,6 +5212,7 @@ destructor TSourceNotebook.Destroy;
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
DebugLnEnter(SRCED_CLOSE, ['TSourceNotebook.Destroy ']);
|
||||
if assigned(Manager) then
|
||||
Manager.RemoveWindow(Self);
|
||||
DisableAutoSizing{$IFDEF DebugDisableAutoSizing}('TSourceNotebook.Destroy'){$ENDIF};
|
||||
@ -5208,6 +5232,7 @@ begin
|
||||
FreeAndNil(FNotebook);
|
||||
|
||||
inherited Destroy;
|
||||
DebugLnExit(SRCED_CLOSE, ['TSourceNotebook.Destroy ']);
|
||||
end;
|
||||
|
||||
procedure TSourceNotebook.DeactivateCompletionForm;
|
||||
@ -5852,6 +5877,7 @@ end;
|
||||
|
||||
procedure TSourceNotebook.SetPageIndex(const AValue: Integer);
|
||||
begin
|
||||
DebugLnEnter(SRCED_PAGES, ['>> TSourceNotebook.SetPageIndex Cur-PgIdx=', PageIndex, ' FPageIndex=', FPageIndex, ' Value=', AValue, ' FUpdateLock=', FUpdateLock]);
|
||||
FPageIndex := AValue;
|
||||
if FUpdateLock = 0 then begin
|
||||
FPageIndex := Max(0, Min(FPageIndex, FNotebook.PageCount-1));
|
||||
@ -5864,6 +5890,7 @@ begin
|
||||
NotebookPageChanged(nil);
|
||||
HistorySetMostRecent(FNotebook.Pages[FPageIndex]);
|
||||
end;
|
||||
DebugLnExit(SRCED_PAGES, ['<< TSourceNotebook.SetPageIndex ']);
|
||||
end;
|
||||
|
||||
function TSourceNotebook.GetCompletionBoxPosition: integer;
|
||||
@ -6069,7 +6096,7 @@ procedure TSourceNotebook.DoClose(var CloseAction: TCloseAction);
|
||||
var
|
||||
Layout: TSimpleWindowLayout;
|
||||
begin
|
||||
//debugln(['TSourceNotebook.DoClose ',DbgSName(Self)]);
|
||||
DebugLnEnter(SRCED_CLOSE, ['TSourceNotebook.DoClose ', DbgSName(self)]);
|
||||
inherited DoClose(CloseAction);
|
||||
CloseAction := caHide;
|
||||
{$IFnDEF SingleSrcWindow}
|
||||
@ -6092,6 +6119,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
{$ENDIF}
|
||||
DebugLnExit(SRCED_CLOSE, ['TSourceNotebook.DoClose ']);
|
||||
end;
|
||||
|
||||
procedure TSourceNotebook.DoShow;
|
||||
@ -6268,6 +6296,7 @@ procedure TSourceNotebook.IncUpdateLockInternal;
|
||||
begin
|
||||
if FUpdateLock = 0 then begin
|
||||
FUpdateFlags := [];
|
||||
DebugLn(SRCED_LOCK, ['TSourceNotebook.IncUpdateLockInternal']);
|
||||
end;
|
||||
inc(FUpdateLock);
|
||||
end;
|
||||
@ -6276,6 +6305,7 @@ procedure TSourceNotebook.DecUpdateLockInternal;
|
||||
begin
|
||||
dec(FUpdateLock);
|
||||
if FUpdateLock = 0 then begin
|
||||
DebugLnEnter(SRCED_LOCK, ['>> TSourceNotebook.DecUpdateLockInternal UpdateFlags=', dbgs(FUpdateFlags), ' PageIndex=', FPageIndex]);
|
||||
PageIndex := FPageIndex;
|
||||
if (ufPageNames in FUpdateFlags) then UpdatePageNames;
|
||||
if (ufTabsAndPage in FUpdateFlags) then UpdateTabsAndPageTitle;
|
||||
@ -6284,6 +6314,7 @@ begin
|
||||
if (ufFocusEditor in FUpdateFlags) then FocusEditor;
|
||||
if (ufActiveEditorChanged in FUpdateFlags) then DoActiveEditorChanged;
|
||||
FUpdateFlags := [];
|
||||
DebugLnExit(SRCED_LOCK, ['<< TSourceNotebook.DecUpdateLockInternal']);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -6316,6 +6347,7 @@ end;
|
||||
|
||||
procedure TSourceNotebook.NoteBookDeletePage(APageIndex: Integer);
|
||||
begin
|
||||
DebugLnEnter(SRCED_PAGES, ['TSourceNotebook.NoteBookDeletePage ', APageIndex]);
|
||||
HistoryRemove(FNotebook.Pages[APageIndex]);
|
||||
if PageCount > 1 then begin
|
||||
// make sure to select another page in the NoteBook, otherwise the
|
||||
@ -6339,6 +6371,7 @@ begin
|
||||
end else
|
||||
FNotebook.Visible := False;
|
||||
UpdateTabsAndPageTitle;
|
||||
DebugLnExit(SRCED_PAGES, ['TSourceNotebook.NoteBookDeletePage ']);
|
||||
end;
|
||||
|
||||
procedure TSourceNotebook.UpdateTabsAndPageTitle;
|
||||
@ -6387,11 +6420,14 @@ end;
|
||||
procedure TSourceNotebook.DoActiveEditorChanged;
|
||||
begin
|
||||
if FUpdateLock > 0 then begin
|
||||
DebugLn(SRCED_PAGES, ['TSourceNotebook.DoActiveEditorChanged LOCKED']);
|
||||
include(FUpdateFlags, ufActiveEditorChanged);
|
||||
exit;
|
||||
end;
|
||||
exclude(FUpdateFlags, ufActiveEditorChanged);
|
||||
DebugLnEnter(SRCED_PAGES, ['>> TSourceNotebook.DoActiveEditorChanged ']);
|
||||
Manager.DoActiveEditorChanged;
|
||||
DebugLnExit(SRCED_PAGES, ['<< TSourceNotebook.DoActiveEditorChanged ']);
|
||||
end;
|
||||
|
||||
procedure TSourceNotebook.BeginIncrementalFind;
|
||||
@ -6952,9 +6988,7 @@ var
|
||||
s: String;
|
||||
Begin
|
||||
//create a new page
|
||||
{$IFDEF IDE_DEBUG}
|
||||
debugln('[TSourceNotebook.NewFile] A ');
|
||||
{$ENDIF}
|
||||
debugln(SRCED_OPEN, '[TSourceNotebook.NewFile] A ');
|
||||
// Debugger cause ProcessMessages, which could lead to entering methods in unexpected order
|
||||
DebugBoss.LockCommandProcessing;
|
||||
try
|
||||
@ -6963,13 +6997,9 @@ Begin
|
||||
IDEWindowCreators.ShowForm(Self,false);
|
||||
s := Manager.FindUniquePageName(NewShortName, AShareEditor);
|
||||
Result := NewSE(-1, -1, AShareEditor, s);
|
||||
{$IFDEF IDE_DEBUG}
|
||||
debugln('[TSourceNotebook.NewFile] B ');
|
||||
{$ENDIF}
|
||||
debugln(SRCED_OPEN, '[TSourceNotebook.NewFile] B ');
|
||||
Result.CodeBuffer:=ASource;
|
||||
{$IFDEF IDE_DEBUG}
|
||||
debugln('[TSourceNotebook.NewFile] D ');
|
||||
{$ENDIF}
|
||||
debugln(SRCED_OPEN, '[TSourceNotebook.NewFile] D ');
|
||||
//debugln(['TSourceNotebook.NewFile ',NewShortName,' ',ASource.Filename]);
|
||||
Result.PageName:= s;
|
||||
UpdatePageNames;
|
||||
@ -6983,9 +7013,7 @@ Begin
|
||||
finally
|
||||
DebugBoss.UnLockCommandProcessing;
|
||||
end;
|
||||
{$IFDEF IDE_DEBUG}
|
||||
debugln('[TSourceNotebook.NewFile] end');
|
||||
{$ENDIF}
|
||||
debugln(SRCED_OPEN, '[TSourceNotebook.NewFile] end');
|
||||
CheckFont;
|
||||
end;
|
||||
|
||||
@ -6995,23 +7023,20 @@ var
|
||||
WasSelected: Boolean;
|
||||
begin
|
||||
(* Do not use DisableAutoSizing in here, if a new Editor is focused it needs immediate autosize (during handle creation) *)
|
||||
{$IFDEF IDE_DEBUG}
|
||||
debugln(['TSourceNotebook.CloseFile A APageIndex=',APageIndex]);
|
||||
{$ENDIF}
|
||||
// Inc/DecUpdateLockInternal does currently noth work, since a tab will be removed
|
||||
DebugLnEnter(SRCED_CLOSE, ['>> TSourceNotebook.CloseFile A APageIndex=',APageIndex, ' Cur-Page=', PageIndex]);
|
||||
DebugBoss.LockCommandProcessing;
|
||||
try
|
||||
TempEditor:=FindSourceEditorWithPageIndex(APageIndex);
|
||||
if TempEditor=nil then exit;
|
||||
WasSelected:=PageIndex=APageIndex;
|
||||
//debugln(['TSourceNotebook.CloseFile ',TempEditor.FileName,' ',TempEditor.APageIndex]);
|
||||
debugln(SRCED_CLOSE, ['TSourceNotebook.CloseFile ', DbgSName(TempEditor), ' ', TempEditor.FileName]);
|
||||
EndIncrementalFind;
|
||||
TempEditor.Close;
|
||||
NoteBookDeletePage(APageIndex); // delete page before sending notification senEditorDestroyed
|
||||
TempEditor.Free;
|
||||
TempEditor.Free; // sends semEditorDestroy
|
||||
TempEditor:=nil;
|
||||
// delete the page
|
||||
//debugln('TSourceNotebook.CloseFile B APageIndex=',APageIndex,' PageCount=',PageCount,' NoteBook.APageIndex=',Notebook.APageIndex);
|
||||
//debugln('TSourceNotebook.CloseFile C APageIndex=',APageIndex,' PageCount=',PageCount,' NoteBook.APageIndex=',Notebook.APageIndex);
|
||||
UpdateProjectFiles;
|
||||
UpdatePageNames;
|
||||
if WasSelected then
|
||||
@ -7030,11 +7055,10 @@ begin
|
||||
if IsVisible and (TempEditor <> nil) and (FUpdateLock = 0) then
|
||||
TempEditor.EditorComponent.SetFocus;
|
||||
finally
|
||||
debugln(SRCED_CLOSE, ['TSourceNotebook.CloseFile UnLock']);
|
||||
DebugBoss.UnLockCommandProcessing;
|
||||
DebugLnExit(SRCED_CLOSE, ['<< TSourceNotebook.CloseFile']);
|
||||
end;
|
||||
{$IFDEF IDE_DEBUG}
|
||||
debugln('TSourceNotebook.CloseFile END');
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
procedure TSourceNotebook.FocusEditor;
|
||||
@ -7409,12 +7433,14 @@ Begin
|
||||
Include(States, snNotbookPageChangedNeeded);
|
||||
exit;
|
||||
end;
|
||||
DebugLnEnter(SRCED_PAGES, ['>> TSourceNotebook.NotebookPageChanged PageIndex=', PageIndex, ' AutoFocusLock=', fAutoFocusLock]);
|
||||
|
||||
Exclude(States, snNotbookPageChangedNeeded);
|
||||
TempEditor:=GetActiveSE;
|
||||
if (FHintWindow <> nil) and FHintWindow.Visible then
|
||||
HideHint;
|
||||
|
||||
//debugln('TSourceNotebook.NotebookPageChanged ',Pageindex,' ',TempEditor <> nil,' fAutoFocusLock=',fAutoFocusLock);
|
||||
DebugLn(SRCED_PAGES, ['TSourceNotebook.NotebookPageChanged TempEdit=', DbgSName(TempEditor)]);
|
||||
if TempEditor <> nil then
|
||||
begin
|
||||
if not TempEditor.Visible then begin
|
||||
@ -7433,17 +7459,9 @@ Begin
|
||||
not(Manager.HasAutoFocusLock)
|
||||
then
|
||||
begin
|
||||
{$IFDEF VerboseFocus}
|
||||
debugln('TSourceNotebook.NotebookPageChanged BEFORE SetFocus ',
|
||||
TempEditor.EditorComponent.Name,' ',
|
||||
NoteBookPages[FindPageWithEditor(TempEditor)]);
|
||||
{$ENDIF}
|
||||
DebugLnEnter(SRCED_PAGES, ['TSourceNotebook.NotebookPageChanged BEFORE SetFocus ', DbgSName(TempEditor.EditorComponent),' Page=', FindPageWithEditor(TempEditor), ' ', TempEditor.FileName]);
|
||||
TempEditor.FocusEditor; // recursively calls NotebookPageChanged, via EditorEnter
|
||||
{$IFDEF VerboseFocus}
|
||||
debugln('TSourceNotebook.NotebookPageChanged AFTER SetFocus ',
|
||||
TempEditor.EditorComponent.Name,' ',
|
||||
NotebookPages[FindPageWithEditor(TempEditor)]);
|
||||
{$ENDIF}
|
||||
DebugLnExit(SRCED_PAGES, ['TSourceNotebook.NotebookPageChanged AFTER SetFocus ', DbgSName(TempEditor.EditorComponent),' Page=', FindPageWithEditor(TempEditor)]);
|
||||
end;
|
||||
UpdateStatusBar;
|
||||
UpdateActiveEditColors(TempEditor.EditorComponent);
|
||||
@ -7455,6 +7473,7 @@ Begin
|
||||
end;
|
||||
|
||||
CheckCurrentCodeBufferChanged;
|
||||
DebugLnExit(SRCED_PAGES, ['<< TSourceNotebook.NotebookPageChanged ']);
|
||||
end;
|
||||
|
||||
Procedure TSourceNotebook.ProcessParentCommand(Sender: TObject;
|
||||
@ -9696,6 +9715,11 @@ begin
|
||||
end;
|
||||
|
||||
initialization
|
||||
SRCED_LOCK := DebugLogger.RegisterLogGroup('SRCED_LOCK' {$IFDEF SRCED_LOCK} , True {$ENDIF} );
|
||||
SRCED_OPEN := DebugLogger.RegisterLogGroup('SRCED_OPEN' {$IFDEF SRCED_OPEN} , True {$ENDIF} );
|
||||
SRCED_CLOSE := DebugLogger.RegisterLogGroup('SRCED_CLOSE' {$IFDEF SRCED_CLOSE} , True {$ENDIF} );
|
||||
SRCED_PAGES := DebugLogger.RegisterLogGroup('SRCED_PAGES' {$IFDEF SRCED_PAGES} , True {$ENDIF} );
|
||||
|
||||
InternalInit;
|
||||
{$I ../images/bookmark.lrs}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user