Files
AX-Copilot-Codex/.decompiledproj/AxCopilot/Views/CustomMessageBox.cs

367 lines
12 KiB
C#

using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Effects;
namespace AxCopilot.Views;
internal sealed class CustomMessageBox : Window
{
private MessageBoxResult _result = MessageBoxResult.None;
private CustomMessageBox(string message, string title, MessageBoxButton buttons, MessageBoxImage icon)
{
CustomMessageBox customMessageBox = this;
base.Title = title;
base.Width = 400.0;
base.MinWidth = 320.0;
base.MaxWidth = 520.0;
base.SizeToContent = SizeToContent.Height;
base.WindowStartupLocation = WindowStartupLocation.CenterScreen;
base.ResizeMode = ResizeMode.NoResize;
base.WindowStyle = WindowStyle.None;
base.AllowsTransparency = true;
base.Background = Brushes.Transparent;
base.Topmost = true;
Brush background = (Application.Current.TryFindResource("LauncherBackground") as Brush) ?? new SolidColorBrush(Color.FromRgb(26, 27, 46));
Brush foreground = (Application.Current.TryFindResource("PrimaryText") as Brush) ?? Brushes.White;
Brush foreground2 = (Application.Current.TryFindResource("SecondaryText") as Brush) ?? Brushes.Gray;
Brush bg = (Application.Current.TryFindResource("AccentColor") as Brush) ?? new SolidColorBrush(Color.FromRgb(75, 94, 252));
Brush borderBrush = (Application.Current.TryFindResource("BorderColor") as Brush) ?? Brushes.Gray;
Brush bg2 = (Application.Current.TryFindResource("ItemBackground") as Brush) ?? new SolidColorBrush(Color.FromRgb(42, 43, 64));
Border border = new Border
{
Background = background,
CornerRadius = new CornerRadius(16.0),
BorderBrush = borderBrush,
BorderThickness = new Thickness(1.0),
Padding = new Thickness(28.0, 24.0, 28.0, 20.0),
Effect = new DropShadowEffect
{
BlurRadius = 24.0,
ShadowDepth = 4.0,
Opacity = 0.3,
Color = Colors.Black
}
};
StackPanel stackPanel = new StackPanel();
Grid grid = new Grid
{
Margin = new Thickness(0.0, 0.0, 0.0, 16.0)
};
grid.MouseLeftButtonDown += delegate
{
try
{
customMessageBox.DragMove();
}
catch
{
}
};
StackPanel stackPanel2 = new StackPanel
{
Orientation = Orientation.Horizontal
};
var (text, foreground3) = GetIconInfo(icon);
if (!string.IsNullOrEmpty(text))
{
stackPanel2.Children.Add(new TextBlock
{
Text = text,
FontFamily = new FontFamily("Segoe MDL2 Assets"),
FontSize = 18.0,
Foreground = foreground3,
VerticalAlignment = VerticalAlignment.Center,
Margin = new Thickness(0.0, 0.0, 10.0, 0.0)
});
}
stackPanel2.Children.Add(new TextBlock
{
Text = title,
FontSize = 15.0,
FontWeight = FontWeights.SemiBold,
Foreground = foreground,
VerticalAlignment = VerticalAlignment.Center
});
grid.Children.Add(stackPanel2);
Button button = new Button
{
Content = "\ue8bb",
FontFamily = new FontFamily("Segoe MDL2 Assets"),
FontSize = 10.0,
Foreground = foreground2,
Background = Brushes.Transparent,
BorderThickness = new Thickness(0.0),
Padding = new Thickness(6.0),
Cursor = Cursors.Hand,
HorizontalAlignment = HorizontalAlignment.Right,
VerticalAlignment = VerticalAlignment.Center
};
button.Click += delegate
{
customMessageBox._result = MessageBoxResult.Cancel;
customMessageBox.Close();
};
grid.Children.Add(button);
stackPanel.Children.Add(grid);
stackPanel.Children.Add(new TextBlock
{
Text = message,
FontSize = 13.0,
Foreground = foreground,
TextWrapping = TextWrapping.Wrap,
LineHeight = 20.0,
Margin = new Thickness(0.0, 0.0, 0.0, 24.0)
});
StackPanel stackPanel3 = new StackPanel
{
Orientation = Orientation.Horizontal,
HorizontalAlignment = HorizontalAlignment.Right
};
switch (buttons)
{
case MessageBoxButton.OK:
stackPanel3.Children.Add(CreateButton("확인", bg, isPrimary: true, MessageBoxResult.OK));
break;
case MessageBoxButton.OKCancel:
stackPanel3.Children.Add(CreateButton("취소", bg2, isPrimary: false, MessageBoxResult.Cancel));
stackPanel3.Children.Add(CreateButton("확인", bg, isPrimary: true, MessageBoxResult.OK));
break;
case MessageBoxButton.YesNo:
stackPanel3.Children.Add(CreateButton("아니오", bg2, isPrimary: false, MessageBoxResult.No));
stackPanel3.Children.Add(CreateButton("예", bg, isPrimary: true, MessageBoxResult.Yes));
break;
case MessageBoxButton.YesNoCancel:
stackPanel3.Children.Add(CreateButton("취소", bg2, isPrimary: false, MessageBoxResult.Cancel));
stackPanel3.Children.Add(CreateButton("아니오", bg2, isPrimary: false, MessageBoxResult.No));
stackPanel3.Children.Add(CreateButton("예", bg, isPrimary: true, MessageBoxResult.Yes));
break;
}
stackPanel.Children.Add(stackPanel3);
border.Child = stackPanel;
base.Content = border;
base.KeyDown += delegate(object _, KeyEventArgs e)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Invalid comparison between Unknown and I4
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Invalid comparison between Unknown and I4
if ((int)e.Key == 13)
{
customMessageBox._result = ((buttons == MessageBoxButton.YesNo) ? MessageBoxResult.No : MessageBoxResult.Cancel);
customMessageBox.Close();
}
else if ((int)e.Key == 6)
{
if (1 == 0)
{
}
MessageBoxButton messageBoxButton = buttons;
MessageBoxResult result = (((uint)(messageBoxButton - 3) > 1u) ? MessageBoxResult.OK : MessageBoxResult.Yes);
if (1 == 0)
{
}
customMessageBox._result = result;
customMessageBox.Close();
}
};
}
private Button CreateButton(string text, Brush bg, bool isPrimary, MessageBoxResult result)
{
Button button = new Button();
button.Content = text;
button.FontSize = 12.5;
button.FontWeight = (isPrimary ? FontWeights.SemiBold : FontWeights.Normal);
button.Foreground = (isPrimary ? Brushes.White : ((Application.Current.TryFindResource("PrimaryText") as Brush) ?? Brushes.White));
button.Background = bg;
button.BorderThickness = new Thickness(0.0);
button.Padding = new Thickness(20.0, 8.0, 20.0, 8.0);
button.Margin = new Thickness(6.0, 0.0, 0.0, 0.0);
button.Cursor = Cursors.Hand;
button.MinWidth = 80.0;
Button button2 = button;
ControlTemplate controlTemplate = new ControlTemplate(typeof(Button));
FrameworkElementFactory frameworkElementFactory = new FrameworkElementFactory(typeof(Border));
frameworkElementFactory.SetValue(Border.BackgroundProperty, bg);
frameworkElementFactory.SetValue(Border.CornerRadiusProperty, new CornerRadius(10.0));
frameworkElementFactory.SetValue(Border.PaddingProperty, new Thickness(20.0, 8.0, 20.0, 8.0));
FrameworkElementFactory frameworkElementFactory2 = new FrameworkElementFactory(typeof(ContentPresenter));
frameworkElementFactory2.SetValue(FrameworkElement.HorizontalAlignmentProperty, HorizontalAlignment.Center);
frameworkElementFactory2.SetValue(FrameworkElement.VerticalAlignmentProperty, VerticalAlignment.Center);
frameworkElementFactory.AppendChild(frameworkElementFactory2);
controlTemplate.VisualTree = frameworkElementFactory;
button2.Template = controlTemplate;
button2.Click += delegate
{
_result = result;
Close();
};
return button2;
}
private static (string icon, Brush color) GetIconInfo(MessageBoxImage image)
{
if (1 == 0)
{
}
(string, SolidColorBrush) tuple = image switch
{
MessageBoxImage.Hand => ("\uea39", new SolidColorBrush(Color.FromRgb(229, 62, 62))),
MessageBoxImage.Exclamation => ("\ue7ba", new SolidColorBrush(Color.FromRgb(221, 107, 32))),
MessageBoxImage.Asterisk => ("\ue946", new SolidColorBrush(Color.FromRgb(75, 94, 252))),
MessageBoxImage.Question => ("\ue9ce", new SolidColorBrush(Color.FromRgb(75, 94, 252))),
_ => ("", Brushes.Transparent),
};
if (1 == 0)
{
}
(string, SolidColorBrush) tuple2 = tuple;
return (icon: tuple2.Item1, color: tuple2.Item2);
}
public static MessageBoxResult Show(string message)
{
return Show(message, "AX Copilot", MessageBoxButton.OK, MessageBoxImage.None);
}
public static MessageBoxResult Show(string message, string title)
{
return Show(message, title, MessageBoxButton.OK, MessageBoxImage.None);
}
public static MessageBoxResult Show(string message, string title, MessageBoxButton buttons)
{
return Show(message, title, buttons, MessageBoxImage.None);
}
public static MessageBoxResult Show(string message, string title, MessageBoxButton buttons, MessageBoxImage icon)
{
CustomMessageBox dlg = new CustomMessageBox(message, title, buttons, icon);
dlg.Opacity = 0.0;
dlg.Loaded += delegate
{
DoubleAnimation animation = new DoubleAnimation(0.0, 1.0, TimeSpan.FromMilliseconds(150.0));
dlg.BeginAnimation(UIElement.OpacityProperty, animation);
};
Window window = Application.Current.Windows.OfType<Window>().FirstOrDefault((Window w) => w.IsActive && !(w is CustomMessageBox)) ?? Application.Current.MainWindow;
Border toast = null;
Grid rootGrid = null;
if (window?.Content is Border { Child: Grid child })
{
rootGrid = child;
toast = CreateToastBanner(title, icon);
rootGrid.Children.Add(toast);
}
else if (window?.Content is Grid grid)
{
rootGrid = grid;
toast = CreateToastBanner(title, icon);
rootGrid.Children.Add(toast);
}
dlg.ShowDialog();
if (toast != null && rootGrid != null)
{
DoubleAnimation doubleAnimation = new DoubleAnimation(1.0, 0.0, TimeSpan.FromMilliseconds(400.0))
{
EasingFunction = new QuadraticEase
{
EasingMode = EasingMode.EaseIn
}
};
doubleAnimation.Completed += delegate
{
rootGrid.Children.Remove(toast);
};
toast.BeginAnimation(UIElement.OpacityProperty, doubleAnimation);
}
return dlg._result;
}
private static Border CreateToastBanner(string title, MessageBoxImage icon)
{
var (text, foreground) = GetIconInfo(icon);
if (string.IsNullOrEmpty(text))
{
text = "\ue946";
foreground = new SolidColorBrush(Color.FromRgb(75, 94, 252));
}
StackPanel stackPanel = new StackPanel
{
Orientation = Orientation.Horizontal
};
stackPanel.Children.Add(new TextBlock
{
Text = text,
FontFamily = new FontFamily("Segoe MDL2 Assets"),
FontSize = 12.0,
Foreground = foreground,
VerticalAlignment = VerticalAlignment.Center,
Margin = new Thickness(0.0, 0.0, 8.0, 0.0)
});
stackPanel.Children.Add(new TextBlock
{
Text = title,
FontSize = 11.5,
FontWeight = FontWeights.SemiBold,
Foreground = Brushes.White,
VerticalAlignment = VerticalAlignment.Center
});
Border toast = new Border
{
Background = new SolidColorBrush(Color.FromArgb(232, 42, 43, 64)),
CornerRadius = new CornerRadius(10.0),
Padding = new Thickness(16.0, 8.0, 16.0, 8.0),
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Bottom,
Margin = new Thickness(0.0, 0.0, 0.0, 12.0),
Effect = new DropShadowEffect
{
BlurRadius = 12.0,
ShadowDepth = 2.0,
Opacity = 0.3,
Color = Colors.Black
},
Opacity = 0.0,
Child = stackPanel
};
Grid.SetColumnSpan(toast, 10);
Grid.SetRowSpan(toast, 10);
TranslateTransform translate = new TranslateTransform(0.0, 20.0);
toast.RenderTransform = translate;
toast.Loaded += delegate
{
DoubleAnimation animation = new DoubleAnimation(0.0, 1.0, TimeSpan.FromMilliseconds(250.0))
{
EasingFunction = new QuadraticEase
{
EasingMode = EasingMode.EaseOut
}
};
DoubleAnimation animation2 = new DoubleAnimation(20.0, 0.0, TimeSpan.FromMilliseconds(300.0))
{
EasingFunction = new BackEase
{
EasingMode = EasingMode.EaseOut,
Amplitude = 0.3
}
};
toast.BeginAnimation(UIElement.OpacityProperty, animation);
translate.BeginAnimation(TranslateTransform.YProperty, animation2);
};
return toast;
}
public static MessageBoxResult ShowStandalone(string message, string title, MessageBoxButton buttons = MessageBoxButton.OK, MessageBoxImage icon = MessageBoxImage.None)
{
CustomMessageBox customMessageBox = new CustomMessageBox(message, title, buttons, icon);
customMessageBox.ShowDialog();
return customMessageBox._result;
}
}