diff --git a/components/synedit/synedit.pp b/components/synedit/synedit.pp index b4f0705b9c..77799c8708 100644 --- a/components/synedit/synedit.pp +++ b/components/synedit/synedit.pp @@ -1688,12 +1688,12 @@ procedure TCustomSynEdit.ScanFromAfterLock; var LastLineChanged: LongInt; begin + {$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- ScanFromAfterLock; fPaintLock:=', fPaintLock, ' fHighlighterNeedsUpdateStartLine=', fHighlighterNeedsUpdateStartLine,' fHighlighterNeedsUpdateEndLine=',fHighlighterNeedsUpdateEndLine]);{$ENDIF} if fHighlighterNeedsUpdateStartLine>0 then begin //DebugLn('TCustomSynEdit.DecPaintLock ',dbgs(fHighlighterNeedsUpdateStartLine),'-',dbgs(fHighlighterNeedsUpdateEndLine)); if fHighlighterNeedsUpdateStartLine<=FTheLinesView.Count then begin if fHighlighterNeedsUpdateEndLine>FTheLinesView.Count then fHighlighterNeedsUpdateEndLine:=FTheLinesView.Count; - LastLineChanged:=fHighlighterNeedsUpdateEndLine; // rescan all lines in range // Note: The highlighter range of the line can be invalid as well, // so start scan one line earlier @@ -4379,6 +4379,7 @@ end; function TCustomSynEdit.ScanFrom(var Index: integer; AtLeastTilIndex: integer): integer; // Index and AtLeastTilIndex are 0 based begin + {$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- ScanFrom Index=', Index, ' AtLeats=', AtLeastTilIndex]);{$ENDIF} if Index < 0 then Index := 0; if not assigned(fHighlighter) or (Index > FTheLinesView.Count - 1) then begin FFoldedLinesView.FixFoldingAtTextIndex(Index); @@ -4395,11 +4396,13 @@ begin Topline := TopLine; if Index > 0 then dec(Index); Dec(Result); + {$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- ScanFrom Result=', Result]);{$ENDIF} end; procedure TCustomSynEdit.LineCountChanged(Sender: TSynEditStrings; AIndex, ACount: Integer); begin + {$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- LineCountChanged Aindex', AIndex, ' ACount=', ACount]);{$ENDIF} if PaintLock>0 then begin if (fHighlighterNeedsUpdateStartLine<1) or (fHighlighterNeedsUpdateStartLine>AIndex+1) then @@ -4426,6 +4429,7 @@ procedure TCustomSynEdit.LineTextChanged(Sender: TSynEditStrings; var EndIndex: Integer; begin + {$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- LineTextChanged Aindex', AIndex, ' ACount=', ACount]);{$ENDIF} if PaintLock>0 then begin if (fHighlighterNeedsUpdateStartLine<1) or (fHighlighterNeedsUpdateStartLine>AIndex+1) then @@ -4460,6 +4464,7 @@ procedure TCustomSynEdit.FoldChanged(Index : integer); var i: Integer; begin + {$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- FoldChanged; Index=', Index, ' topline=', TopLine, ' ScreenRowToRow(LinesInWindow + 1)=', ScreenRowToRow(LinesInWindow + 1)]);{$ENDIF} TopLine := TopLine; i := FFoldedLinesView.CollapsedLineForFoldAtLine(CaretY); if i > 0 then begin diff --git a/components/synedit/syneditfoldedview.pp b/components/synedit/syneditfoldedview.pp index 8cb5f8e0e2..8a7ee62535 100644 --- a/components/synedit/syneditfoldedview.pp +++ b/components/synedit/syneditfoldedview.pp @@ -328,7 +328,6 @@ type Line, LogX, LogX2, ELine, ELogX, ELogX2, FType: Integer; end; - { TSynTextFoldAVLNodeData } function TSynTextFoldAVLNodeData.TreeDepth : integer; @@ -874,6 +873,7 @@ function TSynTextFoldAVLTree.InsertNewFold(ALine, AColumn, ACount : Integer) : T var r : TSynTextFoldAVLNodeData; begin + {$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- InsertNewFold ALine:=', ALine, ' AColumn=', AColumn]);{$ENDIF} r := NewNode; r.LineOffset := ALine; r.FoldIndex := AColumn; @@ -891,6 +891,7 @@ var OldFold : TSynTextFoldAVLNode; lcount: Integer; begin + {$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- RemoveFoldForLine ALine:=', ALine, ' IgnoreFirst=', IgnoreFirst,' OnlyCol=',OnlyCol]);{$ENDIF} Result := ALine; OldFold := FindFoldForLine(ALine, true); if (not OldFold.IsInFold) // behind last node @@ -923,6 +924,7 @@ var OnlyNested: Boolean; Nested: TSynTextFoldAVLNode; begin + {$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- RemoveFoldForNodeAtLine: ALine:=', ALine, ' ANode.StartLine=', ANode.StartLine]);{$ENDIF} OnlyNested := ALine >= ANode.StartLine + ANode.FullCount; // The cfCollapsed line is one line before the fold Result := ANode.StartLine-1; // Return the cfcollapsed that was unfolded @@ -1764,6 +1766,7 @@ begin // ftopline is not a folded line // so node.FoldedBefore(next node after ftopl) does apply tpos := fTopLine + node.FoldedBefore; + {$IFDEF SYNFOLDDEBUG}debugln(['FOLD-- CalculateMaps fTopLine:=', fTopLine, ' tpos=',tpos]);{$ENDIF} cnt := fLines.Count; for i := 0 to fLinesInWindow do begin if tpos > cnt then begin @@ -2236,12 +2239,16 @@ var Procedure DoRemoveNode(var theNode: TSynTextFoldAVLNode); var tmpnode: TSynTextFoldAVLNode; + l: Integer; begin Result := True; tmpnode := theNode.Prev; + l := theNode.StartLine; doFoldTree.RemoveFoldForNodeAtLine(theNode, -1); // Don't touch any nested node if tmpnode.IsInFold then theNode := tmpnode.Next else theNode := doFoldTree.FindFirstFold; + if Assigned(fOnFoldChanged) then + fOnFoldChanged(l); end; var FldLine, FldIndex, FldLen, FldCol: Integer; @@ -2318,6 +2325,7 @@ var var node, tmpnode: TSynTextFoldAVLNode; begin + {$IFDEF SYNFOLDDEBUG}debugln(['>>FOLD-- FixFolding: Start=', AStart, ' AMinEnd=',AMinEnd]);{$ENDIF} Result := false; if fLockCount > 0 then begin fNeedCaretCheck := true; // We may be here as a result of lines deleted/inserted @@ -2353,6 +2361,7 @@ begin Result := DoFixFolding(AStart, AMinEnd, 0, aFoldTree, node); CalculateMaps; + {$IFDEF SYNFOLDDEBUG}debugln(['<