From 98a03d5d46a739f29cf5d3e296e62e920a604258 Mon Sep 17 00:00:00 2001 From: Chernyavsky Andrey Date: Tue, 22 Nov 2022 01:24:49 +0500 Subject: [PATCH] Feature: Pinned tabs --- .../Beefy2D/src/theme/dark/DarkTabbedView.bf | 23 +++++-- BeefLibs/Beefy2D/src/theme/dark/DarkTheme.bf | 2 + BeefLibs/Beefy2D/src/widgets/TabbedView.bf | 58 +++++++++++++++++- IDE/dist/images/DarkUI.png | Bin 30668 -> 30747 bytes IDE/dist/images/DarkUI.psd | Bin 394818 -> 394360 bytes IDE/dist/images/DarkUI_2.png | Bin 48519 -> 48608 bytes IDE/dist/images/DarkUI_4.png | Bin 79878 -> 79990 bytes IDE/src/IDEApp.bf | 39 ++++++++++-- 8 files changed, 112 insertions(+), 10 deletions(-) diff --git a/BeefLibs/Beefy2D/src/theme/dark/DarkTabbedView.bf b/BeefLibs/Beefy2D/src/theme/dark/DarkTabbedView.bf index 5f1dd96e..73c5a999 100644 --- a/BeefLibs/Beefy2D/src/theme/dark/DarkTabbedView.bf +++ b/BeefLibs/Beefy2D/src/theme/dark/DarkTabbedView.bf @@ -27,7 +27,13 @@ namespace Beefy.theme.dark g.Draw(DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.CloseOver), GS!(-4), GS!(-4)); } else - g.Draw(DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Close), GS!(-4), GS!(-4)); + { + var tabButton = mParent as TabButton; + if (tabButton.mIsPinned == true) + g.Draw(DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.PinnedTab), GS!(-5), GS!(-5)); + else + g.Draw(DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Close), GS!(-4), GS!(-4)); + } } public override void MouseClicked(float x, float y, float origX, float origY, int32 btn) @@ -260,19 +266,25 @@ namespace Beefy.theme.dark menuItem = menu.AddItem("Close"); menuItem.mOnMenuItemSelected.Add(new (evt) => { - mTabbedView.CloseTabs(true, true); + mTabbedView.CloseTabs(true, true, true); }); menuItem = menu.AddItem("Close Tabs"); menuItem.mOnMenuItemSelected.Add(new (evt) => { - mTabbedView.CloseTabs(false, true); + mTabbedView.CloseTabs(false, true, true); }); menuItem = menu.AddItem("Close Tabs Except Current"); menuItem.mOnMenuItemSelected.Add(new (evt) => { - mTabbedView.CloseTabs(false, false); + mTabbedView.CloseTabs(false, false, true); + }); + + menuItem = menu.AddItem("Close All Except Pinned"); + menuItem.mOnMenuItemSelected.Add(new (menu) => + { + mTabbedView.CloseTabs(false, true, false); }); menu.AddItem(); @@ -280,6 +292,9 @@ namespace Beefy.theme.dark for (var tab in mTabbedView.mTabs) { menuItem = menu.AddItem(tab.mLabel); + if (tab.mIsPinned) + menuItem.mIconImage = DarkTheme.sDarkTheme.GetImage(.PinnedTab); + menuItem.mOnMenuItemSelected.Add(new (selMenuItem) => { TabbedView.TabButton activateTab = tab; diff --git a/BeefLibs/Beefy2D/src/theme/dark/DarkTheme.bf b/BeefLibs/Beefy2D/src/theme/dark/DarkTheme.bf index 3c41d7f0..eb56ec8e 100644 --- a/BeefLibs/Beefy2D/src/theme/dark/DarkTheme.bf +++ b/BeefLibs/Beefy2D/src/theme/dark/DarkTheme.bf @@ -191,6 +191,8 @@ namespace Beefy.theme.dark PrevBookmarkInFolder, NextBookmarkInFolder, + PinnedTab, + COUNT }; diff --git a/BeefLibs/Beefy2D/src/widgets/TabbedView.bf b/BeefLibs/Beefy2D/src/widgets/TabbedView.bf index 1b7de3be..77bcc848 100644 --- a/BeefLibs/Beefy2D/src/widgets/TabbedView.bf +++ b/BeefLibs/Beefy2D/src/widgets/TabbedView.bf @@ -12,6 +12,7 @@ namespace Beefy.widgets public class TabButton : Widget, IDockable, IDragInterface { public bool mIsActive; + public bool mIsPinned; public String mLabel ~ delete _; public TabbedView mTabbedView; public WidgetWindow mNewDraggingWindow; @@ -159,6 +160,7 @@ namespace Beefy.widgets public void DragEnd() { //mWidgetWindow.mMouseLeftWindowDelegate.Remove(scope => MouseLeftWindow, true); + AdjustPinnedState(); if ((mSrcDraggingWindow != null) && (mSrcDraggingWindow.mCaptureWidget != null)) mSrcDraggingWindow.ReleaseMouseCaptures(); @@ -175,6 +177,25 @@ namespace Beefy.widgets mSrcDraggingWindow = null; } + public void AdjustPinnedState() + { + // Adjusts Tab.mIsPinned state based on neighbouring tabs + bool prevIsPinned = true; + bool nextIsPinned = false; + + int position = mTabbedView.mTabs.IndexOf(this); + + if (position - 1 >= 0) + prevIsPinned = mTabbedView.mTabs[position - 1].mIsPinned; + + if (position + 1 < mTabbedView.mTabs.Count) + nextIsPinned = mTabbedView.mTabs[position + 1].mIsPinned; + + mIsPinned = (prevIsPinned == nextIsPinned) + ? prevIsPinned + : mIsPinned; + } + public void MouseDrag(float x, float y, float dX, float dY) { mTabbedView.mParentDockingFrame?.GetRootDockingFrame().ShowDragTarget(this); @@ -309,6 +330,7 @@ namespace Beefy.widgets mTabbedView.RemoveTab(this, false); tabbedView.AddTab(this, tabbedView.GetInsertPositionFromCursor()); Activate(); + AdjustPinnedState(); } } else @@ -391,7 +413,7 @@ namespace Beefy.widgets return ThemeFactory.mDefault.CreateTabbedView(sharedData); } - public void CloseTabs(bool autoClose, bool closeCurrent) + public void CloseTabs(bool autoClose, bool closeCurrent, bool closePinned) { let prevAutoClose = mAutoClose; mAutoClose = autoClose; @@ -414,8 +436,14 @@ namespace Beefy.widgets { for (var tab in tabs) { + // Close all except active tab if ((!closeCurrent) && (tab.mIsActive)) continue; + + // Close all except pinned tabs + if (closePinned == false && tab.mIsPinned == true) + continue; + tab.mCloseClickedEvent(); } } @@ -570,6 +598,7 @@ namespace Beefy.widgets RemoveTab(tab, false); tabbedView.AddTab(tab, tabbedView.GetInsertPositionFromCursor()); tab.Activate(); + tab.AdjustPinnedState(); } mParentDockingFrame.RemoveDockedWidget(this); @@ -603,5 +632,32 @@ namespace Beefy.widgets if (tab != null) tab.ResizeContent(); } + + public void TogglePinned(TabButton tabButton) + { + // Toggles 'mIsPinned' of the tab button + // and adjusts its position in TabbedView. + + tabButton.mIsPinned = !tabButton.mIsPinned; + + // Remove target tabButton from the tabs + mTabs.Remove(tabButton); + + // Find index of right-most non-pinned tab + int index = 0; + for (index = 0; index < mTabs.Count; index++) + { + if (mTabs[index].mIsPinned == false) + break; + } + + // Re-insert target tab button + if (index == 0) + mTabs.AddFront(tabButton); + else + mTabs.Insert(index, tabButton); + + RehupSize(); + } } } diff --git a/IDE/dist/images/DarkUI.png b/IDE/dist/images/DarkUI.png index 25e31e85faf3c255196fe979d281e82886c8f0c7..67a004365ed0ce08e9655f828d500c428541aae4 100644 GIT binary patch delta 12029 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 WuygtejFt@b4p}KBP}OJS;Qs-jNyfGS delta 11965 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 OOc#|AnRrp?-}ArW-kU}M diff --git a/IDE/dist/images/DarkUI_2.png b/IDE/dist/images/DarkUI_2.png index c30b7fd5f96ead00c3d1646c07fbda90f2075530..e8309267b272154cdeca176ba5f2b345daaa1198 100644 GIT binary patch delta 10987 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 delta 1577 zcmezNfu-#OOT!k%1qzIT+ZQS@#t7ES-r14slE@%7(Ups1&a63NbA;B+4q^W;vb!aR z`{t}YCp7o5c&LSc)Vy&p!K16@&pzqtlQiskYkwO4VPpV;OM(p`ih`Q-YX1M5J}Lfzz#9gz4pc4mAT}%-Hk)?bDd*pReCu zZ1<0^f4Qeli#?`(v(f&Q+ozwe_xW#B^XB)F(ywFbj`2#DHe&O+WqQ$Itqo zJ70bctf_zfTt9*1xbIwrujl%ApZ1-%P=5Z#_cMP4Z~bbroqf%ISJ~XU&*fn*JKx8D z1_jfDiFiy81Dc*SS9WV(KW|B$%j9$YH(q{xczJs8`JcOf`26|&=g^zomQb$$hn(T>rypZocLH(sdgaB<`~DUs_uE?%bEUUq8>kWZ3uDcLsFxBlj|^MC}r8sqLIA zzxKKReqaCi!!NU6tm)WP8WHkbwDes5`?(5RE06MZ?YvtW_vcsX#n)GBe*Z1L{QCX# z?QiyE%~hzLEe|sM^Cq|@_1J7#vi20n52eUG2~xoDM? z^|>qR`S$PU`d4iGmvsEdtw-+-x4$;swr@-4=jv+9?WGq&u2|V;ZLmv#GT1%8|a#dqC%ZExVQT_y6go&*#?Gfpoj4<2NOL zdAr|)7jL`Qw`}WY<=cPc?*1$^dBzLW?7)vFkJMkac32eUe*A0IT$%pIKi>WR ze$Vhg^3ks%*W*+6`pyIg*9OtD29PU|GdVoBtuAjklK$_y6|+=GcUU4C$MAdmtUvPLGtF_4e&U^8bw=;7r3c& z=&sps_iTIa#>J|;V)V3YC)XN*LcJjdPwoKby_vg>7c9G`xnbWYt9n~GJG*DqHeP?e zuRs0kb#mS9ef7!du7CFa`g(8wGxN{vphS4#03WnWk!3`W&2){_>!Pd-nMe7i6w0VS zkG76__HWNxW3V%l@g(Mpj7%E>Hx}1Fs{d0^9pLqI`=?67FaMtJz5agh;X~jc=sSzs vR(E)MkW~OW5E#kuVh_`am^levX#Wvqubf()qw;mmbC4;Xu6{1-oD!M { - tabbedView.CloseTabs(false, true); + tabbedView.CloseTabs(false, true, true); }); } @@ -1750,6 +1750,7 @@ namespace IDE data.Add("TabLabel", tabWidget.mLabel); data.Add("TabWidth", tabWidget.mWantWidth / DarkTheme.sScale); + data.Add("TabIsPinned", tabWidget.mIsPinned); if (var watchPanel = tabWidget.mContent as WatchPanel) { @@ -3186,6 +3187,7 @@ namespace IDE var newTabButton = new SourceViewTabButton(); newTabButton.Label = ""; data.GetString("TabLabel", newTabButton.mLabel); + newTabButton.mIsPinned = data.GetBool("TabIsPinned"); newTabButton.mOwnsContent = panel.mAutoDelete; newTabButton.mTabWidthOffset = panel.TabWidthOffset; //newTabButton.mWantWidth = (float)Math.Round(data.GetFloat("TabWidth") * DarkTheme.sScale); @@ -6251,9 +6253,22 @@ namespace IDE int GetTabInsertIndex(TabbedView tabs) { if (mSettings.mUISettings.mInsertNewTabs == .RightOfExistingTabs) + { return tabs.mTabs.Count; - else - return 0; + } + + // Find right-most non-pinned tab + // after which we will put our new tab + int index = 0; + for (index = 0; index < tabs.mTabs.Count; index++) + { + if (tabs.mTabs[index].mIsPinned == false) + { + break; + } + } + + return index; } public class SourceViewTabButton : DarkTabbedView.DarkTabButton @@ -6347,7 +6362,16 @@ namespace IDE Menu menu = new Menu(); if (var sourceViewPanel = mContent as SourceViewPanel) { - var item = menu.AddItem("Copy Full Path"); + var item = menu.AddItem(this.mIsPinned ? "Unpin this tab" : "Pin this tab"); + item.mOnMenuItemSelected.Add(new (menu) => + { + if (mIsRightTab) + IDEApp.sApp.MakeTabPermanent(this); + + mTabbedView.TogglePinned(this); + }); + + item = menu.AddItem("Copy Full Path"); item.mOnMenuItemSelected.Add(new (menu) => { gApp.SetClipboardText(sourceViewPanel.mFilePath); @@ -6378,7 +6402,12 @@ namespace IDE item = menu.AddItem("Close All Except This"); item.mOnMenuItemSelected.Add(new (menu) => { - mTabbedView.CloseTabs(false, false); + mTabbedView.CloseTabs(false, false, true); + }); + item = menu.AddItem("Close All Except Pinned"); + item.mOnMenuItemSelected.Add(new (menu) => + { + mTabbedView.CloseTabs(false, true, false); }); }