Initial commit to new repository
This commit is contained in:
335
.decompiledproj/AxCopilot/Views/TrayMenuWindow.cs
Normal file
335
.decompiledproj/AxCopilot/Views/TrayMenuWindow.cs
Normal file
@@ -0,0 +1,335 @@
|
||||
using System;
|
||||
using System.CodeDom.Compiler;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Markup;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Animation;
|
||||
using System.Windows.Media.Effects;
|
||||
using System.Windows.Threading;
|
||||
|
||||
namespace AxCopilot.Views;
|
||||
|
||||
public class TrayMenuWindow : Window, IComponentConnector
|
||||
{
|
||||
private struct POINT
|
||||
{
|
||||
public int X;
|
||||
|
||||
public int Y;
|
||||
}
|
||||
|
||||
private DispatcherTimer? _autoCloseTimer;
|
||||
|
||||
private static readonly Brush BulbOnBrush = new SolidColorBrush(Color.FromRgb(byte.MaxValue, 185, 0));
|
||||
|
||||
private static readonly Brush BulbOffBrush = new SolidColorBrush(Color.FromRgb(120, 120, 140));
|
||||
|
||||
internal Border RootBorder;
|
||||
|
||||
internal StackPanel MenuPanel;
|
||||
|
||||
private bool _contentLoaded;
|
||||
|
||||
public event Action? Opening;
|
||||
|
||||
public TrayMenuWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
base.MouseLeave += delegate
|
||||
{
|
||||
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_0033: Expected O, but got Unknown
|
||||
DispatcherTimer? autoCloseTimer = _autoCloseTimer;
|
||||
if (autoCloseTimer != null)
|
||||
{
|
||||
autoCloseTimer.Stop();
|
||||
}
|
||||
_autoCloseTimer = new DispatcherTimer
|
||||
{
|
||||
Interval = TimeSpan.FromMilliseconds(400.0)
|
||||
};
|
||||
_autoCloseTimer.Tick += delegate
|
||||
{
|
||||
_autoCloseTimer.Stop();
|
||||
Hide();
|
||||
};
|
||||
_autoCloseTimer.Start();
|
||||
};
|
||||
base.MouseEnter += delegate
|
||||
{
|
||||
DispatcherTimer? autoCloseTimer = _autoCloseTimer;
|
||||
if (autoCloseTimer != null)
|
||||
{
|
||||
autoCloseTimer.Stop();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public TrayMenuWindow AddItem(string glyph, string text, Action onClick)
|
||||
{
|
||||
Border border = CreateItemBorder(glyph, text);
|
||||
border.MouseLeftButtonUp += delegate
|
||||
{
|
||||
Hide();
|
||||
onClick();
|
||||
};
|
||||
MenuPanel.Children.Add(border);
|
||||
return this;
|
||||
}
|
||||
|
||||
public TrayMenuWindow AddItem(string glyph, string text, Action onClick, out Border itemRef)
|
||||
{
|
||||
Border border = CreateItemBorder(glyph, text);
|
||||
border.MouseLeftButtonUp += delegate
|
||||
{
|
||||
Hide();
|
||||
onClick();
|
||||
};
|
||||
MenuPanel.Children.Add(border);
|
||||
itemRef = border;
|
||||
return this;
|
||||
}
|
||||
|
||||
public TrayMenuWindow AddToggleItem(string glyph, string text, bool initialChecked, Action<bool> onToggle, out Func<bool> getChecked, out Action<string> setText)
|
||||
{
|
||||
TextBlock glyphBlock = new TextBlock
|
||||
{
|
||||
Text = glyph,
|
||||
FontFamily = new FontFamily("Segoe MDL2 Assets"),
|
||||
FontSize = 14.0,
|
||||
Foreground = (initialChecked ? BulbOnBrush : BulbOffBrush),
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
Width = 20.0,
|
||||
TextAlignment = TextAlignment.Center
|
||||
};
|
||||
if (initialChecked)
|
||||
{
|
||||
glyphBlock.Effect = new DropShadowEffect
|
||||
{
|
||||
Color = Color.FromRgb(byte.MaxValue, 185, 0),
|
||||
BlurRadius = 12.0,
|
||||
ShadowDepth = 0.0,
|
||||
Opacity = 0.7
|
||||
};
|
||||
}
|
||||
TextBlock label = new TextBlock
|
||||
{
|
||||
Text = text,
|
||||
FontSize = 13.0,
|
||||
VerticalAlignment = VerticalAlignment.Center
|
||||
};
|
||||
label.SetResourceReference(TextBlock.ForegroundProperty, "PrimaryText");
|
||||
StackPanel child = new StackPanel
|
||||
{
|
||||
Orientation = Orientation.Horizontal,
|
||||
Children =
|
||||
{
|
||||
(UIElement)glyphBlock,
|
||||
(UIElement)label
|
||||
}
|
||||
};
|
||||
Border border = new Border
|
||||
{
|
||||
Child = child,
|
||||
CornerRadius = new CornerRadius(6.0),
|
||||
Padding = new Thickness(12.0, 8.0, 16.0, 8.0),
|
||||
Cursor = Cursors.Hand,
|
||||
Background = Brushes.Transparent
|
||||
};
|
||||
border.MouseEnter += delegate
|
||||
{
|
||||
border.Background = (TryFindResource("ItemHoverBackground") as Brush) ?? Brushes.Transparent;
|
||||
};
|
||||
border.MouseLeave += delegate
|
||||
{
|
||||
border.Background = Brushes.Transparent;
|
||||
};
|
||||
border.MouseLeftButtonUp += delegate
|
||||
{
|
||||
initialChecked = !initialChecked;
|
||||
glyphBlock.Foreground = (initialChecked ? BulbOnBrush : BulbOffBrush);
|
||||
glyphBlock.Effect = (initialChecked ? new DropShadowEffect
|
||||
{
|
||||
Color = Color.FromRgb(byte.MaxValue, 185, 0),
|
||||
BlurRadius = 12.0,
|
||||
ShadowDepth = 0.0,
|
||||
Opacity = 0.7
|
||||
} : null);
|
||||
onToggle(initialChecked);
|
||||
};
|
||||
getChecked = () => initialChecked;
|
||||
setText = delegate(string t)
|
||||
{
|
||||
label.Text = t;
|
||||
};
|
||||
MenuPanel.Children.Add(border);
|
||||
return this;
|
||||
}
|
||||
|
||||
public TrayMenuWindow AddSeparator()
|
||||
{
|
||||
Border border = new Border
|
||||
{
|
||||
Height = 1.0,
|
||||
Margin = new Thickness(16.0, 5.0, 16.0, 5.0)
|
||||
};
|
||||
border.SetResourceReference(Border.BackgroundProperty, "SeparatorColor");
|
||||
MenuPanel.Children.Add(border);
|
||||
return this;
|
||||
}
|
||||
|
||||
public void ShowAtTray()
|
||||
{
|
||||
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
|
||||
Rect workArea = SystemParameters.WorkArea;
|
||||
base.Opacity = 0.0;
|
||||
Show();
|
||||
UpdateLayout();
|
||||
double actualWidth = base.ActualWidth;
|
||||
double actualHeight = base.ActualHeight;
|
||||
POINT cursorPosition = GetCursorPosition();
|
||||
double pixelsPerDip = VisualTreeHelper.GetDpi(this).PixelsPerDip;
|
||||
double num = (double)cursorPosition.X / pixelsPerDip;
|
||||
double num2 = (double)cursorPosition.Y / pixelsPerDip;
|
||||
double num3 = num - actualWidth - 8.0;
|
||||
double num4 = num2 - actualHeight - 8.0;
|
||||
if (num3 < ((Rect)(ref workArea)).Left)
|
||||
{
|
||||
num3 = ((Rect)(ref workArea)).Left + 4.0;
|
||||
}
|
||||
if (num4 < ((Rect)(ref workArea)).Top)
|
||||
{
|
||||
num4 = ((Rect)(ref workArea)).Top + 4.0;
|
||||
}
|
||||
if (num3 + actualWidth > ((Rect)(ref workArea)).Right)
|
||||
{
|
||||
num3 = ((Rect)(ref workArea)).Right - actualWidth - 4.0;
|
||||
}
|
||||
if (num4 + actualHeight > ((Rect)(ref workArea)).Bottom)
|
||||
{
|
||||
num4 = ((Rect)(ref workArea)).Bottom - actualHeight - 4.0;
|
||||
}
|
||||
base.Left = num3;
|
||||
base.Top = num4;
|
||||
Activate();
|
||||
DoubleAnimation animation = new DoubleAnimation(0.0, 1.0, TimeSpan.FromMilliseconds(120.0))
|
||||
{
|
||||
EasingFunction = new CubicEase
|
||||
{
|
||||
EasingMode = EasingMode.EaseOut
|
||||
}
|
||||
};
|
||||
BeginAnimation(UIElement.OpacityProperty, animation);
|
||||
}
|
||||
|
||||
public void ShowWithUpdate()
|
||||
{
|
||||
this.Opening?.Invoke();
|
||||
ShowAtTray();
|
||||
}
|
||||
|
||||
private Border CreateItemBorder(string glyph, string text)
|
||||
{
|
||||
TextBlock glyphBlock = new TextBlock
|
||||
{
|
||||
Text = glyph,
|
||||
FontFamily = new FontFamily("Segoe MDL2 Assets"),
|
||||
FontSize = 14.0,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
Width = 20.0,
|
||||
TextAlignment = TextAlignment.Center
|
||||
};
|
||||
glyphBlock.SetResourceReference(TextBlock.ForegroundProperty, "SecondaryText");
|
||||
TextBlock textBlock = new TextBlock
|
||||
{
|
||||
Text = text,
|
||||
FontSize = 13.0,
|
||||
VerticalAlignment = VerticalAlignment.Center
|
||||
};
|
||||
textBlock.SetResourceReference(TextBlock.ForegroundProperty, "PrimaryText");
|
||||
StackPanel child = new StackPanel
|
||||
{
|
||||
Orientation = Orientation.Horizontal,
|
||||
Children =
|
||||
{
|
||||
(UIElement)glyphBlock,
|
||||
(UIElement)textBlock
|
||||
}
|
||||
};
|
||||
Border border = new Border
|
||||
{
|
||||
Child = child,
|
||||
CornerRadius = new CornerRadius(6.0),
|
||||
Padding = new Thickness(12.0, 8.0, 16.0, 8.0),
|
||||
Cursor = Cursors.Hand,
|
||||
Background = Brushes.Transparent
|
||||
};
|
||||
border.MouseEnter += delegate
|
||||
{
|
||||
border.Background = (TryFindResource("ItemHoverBackground") as Brush) ?? Brushes.Transparent;
|
||||
glyphBlock.Foreground = (TryFindResource("AccentColor") as Brush) ?? Brushes.Blue;
|
||||
};
|
||||
border.MouseLeave += delegate
|
||||
{
|
||||
border.Background = Brushes.Transparent;
|
||||
glyphBlock.SetResourceReference(TextBlock.ForegroundProperty, "SecondaryText");
|
||||
};
|
||||
return border;
|
||||
}
|
||||
|
||||
private void Window_Deactivated(object sender, EventArgs e)
|
||||
{
|
||||
Hide();
|
||||
}
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
private static extern bool GetCursorPos(out POINT lpPoint);
|
||||
|
||||
private static POINT GetCursorPosition()
|
||||
{
|
||||
GetCursorPos(out var lpPoint);
|
||||
return lpPoint;
|
||||
}
|
||||
|
||||
[DebuggerNonUserCode]
|
||||
[GeneratedCode("PresentationBuildTasks", "10.0.5.0")]
|
||||
public void InitializeComponent()
|
||||
{
|
||||
if (!_contentLoaded)
|
||||
{
|
||||
_contentLoaded = true;
|
||||
Uri resourceLocator = new Uri("/AxCopilot;component/views/traymenuwindow.xaml", UriKind.Relative);
|
||||
Application.LoadComponent(this, resourceLocator);
|
||||
}
|
||||
}
|
||||
|
||||
[DebuggerNonUserCode]
|
||||
[GeneratedCode("PresentationBuildTasks", "10.0.5.0")]
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
void IComponentConnector.Connect(int connectionId, object target)
|
||||
{
|
||||
switch (connectionId)
|
||||
{
|
||||
case 1:
|
||||
((TrayMenuWindow)target).Deactivated += Window_Deactivated;
|
||||
break;
|
||||
case 2:
|
||||
RootBorder = (Border)target;
|
||||
break;
|
||||
case 3:
|
||||
MenuPanel = (StackPanel)target;
|
||||
break;
|
||||
default:
|
||||
_contentLoaded = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user