Initial commit

This commit is contained in:
2026-08-11 16:20:44 +09:00
commit 15535f4e1a
117 changed files with 23897 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
namespace BMX.UI
{
partial class BatteryStatusBar
{
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
/// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}

View File

@@ -0,0 +1,288 @@
namespace BMX.UI
{
using System;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
[ToolboxBitmap(typeof(BatteryStatusBar), "Icons.BatteryStatusBar.ico")]
public partial class BatteryStatusBar : Control
{
#region Variables
private Color borderColor = Color.Black;
private Color shadowColor = Color.LightGray;
private Color innerColor = Color.White;
private int borderWidth;
private int cornerRadius;
private int value;
private Color bar1Color = Color.Red;
private Color bar2Color = Color.Orange;
private Color bar3Color = Color.Yellow;
private Color bar4Color = Color.YellowGreen;
private Color bar5Color = Color.LightGreen;
#endregion
#region Events
protected EventHandler OnValueChanged;
public event EventHandler ValueChanged
{
add
{
if (OnValueChanged != null)
{
foreach (Delegate d in OnValueChanged.GetInvocationList())
{
if (ReferenceEquals(d, value)) { return; }
}
}
OnValueChanged = (EventHandler)Delegate.Combine(OnValueChanged, value);
}
remove { OnValueChanged = (EventHandler)Delegate.Remove(OnValueChanged, value); }
}
#endregion
public BatteryStatusBar()
{
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.UserPaint, true);
InitializeComponent();
Init();
}
private void Init()
{
borderWidth = 10;
cornerRadius = 10;
value = 0;
}
[Category("Progress"),
Description("Gets or sets the border width"),
Browsable(true)]
public int BorderWidth
{
get { return borderWidth; }
set
{
borderWidth = value;
Invalidate();
}
}
[Category("Progress"),
Description("Gets or sets the border color"),
Browsable(true)]
public Color BorderColor
{
get { return borderColor; }
set
{
borderColor = value;
Invalidate();
}
}
[Category("Progress"),
Description("Gets or sets the border width"),
Browsable(true)]
public int CornerRadius
{
get { return cornerRadius; }
set
{
cornerRadius = value;
Invalidate();
}
}
[Category("Progress"),
Description("Gets or sets the bar1 color."),
Browsable(true)]
public Color Bar1Color
{
get { return bar1Color; }
set
{
bar2Color = value;
Invalidate();
}
}
[Category("Progress"),
Description("Gets or sets the bar2 color."),
Browsable(true)]
public Color Bar2Color
{
get { return bar2Color; }
set
{
bar2Color = value;
Invalidate();
}
}
[Category("Progress"),
Description("Gets or sets the bar3 color."),
Browsable(true)]
public Color Bar3Color
{
get { return bar3Color; }
set
{
bar3Color = value;
Invalidate();
}
}
[Category("Progress"),
Description("Gets or sets the bar4 color."),
Browsable(true)]
public Color Bar4Color
{
get { return bar4Color; }
set
{
bar4Color = value;
Invalidate();
}
}
[Category("Progress"),
Description("Gets or sets the bar5 color."),
Browsable(true)]
public Color Bar5Color
{
get { return bar5Color; }
set
{
bar5Color = value;
Invalidate();
}
}
[Category("Progress"),
Description("Gets or sets the shadow color."),
Browsable(true)]
public Color ShadowColor
{
get { return shadowColor; }
set
{
shadowColor = value;
Invalidate();
}
}
[Category("Progress"),
Description("Gets or sets the inner color."),
Browsable(true)]
public Color InnerColor
{
get { return innerColor; }
set
{
innerColor = value;
Invalidate();
}
}
[Category("Progress"),
Description("Gets or sets the value."),
Browsable(true)]
public int Value
{
get { return value; }
set
{
this.value = value;
Invalidate();
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
PaintBar(e.Graphics);
}
private void PaintBar(Graphics g)
{
g.SmoothingMode = SmoothingMode.AntiAlias;
try
{
Rectangle rect = ClientRectangle;
int width = rect.Width;
int height = rect.Height;
int topWidth = 24;
int topHeight = 12;
Rectangle rectTop = new Rectangle(width / 2 - topWidth / 2, 0, topWidth - 1, topHeight);
using (GraphicsPath pathTop = GetPath(rectTop, 2))
{
g.FillPath(new SolidBrush(borderColor), pathTop);
}
Rectangle rectBody = new Rectangle(0, topHeight - 4, width -1, height - topHeight + 4 - 1);
using (GraphicsPath pathBody = GetPath(rectBody, cornerRadius))
{
g.FillPath(new SolidBrush(borderColor), pathBody);
g.DrawPath(new Pen(borderColor), pathBody);
}
Rectangle rectShadow = new Rectangle(borderWidth, topHeight - 4 + borderWidth + 10, width - borderWidth * 2, height - topHeight + 4 - borderWidth * 2 - 20);
g.FillRectangle(new SolidBrush(shadowColor), rectShadow);
Rectangle rectInner = new Rectangle(borderWidth + borderWidth / 2 + 1, topHeight - 4 + borderWidth + 10 + borderWidth - 1, width - borderWidth * 2 - borderWidth - 1, height - topHeight + 4 - borderWidth * 2 - borderWidth - 20 - 3);
g.FillRectangle(new SolidBrush(innerColor), rectInner);
//g.DrawLine(new Pen(Color.White, borderWidth), rectBody.X + borderWidth / 2 + 1, rectBody.Y + borderWidth / 2 + 1, rectBody.X + borderWidth / 2 + 1, height - borderWidth);
Color barColor = innerColor;
if (value <= 20)
barColor = bar1Color;
else if (value <= 40)
barColor = bar2Color;
else if (value <= 60)
barColor = bar3Color;
else if (value <= 80)
barColor = bar4Color;
else if (value <= 100)
barColor = bar5Color;
Rectangle rectBar = rectInner;
rectBar.Inflate(-borderWidth / 2, -borderWidth);
rectBar.Height = (rectInner.Height - borderWidth) * value / 100;
rectBar.Y = rectInner.Y + (rectInner.Height - borderWidth / 2 - rectBar.Height);
g.FillRectangle(new SolidBrush(barColor), rectBar);
//Line
int lineHeight = rectInner.Height / 5;
int y = rectInner.Y + rectInner.Height - lineHeight;
for (int i = 0; i < 5; i++)
{
g.DrawLine(new Pen(Color.White, borderWidth), rectBar.X - 1, y, rectBar.X + rectBar.Width + 2, y);
y = y - lineHeight;
}
}
catch { }
}
private GraphicsPath GetPath(Rectangle rect, int radius)
{
GraphicsPath gp = new GraphicsPath();
gp.AddArc(rect.X, rect.Y, radius, radius, 180, 90);
gp.AddArc(rect.X + rect.Width - radius, rect.Y, radius, radius, 270, 90);
gp.AddArc(rect.X + rect.Width - radius, rect.Y + rect.Height - radius, radius, radius, 0, 90);
gp.AddArc(rect.X, rect.Y + rect.Height - radius, radius, radius, 90, 90);
gp.AddLine(rect.X, rect.Y + rect.Height - radius, rect.X, rect.Y + radius / 2);
return gp;
}
}
}