diff --git a/IDE/src/ui/SourceEditWidgetContent.bf b/IDE/src/ui/SourceEditWidgetContent.bf index fdbd372f..0d445981 100644 --- a/IDE/src/ui/SourceEditWidgetContent.bf +++ b/IDE/src/ui/SourceEditWidgetContent.bf @@ -1,3 +1,4 @@ +#pragma warning disable 168 using System; using System.Collections; using System.Text; @@ -5179,6 +5180,33 @@ namespace IDE.ui } } + void SetCollapseLineOpen(int line, bool wantOpen, bool includeChildren) + { + List collapseOpenList = scope .(); + CollapseEntry* parentCollapse = null; + + for (var collapse in mOrderedCollapseEntries) + { + if (parentCollapse == null) + { + if (collapse.mAnchorLine == line) + { + parentCollapse = collapse; + collapseOpenList.Add((.)@collapse.Index); + if (!includeChildren) + break; + } + } + else if ((collapse.mAnchorLine >= parentCollapse.mStartLine) && (collapse.mAnchorLine < parentCollapse.mEndLine)) + { + collapseOpenList.Add((.)@collapse.Index); + } + } + + for (int32 collapseIdx in collapseOpenList) + SetCollapseOpen(collapseIdx, wantOpen); + } + public override void MouseDown(float x, float y, int32 btn, int32 btnCount) { int line = GetLineAt(y); @@ -5191,10 +5219,13 @@ namespace IDE.ui embed.MouseDown(GetEmbedRect(line, embed), x, y, btn, btnCount); if (btn == 0) { - if (btnCount % 2 == 0) + bool hasCtrl = mWidgetWindow.IsKeyDown(.Control); + if ((btnCount % 2 == 0) || (hasCtrl)) { if (var collapseSummary = embed as SourceEditWidgetContent.CollapseSummary) - SetCollapseOpen(collapseSummary.mCollapseIndex, true); + { + SetCollapseLineOpen(line, true, hasCtrl); + } else if (var emitEmbed = embed as EmitEmbed) { emitEmbed.mIsOpen = !emitEmbed.mIsOpen; @@ -5202,6 +5233,28 @@ namespace IDE.ui } } } + else if (btn == 1) + { + float useX = x; + float useY = y; + + Menu menu = new Menu(); + + var menuItem = menu.AddItem("Expand"); + menuItem.mOnMenuItemSelected.Add(new (evt) => + { + SetCollapseLineOpen(line, true, false); + }); + + menuItem = menu.AddItem("Expand All|Ctrl+Click"); + menuItem.mOnMenuItemSelected.Add(new (evt) => + { + SetCollapseLineOpen(line, true, true); + }); + + MenuWidget menuWidget = DarkTheme.sDarkTheme.CreateMenuWidget(menu); + menuWidget.Init(this, useX, useY); + } return; } } @@ -6547,7 +6600,6 @@ namespace IDE.ui } } - public void SetCollapseOpen(int collapseIdx, bool wantOpen, bool immediate = false, bool keepCursorVisible = false) { var entry = mOrderedCollapseEntries[collapseIdx]; diff --git a/IDE/src/ui/SourceViewPanel.bf b/IDE/src/ui/SourceViewPanel.bf index f7faf018..b41134f0 100644 --- a/IDE/src/ui/SourceViewPanel.bf +++ b/IDE/src/ui/SourceViewPanel.bf @@ -7364,7 +7364,13 @@ namespace IDE.ui int collapseIndex = collapseVal & CollapseRegionView.cIdMask; var entry = ewc.mOrderedCollapseEntries[collapseIndex]; - ewc.SetCollapseOpen(collapseIndex, !entry.mIsOpen); + + if ((mWidgetWindow.IsKeyDown(.Control))) + { + ewc.[Friend]SetCollapseLineOpen(lineClick, !entry.mIsOpen, true); + } + else + ewc.SetCollapseOpen(collapseIndex, !entry.mIsOpen); } return; }