From 09c31d5db1cb16cd2973dbf03a189d27c45bad4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Thu, 9 Jun 2022 18:23:57 +0200 Subject: [PATCH] Added buttons to BookmarksPanel --- .../Beefy2D/src/theme/dark/DarkIconButton.bf | 96 +++++++++++- BeefLibs/Beefy2D/src/theme/dark/DarkTheme.bf | 5 + IDE/dist/images/DarkUI.png | Bin 28075 -> 28531 bytes IDE/dist/images/DarkUI.psd | Bin 149601 -> 155353 bytes IDE/dist/images/DarkUI_2.png | Bin 43148 -> 43785 bytes IDE/dist/images/DarkUI_4.png | Bin 67805 -> 68520 bytes IDE/src/IDEApp.bf | 1 + IDE/src/ui/BookmarksPanel.bf | 139 ++++++++++++------ 8 files changed, 196 insertions(+), 45 deletions(-) diff --git a/BeefLibs/Beefy2D/src/theme/dark/DarkIconButton.bf b/BeefLibs/Beefy2D/src/theme/dark/DarkIconButton.bf index 401b5894..2aec13d9 100644 --- a/BeefLibs/Beefy2D/src/theme/dark/DarkIconButton.bf +++ b/BeefLibs/Beefy2D/src/theme/dark/DarkIconButton.bf @@ -3,19 +3,107 @@ using System.Collections; using System.Text; using Beefy.widgets; using Beefy.gfx; +using Beefy.geom; namespace Beefy.theme.dark { + public struct Padding + { + public float Left; + public float Right; + public float Top; + public float Bottom; + + public this(float padding) + { + Left = padding; + Right = padding; + Top = padding; + Bottom = padding; + } + + public this(float leftRight, float topBottom) + { + Left = leftRight; + Right = leftRight; + Top = topBottom; + Bottom = topBottom; + } + + public this(float left, float right, float top, float bottom) + { + Left = left; + Right = right; + Top = top; + Bottom = bottom; + } + } + public class DarkIconButton : ButtonWidget { - public Image mIcon; - public float mIconOfsX; - public float mIconOfsY; + private Image mIcon; + + private Padding mPadding = .(4); + + public Image Icon + { + get => mIcon; + set + { + if (mIcon == value) + return; + + mIcon = value; + + if (mIcon != null) + UpdateSize(); + } + } + + public Padding Padding + { + get => mPadding; + set + { + if (mPadding == value) + return; + + mPadding = value; + + UpdateSize(); + } + } + + /// Calculates the size of the button. + private void UpdateSize() + { + float width = mPadding.Left + mIcon.mWidth + mPadding.Right; + float height = mPadding.Top + mIcon.mHeight + mPadding.Bottom; + + Resize(0, 0, width, height); + } public override void Draw(Graphics g) { base.Draw(g); - g.Draw(mIcon, mIconOfsX, mIconOfsY); + + bool drawDown = ((mMouseDown && mMouseOver) || (mMouseFlags.HasFlag(MouseFlag.Kbd))); + + Image texture = + mDisabled ? DarkTheme.sDarkTheme.GetImage(.BtnUp) : + drawDown ? DarkTheme.sDarkTheme.GetImage(.BtnDown) : + mMouseOver ? DarkTheme.sDarkTheme.GetImage(.BtnOver) : + DarkTheme.sDarkTheme.GetImage(.BtnUp); + + g.DrawBox(texture, 0, 0, mWidth, mHeight); + + if ((mHasFocus) && (!mDisabled)) + { + using (g.PushColor(DarkTheme.COLOR_SELECTED_OUTLINE)) + g.DrawBox(DarkTheme.sDarkTheme.GetImage(.Outline), 0, 0, mWidth, mHeight); + } + + g.Draw(mIcon, mPadding.Left, mPadding.Top); } } } diff --git a/BeefLibs/Beefy2D/src/theme/dark/DarkTheme.bf b/BeefLibs/Beefy2D/src/theme/dark/DarkTheme.bf index c0e2bf7e..ea915594 100644 --- a/BeefLibs/Beefy2D/src/theme/dark/DarkTheme.bf +++ b/BeefLibs/Beefy2D/src/theme/dark/DarkTheme.bf @@ -185,6 +185,11 @@ namespace Beefy.theme.dark CollapseOpened, IconBookmarkDisabled, + NewBookmarkFolder, + PrevBookmark, + NextBookmark, + PrevBookmarkInFolder, + NextBookmarkInFolder, COUNT }; diff --git a/IDE/dist/images/DarkUI.png b/IDE/dist/images/DarkUI.png index 320ba4dd2975e6f854fe915494b4dd37344113db..524a257998f9fca656b8145e62a6db708c86cdd9 100644 GIT binary patch delta 9769 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 delta 9309 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 diff --git a/IDE/dist/images/DarkUI.psd b/IDE/dist/images/DarkUI.psd index d9519b9800df321c23135aec605e28c754ae04df..abdf27edd0309466a7e9bd9357be91c83c405380 100644 GIT binary patch delta 6836 zcmcgwTWnNS6y0}PYTLwu3bmqOK|wGYd>{d1lvGp12cpIgO$d-s373|VrV4*2#y`z9 z#!e*h%SXH#ky#z*yP=yRAmujAV1aUU~tOF?vQ&U^2D_F3ob zefFH6UhVq+^R8Dv>l{Bx&iHY9^5ZWzFTea9BI-r@2_6(gE7#%%2 za&YYE;OOw7p|Sk~he5D?VE3cL&mB90>McksX%7w22^yeLd`D@74$>IPL9~YH5XQ!6 zKSr7LEu>XQKGJGxmlEX$B%+Pvs659x&v0yX;=@&4tjA-`dJJB)9)ooF)2ZbqEyL_C4?3DOCp!xyNNvr#B~HY$9~Rz>)XGYS9JCh^gyCxWSeU{~@G?PT&S zoKnZAUn#sLdCItpQDe*=M`FxIT41&`#RmVCVrjiJl1~A#wL~v&T2t7x#(BT%)HfTP zH$(?@0KN`d)-H)Zsv}iR=}2xm7}i7`t%$fUSQ3@rOtq$AMi%BWSr>KEWv3qB$LulHwce#t8$0d?}qlF;DN@h+|{78ihR@;LD%x{isu$dl4jS&_P;y6Q(a20)K~ zQ>QlaJgR#+6h%TW>Z%KJNO+o`88EKo@`3RrBEDb9 ze&|gK%R^Y6h2$GKAA&=e=M`q7Z&-83Ku%M5mM; zy2`Nh04-Ly2LY6IV0{RRRzv+9&6R`FT%Cljl!6cq&Zh&Y8R$F=LL#(v83sfZ&(R&G z8V2x!HJS5tZ`4?FzcAcOW{BuJ`QY-|RSL$fFhCvd3dxR`RtcRoB)XZ^9jc8=-h-qculyp)uupaLZ?eP}0w^1!PDPafzukm-3`<3j6-lVWRglUfl zcJ_D>#vV_#*yHK(2ChX_=meW0n0WJUr+0huf>G?ZNu1gh3;Wz$9C}o@i#+%AspwRg9m#Bg` zt%4A+9!#64Eu=~?hs5KjG2W?s2%;UY46bT019OOjI@IC&0J5S#qv_e{AXTUxdxvj6 zC`U{P&Tt8U%L!-}-lqnaxuBS*z>I0Y3I7d(=>%5}!4~3FFQggpRKZh>cqlIoe0lw&_$4caIOv{$$MfW#~@tz~j;73KDY@%y~W zdVCRBLCwo;j!ZPd*2h#)T~FTr(<8i+sDBRGTx|&lW(l3VZ|^mI3yMq zfbP|C32>|&*Uv8oLU2+zmM#mmi_)uNXF0Iu^85mTV-+D!ygfKQ>OTaZA}Ag?9(#M4 zTTZW|Ol28j-tRzpCp&O(HC=R?6xUGVx+9N!e|!CF=bFMR?>c9;E!}$jg!TBa9-k$( zupYmK_4u$JMc=}DeCf-1zea8FX~yatFK-OU&(Gpks`->(Q2b2>gi*>P8BXkBo{b2` zn4iH|6`aM0GigTnyBdO2D7f=%OBHkw?(iHS(>01XljgL@l;!x+ulj9y-`634-U;Pr zVx!Va=J_#qk&Cv-8QYtC*ET6KfE5Wr7lh1u?NL6%%!w$e6R0 z80BxQT|rE2OAU6_D8@v7Rvp+*WLOBS@Rz*Nt{MgCi#y^^*p&i>fl1gEM?2b*u!|h~ zJZhU7S7TT{3`+$@;P!L~7g?E^D$}lVf8Tg&#W3va+aI0v7hqp*!oFPCmz!ZXtQy)LqrEQlXZNtJsy5WKhX# zuE!l#RLZK{MXV}j#W{)_R!(G8xE&xS)2d?5mSU2(6~ts(Rkj$RqJflEK~R%bWeZUJ z39C||G+0$;(EI}3&*6x%Di>D8q$Y0W6~`@&T&7hOcCO0pyF;X7yeb|BE4YXMM#+za zEaP+H-YPCgnw&BHP&f5Ao#{?1x{9KkHFTARzwbhLzf8>RntZ@LZr$b=b@b6wP zLaW99@%fp<((3>GX$ncRSil_AJ&SDR80Y-Q!Iu93<|?bw delta 1411 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 b^`-DwynjlUpXP1>oQRt8LsXuU`J4X({($=Y delta 4573 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 delta 7802 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 diff --git a/IDE/src/IDEApp.bf b/IDE/src/IDEApp.bf index 5a86eeb0..86041ba4 100644 --- a/IDE/src/IDEApp.bf +++ b/IDE/src/IDEApp.bf @@ -809,6 +809,7 @@ namespace IDE dlg(mProfilePanel); dlg(mPropertiesPanel); dlg(mAutoCompletePanel); + dlg(mBookmarksPanel); } public override void ShutdownCompleted() diff --git a/IDE/src/ui/BookmarksPanel.bf b/IDE/src/ui/BookmarksPanel.bf index 9d6234f7..bb5190cf 100644 --- a/IDE/src/ui/BookmarksPanel.bf +++ b/IDE/src/ui/BookmarksPanel.bf @@ -6,6 +6,9 @@ using System.Collections; using Beefy.theme; using Beefy.events; using System.Diagnostics; +using Beefy.theme.dark; +using Beefy.gfx; +using Beefy.geom; namespace IDE.ui { @@ -63,35 +66,63 @@ namespace IDE.ui class BookmarksPanel : Panel { - public DarkButton mCreateBookmarkFolder; + public DarkIconButton mBtnCreateBookmarkFolder; + public DarkIconButton mBtnPrevBookmark; + public DarkIconButton mBtnNextBookmark; + public DarkIconButton mBtnPrevBookmarkInFolder; + public DarkIconButton mBtnNextBookmarkInFolder; - public BookmarksListView mBookmarksLV; + public BookmarksListView mBookmarksListView; public this() { - mCreateBookmarkFolder = new DarkButton(); - mCreateBookmarkFolder.Label = "New Folder"; - mCreateBookmarkFolder.mOnMouseClick.Add(new (args) => - { - gApp.mBookmarkManager.CreateFolder(); - }); - AddWidget(mCreateBookmarkFolder); + mBtnCreateBookmarkFolder = new DarkIconButton(); + mBtnCreateBookmarkFolder.Icon = DarkTheme.sDarkTheme.GetImage(.NewBookmarkFolder); + mBtnCreateBookmarkFolder.mOnMouseClick.Add(new (args) => gApp.mBookmarkManager.CreateFolder()); + AddWidget(mBtnCreateBookmarkFolder); - mBookmarksLV = new .(); - mBookmarksLV.mOnEditDone.Add(new => HandleEditDone); + float iconButtonWidth = mBtnCreateBookmarkFolder.Width; - mBookmarksLV.InitScrollbars(true, true); - mBookmarksLV.mLabelX = GS!(6); - mBookmarksLV.mOnItemMouseClicked.Add(new => ListViewItemMouseClicked); + mBtnPrevBookmark = new DarkIconButton(); + mBtnPrevBookmark.Icon = DarkTheme.sDarkTheme.GetImage(.PrevBookmark); + mBtnPrevBookmark.mOnMouseClick.Add(new (args) => gApp.Cmd_PrevBookmark()); + mBtnPrevBookmark.X = GS!(1) + iconButtonWidth; + AddWidget(mBtnPrevBookmark); - mBookmarksLV.AddColumn(200, "Bookmark"); - mBookmarksLV.AddColumn(400, "File"); - mBookmarksLV.AddColumn(120, "Line"); + mBtnNextBookmark = new DarkIconButton(); + mBtnNextBookmark.Icon = DarkTheme.sDarkTheme.GetImage(.NextBookmark); + mBtnNextBookmark.mOnMouseClick.Add(new (args) => gApp.Cmd_NextBookmark()); + mBtnNextBookmark.X = (GS!(1) + iconButtonWidth) * 2; + AddWidget(mBtnNextBookmark); - mBookmarksLV.mOnDragEnd.Add(new => BookmarksLV_OnDragEnd); - mBookmarksLV.mOnDragUpdate.Add(new => BookmarksLV_OnDragUpdate); + mBtnPrevBookmarkInFolder = new DarkIconButton(); + mBtnPrevBookmarkInFolder.Icon = DarkTheme.sDarkTheme.GetImage(.PrevBookmarkInFolder); + mBtnPrevBookmarkInFolder.mOnMouseClick.Add(new (args) => gApp.Cmd_PrevBookmarkInFolder()); + mBtnPrevBookmarkInFolder.X = (GS!(1) + iconButtonWidth) * 3; + AddWidget(mBtnPrevBookmarkInFolder); - mBookmarksLV.mOnItemMouseDown.Add(new (item, x, y, btnNum, btnCount) => + mBtnNextBookmarkInFolder = new DarkIconButton(); + mBtnNextBookmarkInFolder.Icon = DarkTheme.sDarkTheme.GetImage(.NextBookmarkInFolder); + mBtnNextBookmarkInFolder.mOnMouseClick.Add(new (args) => gApp.Cmd_NextBookmarkInFolder()); + mBtnNextBookmarkInFolder.X = (GS!(1) + iconButtonWidth) * 4; + AddWidget(mBtnNextBookmarkInFolder); + + + mBookmarksListView = new .(); + mBookmarksListView.mOnEditDone.Add(new => HandleEditDone); + + mBookmarksListView.InitScrollbars(true, true); + mBookmarksListView.mLabelX = GS!(6); + mBookmarksListView.mOnItemMouseClicked.Add(new => ListViewItemMouseClicked); + + mBookmarksListView.AddColumn(200, "Bookmark"); + mBookmarksListView.AddColumn(400, "File"); + mBookmarksListView.AddColumn(120, "Line"); + + mBookmarksListView.mOnDragEnd.Add(new => BookmarksLV_OnDragEnd); + mBookmarksListView.mOnDragUpdate.Add(new => BookmarksLV_OnDragUpdate); + + mBookmarksListView.mOnItemMouseDown.Add(new (item, x, y, btnNum, btnCount) => { if ((btnNum == 0) && (btnCount == 2)) { @@ -101,10 +132,10 @@ namespace IDE.ui ListViewItemMouseDown(item, x, y, btnNum, btnCount); }); - mBookmarksLV.mOnItemMouseClicked.Add(new => ListViewItemMouseClicked); - mBookmarksLV.mOnKeyDown.Add(new => BookmarksLV_OnKeyDown); + mBookmarksListView.mOnItemMouseClicked.Add(new => ListViewItemMouseClicked); + mBookmarksListView.mOnKeyDown.Add(new => BookmarksLV_OnKeyDown); - AddWidget(mBookmarksLV); + AddWidget(mBookmarksListView); } private void BookmarksLV_OnKeyDown(KeyDownEvent event) @@ -119,7 +150,15 @@ namespace IDE.ui public override void RehupScale(float oldScale, float newScale) { - mBookmarksLV.mOpenButtonX = GS!(4); + mBookmarksListView.mOpenButtonX = GS!(4); + + float iconButtonWidth = mBtnCreateBookmarkFolder.Width; + + mBtnPrevBookmark.X = GS!(1) + iconButtonWidth; + mBtnNextBookmark.X = (GS!(1) + iconButtonWidth) * 2; + mBtnPrevBookmarkInFolder.X = (GS!(1) + iconButtonWidth) * 3; + mBtnNextBookmarkInFolder.X = (GS!(1) + iconButtonWidth) * 4; + base.RehupScale(oldScale, newScale); } @@ -166,7 +205,7 @@ namespace IDE.ui return; List selectedItems = scope .(); - mBookmarksLV.GetRoot().WithSelectedItems(scope [&] (selectedItem) => + mBookmarksListView.GetRoot().WithSelectedItems(scope [&] (selectedItem) => { selectedItems.Add((BookmarksListViewItem)selectedItem); }); @@ -231,7 +270,7 @@ namespace IDE.ui /// Tries to rename the currently selected bookmark public void TryRenameItem() { - ListViewItem selectedItem = mBookmarksLV.GetRoot().FindFirstSelectedItem(); + ListViewItem selectedItem = mBookmarksListView.GetRoot().FindFirstSelectedItem(); RenameItem(selectedItem); } @@ -242,7 +281,7 @@ namespace IDE.ui editWidget.GetText(newValue); newValue.Trim(); - ListViewItem listViewItem = mBookmarksLV.mEditingItem; + ListViewItem listViewItem = mBookmarksListView.mEditingItem; if (var item = listViewItem as BookmarksListViewItem) { @@ -289,7 +328,7 @@ namespace IDE.ui anItem = menu.AddItem("Rename"); anItem.mOnMenuItemSelected.Add(new (item) => { - var selectedItem = mBookmarksLV.GetRoot().FindFirstSelectedItem(); + var selectedItem = mBookmarksListView.GetRoot().FindFirstSelectedItem(); if (selectedItem != null) RenameItem(selectedItem); }); @@ -320,7 +359,7 @@ namespace IDE.ui void EditListViewItem(ListViewItem listViewItem) { - mBookmarksLV.EditListViewItem(listViewItem); + mBookmarksListView.EditListViewItem(listViewItem); } void RenameItem(ListViewItem listViewItem) @@ -340,31 +379,48 @@ namespace IDE.ui { base.Resize(x, y, width, height); - float buttonWidth = GS!(140); - float buttonHeight = GS!(22); - mCreateBookmarkFolder.Resize(0, 0, buttonWidth, buttonHeight); + float buttonHeight = mBtnCreateBookmarkFolder.mHeight; - mBookmarksLV.Resize(0, buttonHeight, width, Math.Max(mHeight - buttonHeight, 0)); - } - - public void Clear() - { + mBookmarksListView.Resize(0, buttonHeight, width, Math.Max(mHeight - buttonHeight, 0)); } public bool mBookmarksDirty; - public override void Update() { if (mBookmarksDirty) UpdateBookmarks(); + ShowTooltip(mBtnCreateBookmarkFolder, "Create a new folder."); + ShowTooltip(mBtnPrevBookmark, "Move the cursor to previous bookmark."); + ShowTooltip(mBtnNextBookmark, "Move the cursor to next bookmark."); + ShowTooltip(mBtnPrevBookmarkInFolder, "Move the cursor to previous bookmark in the current folder."); + ShowTooltip(mBtnNextBookmarkInFolder, "Move the cursor to next bookmark in the current folder."); + base.Update(); } + public void Clear() + { + var root = mBookmarksListView.GetRoot(); + + root.Clear(); + + mBookmarksDirty = true; + } + + private void ShowTooltip(Widget widget, String text) + { + Point mousePoint; + if (DarkTooltipManager.CheckMouseover(widget, 20, out mousePoint)) + { + DarkTooltipManager.ShowTooltip(text, widget, mousePoint.x, mousePoint.y); + } + } + private void UpdateBookmarks() { - var root = mBookmarksLV.GetRoot(); + var root = mBookmarksListView.GetRoot(); root.Clear(); @@ -377,6 +433,7 @@ namespace IDE.ui if (!isRoot) { FolderItem = (BookmarksListViewItem)root.CreateChildItem(); + SetupListViewItemFolder(FolderItem, folder); } else @@ -447,14 +504,14 @@ namespace IDE.ui public override void KeyDown(KeyCode keyCode, bool isRepeat) { - mBookmarksLV.KeyDown(keyCode, isRepeat); + mBookmarksListView.KeyDown(keyCode, isRepeat); base.KeyDown(keyCode, isRepeat); } private void DeleteSelectedItems() { - var root = mBookmarksLV.GetRoot(); + var root = mBookmarksListView.GetRoot(); List selectedItems = scope List(); root.WithSelectedItems(scope (listViewItem) => {