| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | using InABox.Wpf;using System;using System.ComponentModel;using System.Runtime.CompilerServices;using System.Windows;using System.Windows.Controls;using System.Windows.Media;using System.Windows.Media.Animation;namespace InABox.WPF{    /// <summary>    ///     Interaction logic for ProgressForm.xaml    /// </summary>    public partial class ProgressForm : ThemableWindow, INotifyPropertyChanged    {        private ImageSource? _image = null;        private DoubleAnimation _fader = new DoubleAnimation(1d, 0.3d, new Duration(TimeSpan.FromMilliseconds(3000))) { AutoReverse = true };        public string CancelText { get; init; }        public bool HasCancelButton { get; init; }        public delegate void CancelledEvent();        public event CancelledEvent? OnCancelled;        public Visibility CancelButtonVisibility => HasCancelButton ? Visibility.Visible : Visibility.Collapsed;        private string _message;        public string Message        {            get => _message;            set            {                _message = value;                Progress.Content = _message;            }        }        private ProgressForm(string cancelText, bool hasCancelButton)        {            CancelText = cancelText;            HasCancelButton = hasCancelButton;            InitializeComponent();            Topmost = true;            Loaded += (sender, args) =>            {                _fader.Completed += (o, e) => Splash.BeginAnimation(Image.OpacityProperty, _fader);                Splash.BeginAnimation(Image.OpacityProperty, _fader);            };        }        public ProgressForm(): this("", false) { }        public ProgressForm(string cancelText): this(cancelText, true) { }                public ImageSource? DisplayImage        {            get => Splash.Source;            set => Splash.Source = value;        }                public void UpdateWindow(string message)        {            if (Progress.Dispatcher.CheckAccess())                Message = message;            else                Progress.Dispatcher.Invoke(() => { Message = message; });        }        public void CloseWindow()        {            if (Progress.Dispatcher.CheckAccess())                Close();            else                Progress.Dispatcher.Invoke(() => { Close(); });        }        public string GetMessage()        {            return Message;        }        private void Window_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)        {            if(e.ChangedButton == System.Windows.Input.MouseButton.Left)            {                DragMove();            }        }        private void CancelButton_Click(object sender, RoutedEventArgs e)        {            OnCancelled?.Invoke();        }        public event PropertyChangedEventHandler? PropertyChanged;        protected void OnPropertyChanged([CallerMemberName] string propertyName = "")        {            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));        }    }}
 |