mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-20 17:08:00 +02:00
Initial checkin
This commit is contained in:
parent
c74712dad9
commit
078564ac9e
3242 changed files with 1616395 additions and 0 deletions
150
IDE/src/ui/PanelHeader.bf
Normal file
150
IDE/src/ui/PanelHeader.bf
Normal file
|
@ -0,0 +1,150 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Beefy.gfx;
|
||||
using Beefy.theme.dark;
|
||||
using Beefy.widgets;
|
||||
using Beefy.geom;
|
||||
|
||||
namespace IDE.ui
|
||||
{
|
||||
public class PanelHeader : Widget
|
||||
{
|
||||
public List<DarkButton> mButtons = new List<DarkButton>() ~ delete _;
|
||||
public String mLabel ~ delete _;
|
||||
public String mTooltipText ~ delete _;
|
||||
public float mFlashPct;
|
||||
public int mBaseHeight = 32;
|
||||
public bool mButtonsOnBottom;
|
||||
|
||||
public String Label
|
||||
{
|
||||
get
|
||||
{
|
||||
return mLabel;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
String.NewOrSet!(mLabel, value);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Draw(Graphics g)
|
||||
{
|
||||
using (g.PushColor(0xFFF0BFA4))
|
||||
g.DrawBox(DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.VertScrollbarThumb), 0, 0, mWidth, mHeight);
|
||||
|
||||
g.SetFont(DarkTheme.sDarkTheme.mSmallFont);
|
||||
float y = GS!(6);
|
||||
using (g.PushColor(0xFFFFFFFF))
|
||||
{
|
||||
for (var str in mLabel.Split('\n'))
|
||||
{
|
||||
float maxTextLen = mWidth - GS!(12 + 12);
|
||||
if ((mButtons.Count > 0) && (!@str.HasMore))
|
||||
maxTextLen = mButtons[0].mX - GS!(12 + 2);
|
||||
|
||||
g.DrawString(scope String(str), GS!(12), y, FontAlign.Left, maxTextLen, FontOverflowMode.Ellipsis);
|
||||
y += g.mFont.GetLineSpacing();
|
||||
}
|
||||
}
|
||||
|
||||
if (mFlashPct > 0)
|
||||
{
|
||||
float showPct = Math.Max(0.0f, (Math.Sin(mFlashPct * Math.PI_f * 4))) * 0.25f;
|
||||
using (g.PushColor(Color.Get(0xFFFFFFFF, showPct)))
|
||||
g.FillRect(0, 0, mWidth, mHeight);
|
||||
}
|
||||
}
|
||||
|
||||
void ResizeComponents()
|
||||
{
|
||||
var font = DarkTheme.sDarkTheme.mSmallFont;
|
||||
float x;
|
||||
|
||||
x = mWidth - GS!(10);
|
||||
|
||||
for (int buttonIdx = mButtons.Count - 1; buttonIdx >= 0; buttonIdx--)
|
||||
{
|
||||
var button = mButtons[buttonIdx];
|
||||
|
||||
float width = font.GetWidth(button.mLabel) + GS!(24);
|
||||
x -= width;
|
||||
button.Resize(x, mHeight - GS!(28), width, GS!(22));
|
||||
x -= GS!(8);
|
||||
|
||||
button.mVisible = x >= 0;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Resize(float x, float y, float width, float height)
|
||||
{
|
||||
base.Resize(x, y, width, height);
|
||||
ResizeComponents();
|
||||
}
|
||||
|
||||
public ButtonWidget AddButton(String label)
|
||||
{
|
||||
DarkButton button = new DarkButton();
|
||||
button.Label = label;
|
||||
mButtons.Add(button);
|
||||
AddWidget(button);
|
||||
return button;
|
||||
}
|
||||
|
||||
public void RemoveButtons()
|
||||
{
|
||||
for (var button in mButtons)
|
||||
{
|
||||
RemoveWidget(button);
|
||||
delete button;
|
||||
}
|
||||
mButtons.Clear();
|
||||
}
|
||||
|
||||
public void Flash()
|
||||
{
|
||||
mFlashPct = 1.0f;
|
||||
}
|
||||
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
if (mFlashPct > 0)
|
||||
{
|
||||
mFlashPct = Math.Max(0, mFlashPct - 0.015f);
|
||||
MarkDirty();
|
||||
}
|
||||
|
||||
if ((mTooltipText != null) && (!DarkTooltipManager.IsTooltipShown(this)))
|
||||
{
|
||||
var font = DarkTheme.sDarkTheme.mSmallFont;
|
||||
var tooltipWidth = font.GetWidth(mTooltipText);
|
||||
//if (tooltipWidth > mWidth - GS!(8))
|
||||
{
|
||||
Point point;
|
||||
if (DarkTooltipManager.CheckMouseover(this, 25, out point))
|
||||
{
|
||||
float showWidth = Math.Max(64, Math.Min(tooltipWidth, mWidth * 0.6f));
|
||||
float showHeight = font.GetWrapHeight(mTooltipText, showWidth);
|
||||
|
||||
var tooltip = DarkTooltipManager.ShowTooltip("", this, point.x, 14, showWidth, showHeight + GS!(42), true, true);
|
||||
if (tooltip != null)
|
||||
{
|
||||
var editWidget = new WatchStringEdit(mTooltipText, null);
|
||||
|
||||
tooltip.mRelWidgetMouseInsets = new Insets(0, 0, GS!(-8), 0);
|
||||
tooltip.mAllowMouseInsideSelf = true;
|
||||
tooltip.AddWidget(editWidget);
|
||||
tooltip.mOnResized.Add(new (widget) => editWidget.Resize(GS!(6), GS!(6), widget.mWidth - GS!(6) * 2, widget.mHeight - GS!(6) * 2));
|
||||
tooltip.mOnResized(tooltip);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//if (gApp.UpdateM)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue