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 { /// /// BacklogInfoWindow.xaml 的交互逻辑 /// 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; } /// /// 点击关闭按钮 /// /// /// private void Close_Button_Click(object sender, RoutedEventArgs e) { this.Close(); } /// /// 移动窗口 /// /// /// private void DragMove(object sender, System.Windows.Input.MouseButtonEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) { DragMove(); } } /// /// 保存待办 /// /// /// 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(); } } } }