123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- using GeekDesk.Constant;
- using GeekDesk.Interface;
- using GeekDesk.Util;
- using GeekDesk.ViewModel;
- using HandyControl.Controls;
- using Quartz;
- using System;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Input;
- namespace GeekDesk.Control.Windows
- {
- /// <summary>
- /// BacklogInfoWindow.xaml 的交互逻辑
- /// </summary>
- public partial class ToDoInfoWindow : IWindowCommon
- {
- private static int windowType = -1;
- private static readonly int NEW_TODO = 1;
- private static readonly int DETAIL_TODO = 2;
- private AppData appData = MainWindow.appData;
- //private ToDoInfo info;
- private ToDoInfoWindow()
- {
- InitializeComponent();
- this.Topmost = true;
- DateTime time = DateTime.Now.AddMinutes(10);
- ExeTime.SelectedDateTime = time;
- SetTimePanel.Visibility = Visibility.Visible;
- this.DataContext = new ToDoInfo
- {
- ExeTime = time.ToString("yyyy-MM-dd HH:mm:ss")
- };
- }
- private ToDoInfoWindow(ToDoInfo info)
- {
- InitializeComponent();
- this.Topmost = true;
- this.DataContext = info;
- SetTimePanel.Visibility = Visibility.Visible;
- //Title.Text = info.Title;
- //Msg.Text = info.Msg;
- //ExeTime.Text = info.ExeTime;
- //DoneTime.Text = info.DoneTime;
- //this.info = info;
- }
- /// <summary>
- /// 点击关闭按钮
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void Close_Button_Click(object sender, RoutedEventArgs e)
- {
- this.Close();
- }
- /// <summary>
- /// 移动窗口
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void DragMove(object sender, System.Windows.Input.MouseButtonEventArgs e)
- {
- if (e.LeftButton == MouseButtonState.Pressed)
- {
- DragMove();
- }
- }
- /// <summary>
- /// 保存待办
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void Save_Button_Click(object sender, RoutedEventArgs e)
- {
- DateTime dt;
- string execTime;
- TodoTaskExecType execType;
- if (Title.Text.Trim() == "")
- {
- Growl.Warning("任务标题不能为空!");
- return;
- }
- else
- {
- if (SetTimePanel.Visibility == Visibility.Visible)
- {
- execType = TodoTaskExecType.SET_TIME;
- if (ExeTime.Text.Trim() == "")
- {
- Growl.Warning("执行时间不能为空!");
- return;
- }
- try
- {
- dt = Convert.ToDateTime(ExeTime.Text);
- }
- catch (Exception)
- {
- Growl.Warning("请输入正确的时间!");
- return;
- }
- execTime = ExeTime.Text;
- }
- else
- {
- execType = TodoTaskExecType.CRON;
- if (Cron.Text.Trim() == "")
- {
- Growl.Warning("Cron表达式不能为空!");
- return;
- }
- try
- {
- bool isValid = CronExpression.IsValidExpression(Cron.Text);
- if (!isValid) throw new Exception();
- }
- catch (Exception)
- {
- Growl.Warning("请输入正确的Cron表达式!");
- return;
- }
- CronExpression exp = new CronExpression(Cron.Text);
- DateTime dd = DateTime.Now;
- DateTimeOffset ddo = DateTime.SpecifyKind(dd, DateTimeKind.Local);
- ddo = (DateTimeOffset)exp.GetNextValidTimeAfter(ddo);
- execTime = ddo.LocalDateTime.ToString("yyyy-MM-dd HH:mm:ss");
- }
- }
- dt = Convert.ToDateTime(execTime);
- ToDoInfo info = new ToDoInfo
- {
- Title = Title.Text,
- Msg = Msg.Text,
- ExeTime = execTime,
- ExecType = execType,
- Cron = Cron.Text
- };
- if (windowType != NEW_TODO)
- {
- ToDoInfo tdi = this.DataContext as ToDoInfo;
- if (appData.HiToDoList.Contains(tdi))
- {
- appData.HiToDoList.Remove(tdi);
- }
- else if (appData.ToDoList.Contains(tdi))
- {
- appData.ToDoList.Remove(tdi);
- }
- }
- appData.ToDoList.Add(info);
- DateTime dtNow = DateTime.Now;
- TimeSpan ts = dt.Subtract(dtNow);
- int minutes = (int)Math.Ceiling(ts.TotalMinutes);
- if (minutes < 0)
- {
- minutes = 0;
- }
- if (minutes > 60)
- {
- int m = minutes % 60;
- int h = minutes / 60;
- Growl.SuccessGlobal("设置待办任务成功, 系统将在 " + h + " 小时零 " + m + " 分钟后提醒您!");
- }
- else
- {
- Growl.SuccessGlobal("设置待办任务成功, 系统将在 " + minutes + " 分钟后提醒您!");
- }
- CommonCode.SaveAppData(MainWindow.appData, Constants.DATA_FILE_PATH);
- this.Close();
- }
- private static System.Windows.Window window = null;
- public static void ShowNone()
- {
- if (window == null || !window.Activate())
- {
- window = new ToDoInfoWindow();
- window.Show();
- }
- windowType = NEW_TODO;
- window.Visibility = Visibility.Visible;
- }
- public static void ShowOrHide()
- {
- if (window == null || !window.Activate())
- {
- window = new ToDoInfoWindow();
- window.Show();
- }
- else
- {
- window.Close();
- }
- }
- public static System.Windows.Window GetThis()
- {
- if (window == null || !window.Activate())
- {
- window = new ToDoInfoWindow();
- window.Show();
- Keyboard.Focus(window);
- }
- window.Visibility = Visibility.Collapsed;
- windowType = NEW_TODO;
- return window;
- }
- private static System.Windows.Window window2 = null;
- public static void ShowDetail(ToDoInfo info)
- {
- if (window2 == null || !window2.Activate())
- {
- window2 = new ToDoInfoWindow(info);
- }
- windowType = DETAIL_TODO;
- window2.Show();
- Keyboard.Focus(window2);
- }
- private void ExecType_Checked(object sender, RoutedEventArgs e)
- {
- TodoTaskExecType tag = (TodoTaskExecType)Convert.ToInt32((sender as RadioButton).Tag.ToString());
- switch (tag)
- {
- case TodoTaskExecType.SET_TIME:
- SetTimePanel.Visibility = Visibility.Visible;
- CronPanel.Visibility = Visibility.Collapsed;
- break;
- default:
- CronPanel.Visibility = Visibility.Visible;
- SetTimePanel.Visibility = Visibility.Collapsed;
- break;
- }
- }
- public void OnKeyDown(object sender, KeyEventArgs e)
- {
- if (e.Key == Key.Escape)
- {
- this.DataContext = null;
- this.Close();
- }
- }
- }
- }
|