elfisa-pharmacy/src/Elfisa.UI/Dialogs/ModernMessageForm.cs
Magomed 5cc202dea7 Polish cart tabs and dialog chrome for light/dark themes.
Add ModernTabControl/SplitContainer for cart UI without system borders, fix button corner artifacts and dialog text contrast, and use TitleBarTop green for auth header in light mode.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-14 20:32:54 +03:00

119 lines
4.1 KiB
C#

using System.Drawing;
using System.Windows.Forms;
using Elfisa.UI.Controls;
using Elfisa.UI.Theming;
namespace Elfisa.UI.Dialogs
{
public sealed class ModernMessageForm : Form
{
public ModernMessageForm(string title, string message, bool showCancel)
: this(title, message, showCancel ? ModernMessageButtons.YesNoCancel : ModernMessageButtons.Ok)
{
}
public ModernMessageForm(string title, string message, ModernMessageButtons buttons)
{
FormBorderStyle = FormBorderStyle.None;
StartPosition = FormStartPosition.CenterParent;
ShowInTaskbar = false;
Size = new Size(440, 220);
Padding = new Padding(20);
var titleLabel = new Label
{
Text = title,
Dock = DockStyle.Top,
Height = 34,
Font = ThemeManager.Colors.FontSemibold16,
BackColor = Color.Transparent
};
var messageLabel = new Label
{
Text = message,
Dock = DockStyle.Fill,
Font = ThemeManager.Colors.FontRegular14,
BackColor = Color.Transparent
};
var buttonPanel = new FlowLayoutPanel
{
Dock = DockStyle.Bottom,
Height = 48,
FlowDirection = FlowDirection.RightToLeft,
WrapContents = false
};
switch (buttons)
{
case ModernMessageButtons.YesNo:
AddButton(buttonPanel, "Нет", ModernButtonStyle.Secondary, DialogResult.No);
AddButton(buttonPanel, "Да", ModernButtonStyle.Primary, DialogResult.Yes);
break;
case ModernMessageButtons.YesNoCancel:
AddButton(buttonPanel, "Отмена", ModernButtonStyle.Secondary, DialogResult.Cancel);
AddButton(buttonPanel, "Нет", ModernButtonStyle.Secondary, DialogResult.No);
AddButton(buttonPanel, "Да", ModernButtonStyle.Primary, DialogResult.Yes);
break;
default:
AddButton(buttonPanel, "OK", ModernButtonStyle.Primary, DialogResult.OK);
break;
}
Controls.Add(messageLabel);
Controls.Add(buttonPanel);
Controls.Add(titleLabel);
ApplyTheme(ThemeManager.Colors);
}
private void ApplyTheme(ThemeColors theme)
{
BackColor = theme.Surface;
ForeColor = theme.TextPrimary;
foreach (Control control in Controls)
{
if (control is Label label)
{
label.ForeColor = theme.TextPrimary;
label.BackColor = Color.Transparent;
}
else if (control is FlowLayoutPanel panel)
{
panel.BackColor = theme.Surface;
panel.ForeColor = theme.TextPrimary;
foreach (Control child in panel.Controls)
{
if (child is ModernButton button)
{
button.ApplyTheme(theme);
}
}
}
}
}
private void AddButton(FlowLayoutPanel panel, string text, ModernButtonStyle style, DialogResult result)
{
var button = new ModernButton { Text = text, Width = 100, ButtonStyle = style };
button.ApplyTheme(ThemeManager.Colors);
button.Click += (_, __) =>
{
DialogResult = result;
Close();
};
panel.Controls.Add(button);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
using (var pen = new Pen(ThemeManager.Colors.Border))
{
e.Graphics.DrawRectangle(pen, 0, 0, Width - 1, Height - 1);
}
}
}
}