191 lines
4.9 KiB
C#
191 lines
4.9 KiB
C#
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.Interop;
|
|
using System.Windows.Markup;
|
|
using System.Windows.Media.Animation;
|
|
using System.Windows.Threading;
|
|
using AxCopilot.Models;
|
|
using AxCopilot.Services;
|
|
|
|
namespace AxCopilot.Views;
|
|
|
|
public class ReminderPopupWindow : Window, IComponentConnector
|
|
{
|
|
private const int GWL_EXSTYLE = -20;
|
|
|
|
private const int WS_EX_NOACTIVATE = 134217728;
|
|
|
|
private const int WS_EX_TOOLWINDOW = 128;
|
|
|
|
private readonly DispatcherTimer _timer;
|
|
|
|
private readonly EventHandler _tickHandler;
|
|
|
|
private int _remaining;
|
|
|
|
internal Border PopupBorder;
|
|
|
|
internal TextBlock UsageText;
|
|
|
|
internal Button CloseBtn;
|
|
|
|
internal TextBlock QuoteText;
|
|
|
|
internal TextBlock AuthorText;
|
|
|
|
internal ProgressBar CountdownBar;
|
|
|
|
private bool _contentLoaded;
|
|
|
|
[DllImport("user32.dll")]
|
|
private static extern nint GetWindowLongPtr(nint hwnd, int nIndex);
|
|
|
|
[DllImport("user32.dll")]
|
|
private static extern nint SetWindowLongPtr(nint hwnd, int nIndex, nint dwNewLong);
|
|
|
|
public ReminderPopupWindow(string quoteText, string? author, TimeSpan todayUsage, SettingsService settings)
|
|
{
|
|
//IL_017d: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0182: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_019c: Expected O, but got Unknown
|
|
InitializeComponent();
|
|
ReminderSettings cfg = settings.Settings.Reminder;
|
|
QuoteText.Text = quoteText;
|
|
if (!string.IsNullOrWhiteSpace(author))
|
|
{
|
|
AuthorText.Text = "— " + author;
|
|
AuthorText.Visibility = Visibility.Visible;
|
|
}
|
|
int num = (int)todayUsage.TotalHours;
|
|
int minutes = todayUsage.Minutes;
|
|
UsageText.Text = ((num > 0) ? $"오늘 총 {num}시간 {minutes}분 근무 중" : ((minutes >= 1) ? $"오늘 총 {minutes}분 근무 중" : "오늘 방금 시작했습니다"));
|
|
_remaining = Math.Max(3, cfg.DisplaySeconds);
|
|
CountdownBar.Maximum = _remaining;
|
|
CountdownBar.Value = _remaining;
|
|
base.Loaded += delegate
|
|
{
|
|
SetNoActivate();
|
|
PositionWindow(cfg.Corner);
|
|
AnimateIn();
|
|
};
|
|
_tickHandler = delegate
|
|
{
|
|
_remaining--;
|
|
CountdownBar.Value = _remaining;
|
|
if (_remaining <= 0)
|
|
{
|
|
Close();
|
|
}
|
|
};
|
|
_timer = new DispatcherTimer
|
|
{
|
|
Interval = TimeSpan.FromSeconds(1.0)
|
|
};
|
|
_timer.Tick += _tickHandler;
|
|
_timer.Start();
|
|
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
|
|
if ((int)e.Key == 13)
|
|
{
|
|
Close();
|
|
}
|
|
};
|
|
}
|
|
|
|
protected override void OnSourceInitialized(EventArgs e)
|
|
{
|
|
base.OnSourceInitialized(e);
|
|
SetNoActivate();
|
|
}
|
|
|
|
private void SetNoActivate()
|
|
{
|
|
nint handle = new WindowInteropHelper(this).Handle;
|
|
if (handle != IntPtr.Zero)
|
|
{
|
|
long num = GetWindowLongPtr(handle, -20);
|
|
SetWindowLongPtr(handle, -20, (nint)(num | 0x8000000 | 0x80));
|
|
}
|
|
}
|
|
|
|
private void PositionWindow(string corner)
|
|
{
|
|
//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.Left = (corner.Contains("left") ? (((Rect)(ref workArea)).Left + 20.0) : (((Rect)(ref workArea)).Right - base.ActualWidth - 20.0));
|
|
base.Top = (corner.Contains("top") ? (((Rect)(ref workArea)).Top + 20.0) : (((Rect)(ref workArea)).Bottom - base.ActualHeight - 20.0));
|
|
}
|
|
|
|
private void AnimateIn()
|
|
{
|
|
base.Opacity = 0.0;
|
|
DoubleAnimation animation = new DoubleAnimation(0.0, 1.0, TimeSpan.FromMilliseconds(280.0));
|
|
BeginAnimation(UIElement.OpacityProperty, animation);
|
|
}
|
|
|
|
private void CloseBtn_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
Close();
|
|
}
|
|
|
|
protected override void OnClosed(EventArgs e)
|
|
{
|
|
_timer.Stop();
|
|
_timer.Tick -= _tickHandler;
|
|
base.OnClosed(e);
|
|
}
|
|
|
|
[DebuggerNonUserCode]
|
|
[GeneratedCode("PresentationBuildTasks", "10.0.5.0")]
|
|
public void InitializeComponent()
|
|
{
|
|
if (!_contentLoaded)
|
|
{
|
|
_contentLoaded = true;
|
|
Uri resourceLocator = new Uri("/AxCopilot;component/views/reminderpopupwindow.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:
|
|
PopupBorder = (Border)target;
|
|
break;
|
|
case 2:
|
|
UsageText = (TextBlock)target;
|
|
break;
|
|
case 3:
|
|
CloseBtn = (Button)target;
|
|
CloseBtn.Click += CloseBtn_Click;
|
|
break;
|
|
case 4:
|
|
QuoteText = (TextBlock)target;
|
|
break;
|
|
case 5:
|
|
AuthorText = (TextBlock)target;
|
|
break;
|
|
case 6:
|
|
CountdownBar = (ProgressBar)target;
|
|
break;
|
|
default:
|
|
_contentLoaded = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|