From fa3b69e0c732e13bfffcc2a543b759ad9c304203 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 1 Mar 2022 10:49:12 -0800 Subject: [PATCH] Fixes collapse case where anchorLine==startLine, and anchorLine==endLine --- IDE/src/ui/SourceEditWidgetContent.bf | 47 ++++++++++++++++++++------- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/IDE/src/ui/SourceEditWidgetContent.bf b/IDE/src/ui/SourceEditWidgetContent.bf index a6148989..2c492952 100644 --- a/IDE/src/ui/SourceEditWidgetContent.bf +++ b/IDE/src/ui/SourceEditWidgetContent.bf @@ -216,6 +216,21 @@ namespace IDE.ui public int32 mParseRevision; public int32 mTextRevision; public bool mDeleted; + + public void FixAfterUpdate() mut + { + if (mKind == .Region) + mStartLine++; + + if (mAnchorLine == mEndLine) + { + mDeleted = true; + } + else if (mAnchorLine == mStartLine) + { + mStartLine++; + } + } } public class Data : DarkEditWidgetContent.Data @@ -5194,8 +5209,14 @@ namespace IDE.ui for (var entry in mOrderedCollapseEntries) { - if (entry.mKind == .Region) - entry.mStartLine++; + entry.FixAfterUpdate(); + + if (entry.mDeleted) + { + if (mEmbeds.GetAndRemove(entry.mAnchorIdx) case .Ok(let val)) + delete val.value; + continue; + } if ((entry.mPrevAnchorLine != -1) && (entry.mPrevAnchorLine != entry.mAnchorLine)) { @@ -5600,6 +5621,18 @@ namespace IDE.ui for (var entry in mOrderedCollapseEntries) { + int32 prevAnchorLine = entry.mAnchorLine; + + if (!entry.mDeleted) + { + failed = false; + Update(entry.mAnchorId, ref entry.mAnchorIdx, ref entry.mAnchorLine); + Update(entry.mStartId, ref entry.mStartIdx, ref entry.mStartLine); + Update(entry.mEndId, ref entry.mEndIdx, ref entry.mEndLine); + + entry.FixAfterUpdate(); + } + if (entry.mDeleted) { if (mEmbeds.GetAndRemove(entry.mAnchorIdx) case .Ok(let val)) @@ -5607,16 +5640,6 @@ namespace IDE.ui continue; } - int32 prevAnchorLine = entry.mAnchorLine; - - failed = false; - Update(entry.mAnchorId, ref entry.mAnchorIdx, ref entry.mAnchorLine); - Update(entry.mStartId, ref entry.mStartIdx, ref entry.mStartLine); - Update(entry.mEndId, ref entry.mEndIdx, ref entry.mEndLine); - - if (entry.mKind == .Region) - entry.mStartLine++; - if (failed) needsRefresh = true;