diff --git a/BeefLibs/Beefy2D/src/theme/dark/DarkTabbedView.bf b/BeefLibs/Beefy2D/src/theme/dark/DarkTabbedView.bf index 2111f472..7e43279b 100644 --- a/BeefLibs/Beefy2D/src/theme/dark/DarkTabbedView.bf +++ b/BeefLibs/Beefy2D/src/theme/dark/DarkTabbedView.bf @@ -257,16 +257,17 @@ namespace Beefy.theme.dark mTabbedView.mAutoClose = !mTabbedView.mAutoClose; }); - menuItem = menu.AddItem("Close"); - menuItem.mOnMenuItemSelected.Add(new (evt) => - { - let prevAutoClose = mTabbedView.mAutoClose; - mTabbedView.mAutoClose = true; - var tabs = scope List(); - for (var tab in mTabbedView.mTabs) - tabs.Add(tab); + void CloseTabs(bool autoClose, bool closeCurrent) + { + let prevAutoClose = mTabbedView.mAutoClose; + mTabbedView.mAutoClose = autoClose; + var tabs = scope List(); + for (var tab in mTabbedView.mTabs) + tabs.Add(tab); - if (tabs.IsEmpty) + if (tabs.IsEmpty) + { + if (autoClose) { if (var dockingFrame = mTabbedView.mParent as DockingFrame) { @@ -274,12 +275,35 @@ namespace Beefy.theme.dark BFApp.sApp.DeferDelete(mTabbedView); } } - else + } + else + { + for (var tab in tabs) { - for (var tab in tabs) - tab.mCloseClickedEvent(); + if ((!closeCurrent) && (tab.mIsActive)) + continue; + tab.mCloseClickedEvent(); } - mTabbedView.mAutoClose = prevAutoClose; + } + mTabbedView.mAutoClose = prevAutoClose; + } + + menuItem = menu.AddItem("Close"); + menuItem.mOnMenuItemSelected.Add(new (evt) => + { + CloseTabs(true, true); + }); + + menuItem = menu.AddItem("Close Tabs"); + menuItem.mOnMenuItemSelected.Add(new (evt) => + { + CloseTabs(false, true); + }); + + menuItem = menu.AddItem("Close Tabs Except Current"); + menuItem.mOnMenuItemSelected.Add(new (evt) => + { + CloseTabs(false, false); }); menu.AddItem(); diff --git a/IDE/src/Commands.bf b/IDE/src/Commands.bf index e6b03603..73f5534e 100644 --- a/IDE/src/Commands.bf +++ b/IDE/src/Commands.bf @@ -188,8 +188,9 @@ namespace IDE Add("Cancel Build", new => gApp.[Friend]CancelBuild); Add("Clean Beef", new => gApp.Cmd_CleanBeef); Add("Clean", new => gApp.Cmd_Clean); - Add("Close All Windows", new () => { gApp.[Friend]TryCloseAllDocuments(); }); - Add("Close Window", new () => { gApp.[Friend]TryCloseCurrentDocument(); }); + Add("Close All Panels", new () => { gApp.[Friend]TryCloseAllDocuments(true); }); + Add("Close All Panels Except", new () => { gApp.[Friend]TryCloseAllDocuments(false); }); + Add("Close Panel", new () => { gApp.[Friend]TryCloseCurrentDocument(); }); Add("Close Workspace", new => gApp.[Friend]Cmd_CloseWorkspaceAndSetupNew); Add("Comment Selection", new => gApp.[Friend]CommentSelection); Add("Compile File", new => gApp.Cmd_CompileFile); diff --git a/IDE/src/IDEApp.bf b/IDE/src/IDEApp.bf index db94fede..831cff7a 100644 --- a/IDE/src/IDEApp.bf +++ b/IDE/src/IDEApp.bf @@ -5342,8 +5342,9 @@ namespace IDE ////////// mWindowMenu = root.AddMenuItem("&Window"); - AddMenuItem(mWindowMenu, "&Close", "Close Window", new => UpdateMenuItem_HasActivePanel); - AddMenuItem(mWindowMenu, "&Close All", "Close All Windows"); + AddMenuItem(mWindowMenu, "&Close", "Close Panel", new => UpdateMenuItem_HasActivePanel); + AddMenuItem(mWindowMenu, "&Close All", "Close All Panels"); + AddMenuItem(mWindowMenu, "Close All Except Current", "Close All Panels Except"); AddMenuItem(mWindowMenu, "&New View into File", "View New", new => UpdateMenuItem_HasActiveDocument); AddMenuItem(mWindowMenu, "&Split View", "View Split", new => UpdateMenuItem_HasActiveDocument); @@ -6484,15 +6485,20 @@ namespace IDE CloseDocument(activePanel); } - void TryCloseAllDocuments() + void TryCloseAllDocuments(bool closeCurrent) { var docPanels = scope List(); + Widget skipDocumentPanel = null; + if (!closeCurrent) + skipDocumentPanel = GetActiveDocumentPanel(); + WithTabs(scope [&] (tab) => { if ((tab.mContent is SourceViewPanel) || (tab.mTabbedView.mIsFillWidget)) - { - docPanels.Add(tab.mContent); + { + if (tab.mContent != skipDocumentPanel) + docPanels.Add(tab.mContent); } }); diff --git a/IDE/src/Settings.bf b/IDE/src/Settings.bf index 3392c4df..6b36d769 100644 --- a/IDE/src/Settings.bf +++ b/IDE/src/Settings.bf @@ -670,7 +670,7 @@ namespace IDE Add("Breakpoint Toggle Thread", "Shift+F9"); Add("Build Solution", "F7"); Add("Cancel Build", "Ctrl+Break"); - Add("Close Window", "Ctrl+W"); + Add("Close Panel", "Ctrl+W"); Add("Compile File", "Ctrl+F7"); Add("Comment Selection", "Ctrl+K, Ctrl+C"); Add("Duplicate Line", "Ctrl+D");