Files
Evil_Calculator/Evil Calculator/CalculatorBody.cs
2026-01-10 20:52:44 +01:00

275 lines
12 KiB
C#

namespace Lunar.Evil_Calculator
{
public partial class CalculatorBody : Form
{
private bool mouseDown;
private bool onTop;
private Point lastLocation;
private static Color LunarGray = System.Drawing.ColorTranslator.FromHtml("#2b292d");
private static Color LunarOrange = System.Drawing.ColorTranslator.FromHtml("#ff8700");
private Form CalculatorPanel = new Form();
private EquationManager equationManager = new EquationManager();
public CalculatorBody()
{
InitializeComponent();
this.BackColor = LunarGray;
this.Opacity = 0.75;
this.FormBorderStyle = FormBorderStyle.None;
this.ClientSize = new Size(300, 500);
this.Text = "Calculator";
MyTitleBar();
}
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
CalculatorPanelInit();
}
protected override void OnMove(EventArgs e)
{
base.OnMove(e);
if (OwnedForms.Length > 0)
{
var p = PointToScreen(new Point(0, 30));
var dx = p.X - OwnedForms[0].Location.X;
var dy = p.Y - OwnedForms[0].Location.Y;
foreach (var f in OwnedForms)
f.Location = new Point(f.Location.X + dx, f.Location.Y + dy);
}
}
private void MyTitleBar()
{
Panel TitleBar = new Panel
{
Height = 30,
Dock = DockStyle.Top,
Visible = true
};
TitleBar.MouseDown += TitleBar_MouseDown;
TitleBar.MouseMove += TitleBar_MouseMove;
TitleBar.MouseUp += TitleBar_MouseUp;
this.Controls.Add(TitleBar);
Button ButtonMinimize = new Button
{
Text = "_",
Width = 40,
Height = TitleBar.Height,
Dock = DockStyle.Right,
FlatStyle = FlatStyle.Flat,
ForeColor = Color.White
};
ButtonMinimize.FlatAppearance.BorderSize = 0;
ButtonMinimize.FlatAppearance.BorderColor = LunarGray;
ButtonMinimize.Click += (s, e) => this.WindowState = FormWindowState.Minimized;
TitleBar.Controls.Add(ButtonMinimize);
Button ButtonMaximize = new Button
{
Text = "□",
Width = 40,
Height = TitleBar.Height,
Dock = DockStyle.Right,
FlatStyle = FlatStyle.Flat,
ForeColor = Color.White
};
ButtonMaximize.FlatAppearance.BorderSize = 0;
ButtonMaximize.FlatAppearance.BorderColor = LunarGray;
ButtonMaximize.Click += (s, e) =>
{
this.WindowState = (this.WindowState == FormWindowState.Normal) ? FormWindowState.Maximized : FormWindowState.Normal;
};
TitleBar.Controls.Add(ButtonMaximize);
Button ButtonClose = new Button
{
Text = "X",
Width = 40,
Height = TitleBar.Height,
Dock = DockStyle.Right,
FlatStyle = FlatStyle.Flat,
ForeColor = Color.White
};
ButtonClose.FlatAppearance.BorderSize = 0;
ButtonClose.FlatAppearance.BorderColor = LunarGray;
ButtonClose.Click += (s, e) => this.Close();
TitleBar.Controls.Add(ButtonClose);
Label titleLabel = new Label
{
Text = this.Text,
Location = new Point(8, 7),
AutoSize = true,
ForeColor = Color.White
};
TitleBar.Controls.Add(titleLabel);
void TitleBar_MouseDown(object? sender, MouseEventArgs e)
{
mouseDown = true;
lastLocation = e.Location;
}
void TitleBar_MouseMove(object? sender, MouseEventArgs e)
{
if (mouseDown)
{
this.Location = new Point(
(this.Location.X - lastLocation.X) + e.X, (this.Location.Y - lastLocation.Y) + e.Y);
this.Update();
}
}
void TitleBar_MouseUp(object? sender, MouseEventArgs e)
{
mouseDown = false;
}
void Titlebar_BaseTextChanged(object? sender, EventArgs e)
{
titleLabel.Text = this.Text;
}
this.TextChanged += Titlebar_BaseTextChanged;
}
private void CalculatorPanelInit()
{
CalculatorPanel.FormBorderStyle = FormBorderStyle.None;
CalculatorPanel.BackColor = Color.Gray;
CalculatorPanel.TransparencyKey = CalculatorPanel.BackColor;
CalculatorPanel.Opacity = 0.90;
CalculatorPanel.StartPosition = FormStartPosition.Manual;
CalculatorPanel.DesktopLocation = new Point(this.Location.X, this.Location.Y + 30);
CalculatorPanel.ClientSize = new Size(this.Size.Width, this.Size.Height - 30);
CalculatorPanel.Owner = this;
CalculatorPanel.ShowInTaskbar = false;
CalculatorButton buttonZero = new CalculatorButton("0", new Point(90, 410), CalculatorPanel, equationManager);
CalculatorButton buttonOne = new CalculatorButton("1", new Point(20, 360), CalculatorPanel, equationManager);
CalculatorButton buttonTwo = new CalculatorButton("2", new Point(90, 360), CalculatorPanel, equationManager);
CalculatorButton buttonThree = new CalculatorButton("3", new Point(160, 360), CalculatorPanel, equationManager);
CalculatorButton buttonFour = new CalculatorButton("4", new Point(20, 310), CalculatorPanel, equationManager);
CalculatorButton buttonFive = new CalculatorButton("5", new Point(90, 310), CalculatorPanel, equationManager);
CalculatorButton buttonSix = new CalculatorButton("6", new Point(160, 310), CalculatorPanel, equationManager);
CalculatorButton buttonSeven = new CalculatorButton("7", new Point(20, 260), CalculatorPanel, equationManager);
CalculatorButton buttonEight = new CalculatorButton("8", new Point(90, 260), CalculatorPanel, equationManager);
CalculatorButton buttonNine = new CalculatorButton("9", new Point(160, 260), CalculatorPanel, equationManager);
CalculatorButton buttonLeftBracket = new CalculatorButton("(", new Point(160, 160), CalculatorPanel, equationManager);
CalculatorButton buttonRightBracket = new CalculatorButton(")", new Point(230, 160), CalculatorPanel, equationManager);
CalculatorButton buttonClear = new CalculatorButton("C", new Point(20, 160), CalculatorPanel, equationManager);
CalculatorButton buttonClearEverything = new CalculatorButton("CE", new Point(90, 160), CalculatorPanel, equationManager);
CalculatorButton buttonPowerX = new CalculatorButton("xˣ", new Point(20, 210), CalculatorPanel, equationManager);
CalculatorButton buttonPowerTwo = new CalculatorButton("x²", new Point(90, 210), CalculatorPanel, equationManager);
CalculatorButton buttonSquareRoot = new CalculatorButton("√", new Point(160, 210), CalculatorPanel, equationManager);
CalculatorButton buttonDivide = new CalculatorButton("/", new Point(230, 210), CalculatorPanel, equationManager);
CalculatorButton buttonMultiply = new CalculatorButton("*", new Point(230, 260), CalculatorPanel, equationManager);
CalculatorButton buttonMinus = new CalculatorButton("-", new Point(230, 310), CalculatorPanel, equationManager);
CalculatorButton buttonPlus = new CalculatorButton("+", new Point(230, 360), CalculatorPanel, equationManager);
CalculatorButton buttonComma = new CalculatorButton(",", new Point(160, 410), CalculatorPanel, equationManager);
EqualsButton equalsButton = new EqualsButton(new Point(230, 410), CalculatorPanel, equationManager);
ToggleTopButton toggleTopButton = new ToggleTopButton(new Point(20, 410), CalculatorPanel);
toggleTopButton.Click += ToggleTopButton_Click;
Label equationTextBox = new Label();
equationTextBox.Location = new Point(20, 20);
equationTextBox.ClientSize = new Size(260, 80);
equationTextBox.TextAlign = ContentAlignment.TopRight;
equationTextBox.Font = new Font("Arial", 16);
equationTextBox.ForeColor = Color.White;
CalculatorPanel.Controls.Add(equationTextBox);
Label currentOperandTextBox = new Label();
currentOperandTextBox.Text = "0";
currentOperandTextBox.Location = new Point(20, 100);
currentOperandTextBox.ClientSize = new Size(260, 30);
currentOperandTextBox.TextAlign = ContentAlignment.TopRight;
currentOperandTextBox.Font = new Font("Arial", 20);
currentOperandTextBox.ForeColor = Color.White;
CalculatorPanel.Controls.Add(currentOperandTextBox);
equationManager.AcquireOutputLabels(ref equationTextBox, ref currentOperandTextBox);
CalculatorPanel.Show();
void ToggleTopButton_Click(object? sender, EventArgs e)
{
this.Text = this.onTop ? "Calculator" : "Calculator [pinned]";
this.onTop = !this.onTop;
this.TopMost = !this.TopMost;
CalculatorPanel.TopMost = !CalculatorPanel.TopMost;
}
}
private class CalculatorButton : Button
{
public CalculatorButton(string Text, Point Location, Form Panel, EquationManager equationManager)
{
this.Text = Text;
this.Font = new Font("Arial", 12);
this.Location = Location;
this.Width = 50;
this.Height = 40;
this.FlatStyle = FlatStyle.Flat;
this.BackColor = LunarGray;
this.FlatAppearance.BorderSize = 0;
this.FlatAppearance.BorderColor = LunarGray;
ForeColor = Color.White;
this.Click += equationManager.ProcessButtonInput;
Panel.Controls.Add(this);
}
}
private class EqualsButton : Button
{
public EqualsButton(Point Location, Form Panel, EquationManager equationManager)
{
this.Text = "=";
this.Font = new Font("Arial", 12);
this.Location = Location;
this.Width = 50;
this.Height = 40;
this.FlatStyle = FlatStyle.Flat;
this.BackColor = LunarOrange;
this.FlatAppearance.BorderSize = 0;
this.FlatAppearance.BorderColor = LunarOrange;
ForeColor = Color.White;
this.Click += equationManager.EqualsButtonPressed;
Panel.Controls.Add(this);
}
}
private class ToggleTopButton : Button
{
public ToggleTopButton(Point Location, Form Panel)
{
this.Text = "Toggle\ntop";
this.Font = new Font("Arial", 7);
this.Location = Location;
this.Width = 50;
this.Height = 40;
this.FlatStyle = FlatStyle.Flat;
this.BackColor = LunarGray;
this.FlatAppearance.BorderSize = 0;
this.FlatAppearance.BorderColor = LunarGray;
ForeColor = Color.White;
Panel.Controls.Add(this);
}
}
}
}