| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Runtime.CompilerServices;
 
- using System.Text;
 
- using System.Threading.Tasks;
 
- using System.Windows;
 
- using System.Windows.Controls;
 
- using System.Windows.Data;
 
- using System.Windows.Documents;
 
- using System.Windows.Input;
 
- using System.Windows.Media;
 
- using System.Windows.Media.Imaging;
 
- using System.Windows.Navigation;
 
- using System.Windows.Shapes;
 
- namespace ProximaAnalizer.Controls
 
- {
 
-     /// <summary>
 
-     /// Interaction logic for AlarmPicker.xaml
 
-     /// </summary>
 
-     public partial class AlarmPicker : UserControl
 
-     {
 
-         public AlarmPicker()
 
-         {
 
-             InitializeComponent();
 
-             this._keyboardHook = new();
 
-             this._keyboardHook.SetHook();
 
-             this._keyboardHook.SetOnKeyUpEvent(Win32_Keydown);
 
-         }
 
-         private KeyboardHook _keyboardHook;
 
-         private void Win32_Keydown(Key key)
 
-         {
 
-             switch (key)
 
-             {
 
-                 case Key.Enter:
 
-                     if (this.SelectedPage > this.TotalPage || this.SelectedPage <= 0)
 
-                         return;
 
-                     this.Display = this.AlarmSource.Skip((int)(this.SelectedPage - 1) * (int)this.ItemsPerPage).Take((int)this.ItemsPerPage).ToDictionary();
 
-                     break;
 
-                 case Key.Right:
 
-                     this.Next_Click(this, default);
 
-                     break;
 
-                 case Key.Left:
 
-                     this.Prev_Click(this, default);
 
-                     break;
 
-                 case Key.Home:
 
-                     this.Home_Click(this, default);
 
-                     break;
 
-                 case Key.End:
 
-                     this.End_Click(this, default);
 
-                     break;
 
-                 case Key.Escape:
 
-                     this.IsPopOpen = false;
 
-                     break;
 
-                 default:
 
-                     break;
 
-             }
 
-         }
 
-         public object SelectedAlarm
 
-         {
 
-             get { return (object)GetValue(SelectedAlarmProperty); }
 
-             set { SetValue(SelectedAlarmProperty, value); }
 
-         }
 
-         // Using a DependencyProperty as the backing store for SelectedAlarm.  This enables animation, styling, binding, etc...
 
-         public static readonly DependencyProperty SelectedAlarmProperty =
 
-             DependencyProperty.Register("SelectedAlarm", typeof(object), typeof(AlarmPicker), new System.Windows.PropertyMetadata(default));
 
-         private IDictionary<DateTime, StringBuilder> Display
 
-         {
 
-             get { return (IDictionary<DateTime, StringBuilder>)GetValue(DisplayProperty); }
 
-             set { SetValue(DisplayProperty, value); }
 
-         }
 
-         public static readonly DependencyProperty DisplayProperty =
 
-             DependencyProperty.Register("Display", typeof(IDictionary<DateTime, StringBuilder>), typeof(AlarmPicker), new System.Windows.PropertyMetadata(default));
 
-         public IDictionary<DateTime, StringBuilder> AlarmSource
 
-         {
 
-             get { return (IDictionary<DateTime, StringBuilder>)GetValue(AlarmSourceProperty); }
 
-             set { SetValue(AlarmSourceProperty, value); }
 
-         }
 
-         public static readonly DependencyProperty AlarmSourceProperty =
 
-             DependencyProperty.Register("AlarmSource", typeof(IDictionary<DateTime, StringBuilder>), typeof(AlarmPicker), new System.Windows.PropertyMetadata(default, AlarmChangedCallback));
 
-         private static void AlarmChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
 
-         {
 
-             if (d is not AlarmPicker alarmPicker)
 
-                 return;
 
-             if (e.NewValue is not IDictionary<DateTime, StringBuilder> alarms)
 
-                 return;
 
-             if (alarmPicker.ItemsPerPage == 0)
 
-                 alarmPicker.ItemsPerPage = 10;
 
-             alarmPicker.Display = alarms.Take(10).ToDictionary();
 
-             alarmPicker.SelectedPage = 1;
 
-             alarmPicker.TotalPage = (uint)(alarms.Count / alarmPicker.ItemsPerPage);
 
-             if ((alarms.Count % alarmPicker.ItemsPerPage) != 0)
 
-                 alarmPicker.TotalPage += 1;
 
-         }
 
-         public uint ItemsPerPage
 
-         {
 
-             get { return (uint)GetValue(ItemsPerPageProperty); }
 
-             set { SetValue(ItemsPerPageProperty, value); }
 
-         }
 
-         // Using a DependencyProperty as the backing store for ItemsPerPage.  This enables animation, styling, binding, etc...
 
-         public static readonly DependencyProperty ItemsPerPageProperty =
 
-             DependencyProperty.Register("ItemsPerPage", typeof(uint), typeof(AlarmPicker), new System.Windows.PropertyMetadata((uint)10));
 
-         public uint SelectedPage
 
-         {
 
-             get { return (uint)GetValue(SelectedPageProperty); }
 
-             set { SetValue(SelectedPageProperty, value); }
 
-         }
 
-         // Using a DependencyProperty as the backing store for SelectedPage.  This enables animation, styling, binding, etc...
 
-         public static readonly DependencyProperty SelectedPageProperty =
 
-             DependencyProperty.Register("SelectedPage", typeof(uint), typeof(AlarmPicker), new System.Windows.PropertyMetadata(default));
 
-         public uint TotalPage
 
-         {
 
-             get { return (uint)GetValue(TotalPageProperty); }
 
-             set { SetValue(TotalPageProperty, value); }
 
-         }
 
-         // Using a DependencyProperty as the backing store for TotalPage.  This enables animation, styling, binding, etc...
 
-         public static readonly DependencyProperty TotalPageProperty =
 
-             DependencyProperty.Register("TotalPage", typeof(uint), typeof(AlarmPicker), new System.Windows.PropertyMetadata(default));
 
-         public bool IsPopOpen
 
-         {
 
-             get { return (bool)GetValue(IsPopOpenProperty); }
 
-             set { SetValue(IsPopOpenProperty, value); }
 
-         }
 
-         // Using a DependencyProperty as the backing store for IsPopOpen.  This enables animation, styling, binding, etc...
 
-         public static readonly DependencyProperty IsPopOpenProperty =
 
-             DependencyProperty.Register("IsPopOpen", typeof(bool), typeof(AlarmPicker), new System.Windows.PropertyMetadata(false, PopChangedCallback));
 
-         private static void PopChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
 
-         {
 
-             if (d is not AlarmPicker alarmPicker)
 
-                 return;
 
-             if (e.NewValue is not bool isPop)
 
-                 return;
 
-             switch (isPop)
 
-             {
 
-                 case true:
 
-                     alarmPicker._keyboardHook?.UnHook();
 
-                     alarmPicker._keyboardHook = new();
 
-                     alarmPicker._keyboardHook.SetHook();
 
-                     alarmPicker._keyboardHook.SetOnKeyUpEvent(alarmPicker.Win32_Keydown);
 
-                     break;
 
-                 case false:
 
-                     alarmPicker._keyboardHook.UnHook();
 
-                     break;
 
-             }
 
-         }
 
-         private void Button_Click(object sender, RoutedEventArgs e)
 
-         {
 
-             if (sender is not Button button)
 
-                 return;
 
-             this.SelectedAlarm = button.CommandParameter;
 
-             this.IsPopOpen = false;
 
-         }
 
-         private void Next_Click(object sender, RoutedEventArgs? e)
 
-         {
 
-             if (this.SelectedPage == this.TotalPage)
 
-                 return;
 
-             this.SelectedPage++;
 
-             this.Display = this.AlarmSource.Skip((int)(this.SelectedPage - 1) * (int)this.ItemsPerPage).Take((int)this.ItemsPerPage).ToDictionary();
 
-         }
 
-         private void Prev_Click(object sender, RoutedEventArgs? e)
 
-         {
 
-             if (this.SelectedPage == 1)
 
-                 return;
 
-             this.SelectedPage--;
 
-             this.Display = this.AlarmSource.Skip((int)(this.SelectedPage - 1) * (int)this.ItemsPerPage).Take((int)this.ItemsPerPage).ToDictionary();
 
-         }
 
-         private void Home_Click(object sender, RoutedEventArgs? e)
 
-         {
 
-             this.SelectedPage = 1;
 
-             this.Display = this.AlarmSource.Take((int)this.ItemsPerPage).ToDictionary();
 
-         }
 
-         private void End_Click(object sender, RoutedEventArgs? e)
 
-         {
 
-             this.SelectedPage = this.TotalPage;
 
-             this.Display = this.AlarmSource.TakeLast((int)this.ItemsPerPage).ToDictionary();
 
-         }
 
-         private void Pop_Click(object sender, RoutedEventArgs? e)
 
-         {
 
-             this.IsPopOpen = true;
 
-         }
 
-     }
 
- }
 
 
  |