MainWindow.xaml.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456
  1. using DraggAnimatedPanelExample;
  2. using GeekDesk.Constant;
  3. using GeekDesk.Control;
  4. using GeekDesk.Control.UserControls.Config;
  5. using GeekDesk.Control.Windows;
  6. using GeekDesk.Task;
  7. using GeekDesk.Thread;
  8. using GeekDesk.Util;
  9. using GeekDesk.ViewModel;
  10. using HandyControl.Data;
  11. using System;
  12. using System.Collections.ObjectModel;
  13. using System.Diagnostics;
  14. using System.Drawing;
  15. using System.IO;
  16. using System.Windows;
  17. using System.Windows.Controls;
  18. using System.Windows.Input;
  19. using System.Windows.Interop;
  20. using System.Windows.Media;
  21. using System.Windows.Media.Animation;
  22. using static GeekDesk.Util.ShowWindowFollowMouse;
  23. namespace GeekDesk
  24. {
  25. /// <summary>
  26. /// MainWindow.xaml 的交互逻辑
  27. /// </summary>
  28. ///
  29. public partial class MainWindow : Window
  30. {
  31. public static AppData appData = CommonCode.GetAppDataByFile();
  32. //public static ToDoInfoWindow toDoInfoWindow = (ToDoInfoWindow)ToDoInfoWindow.GetThis();
  33. public static ToDoInfoWindow toDoInfoWindow;
  34. public static int hotKeyId = -1;
  35. public static int toDoHotKeyId = -1;
  36. public static MainWindow mainWindow;
  37. public static MarginHide hide;
  38. public MainWindow()
  39. {
  40. LoadData();
  41. InitializeComponent();
  42. mainWindow = this;
  43. this.Topmost = true;
  44. this.Loaded += Window_Loaded;
  45. this.SizeChanged += MainWindow_Resize;
  46. ToDoTask.BackLogCheck();
  47. ////实例化隐藏 Hide类,进行时间timer设置
  48. hide = new MarginHide(this);
  49. if (appData.AppConfig.MarginHide)
  50. {
  51. hide.TimerSet();
  52. }
  53. }
  54. private void LoadData()
  55. {
  56. this.DataContext = appData;
  57. if (appData.MenuList.Count == 0)
  58. {
  59. appData.MenuList.Add(new MenuInfo() { MenuName = "NewMenu", MenuId = System.Guid.NewGuid().ToString(), MenuEdit = Visibility.Collapsed});
  60. }
  61. this.Width = appData.AppConfig.WindowWidth;
  62. this.Height = appData.AppConfig.WindowHeight;
  63. }
  64. void Window_Loaded(object sender, RoutedEventArgs e)
  65. {
  66. if (!appData.AppConfig.StartedShowPanel)
  67. {
  68. if (appData.AppConfig.AppAnimation)
  69. {
  70. this.Opacity = 0;
  71. } else
  72. {
  73. this.Visibility = Visibility.Collapsed;
  74. }
  75. } else
  76. {
  77. ShowApp();
  78. }
  79. RegisterHotKey(true);
  80. RegisterCreateToDoHotKey(true);
  81. if (!appData.AppConfig.SelfStartUped)
  82. {
  83. RegisterUtil.SetSelfStarting(appData.AppConfig.SelfStartUp, Constants.MY_NAME);
  84. }
  85. UpdateThread.Update();
  86. }
  87. /// <summary>
  88. /// 注册当前窗口的热键
  89. /// </summary>
  90. public static void RegisterHotKey(bool first)
  91. {
  92. try
  93. {
  94. if (appData.AppConfig.HotkeyModifiers != 0)
  95. {
  96. hotKeyId = GlobalHotKey.RegisterHotKey(appData.AppConfig.HotkeyModifiers, appData.AppConfig.Hotkey, () =>
  97. {
  98. if (MotionControl.hotkeyFinished)
  99. {
  100. if (mainWindow.Visibility == Visibility.Collapsed || mainWindow.Opacity == 0)
  101. {
  102. ShowApp();
  103. }
  104. else
  105. {
  106. HideApp();
  107. }
  108. }
  109. });
  110. }
  111. if (!first)
  112. {
  113. HandyControl.Controls.Growl.Success("GeekDesk快捷键注册成功(" + appData.AppConfig.HotkeyStr + ")!", "HotKeyGrowl");
  114. }
  115. }
  116. catch (Exception)
  117. {
  118. if (first)
  119. {
  120. HandyControl.Controls.Growl.WarningGlobal("GeekDesk启动快捷键已被其它程序占用(" + appData.AppConfig.HotkeyStr + ")!");
  121. }
  122. else
  123. {
  124. HandyControl.Controls.Growl.Warning("GeekDesk启动快捷键已被其它程序占用(" + appData.AppConfig.HotkeyStr + ")!", "HotKeyGrowl");
  125. }
  126. }
  127. }
  128. public static void FadeStoryBoard(int opacity, int milliseconds, Visibility visibility)
  129. {
  130. if (appData.AppConfig.AppAnimation)
  131. {
  132. DoubleAnimation opacityAnimation = new DoubleAnimation
  133. {
  134. From = mainWindow.Opacity,
  135. To = opacity,
  136. Duration = new Duration(TimeSpan.FromMilliseconds(milliseconds))
  137. };
  138. opacityAnimation.Completed += (s, e) =>
  139. {
  140. mainWindow.BeginAnimation(OpacityProperty, null);
  141. if (visibility == Visibility.Visible)
  142. {
  143. mainWindow.Opacity = 1;
  144. } else
  145. {
  146. mainWindow.Opacity = 0;
  147. }
  148. };
  149. Timeline.SetDesiredFrameRate(opacityAnimation, 30);
  150. mainWindow.BeginAnimation(OpacityProperty, opacityAnimation);
  151. } else
  152. {
  153. //防止关闭动画后 窗体仍是0透明度
  154. mainWindow.Opacity = 1;
  155. mainWindow.Visibility = visibility;
  156. }
  157. }
  158. /// <summary>
  159. /// 注册新建待办的热键
  160. /// </summary>
  161. public static void RegisterCreateToDoHotKey(bool first)
  162. {
  163. try
  164. {
  165. if (appData.AppConfig.ToDoHotkeyModifiers!=0)
  166. {
  167. //加载完毕注册热键
  168. toDoHotKeyId = GlobalHotKey.RegisterHotKey(appData.AppConfig.ToDoHotkeyModifiers, appData.AppConfig.ToDoHotkey, () =>
  169. {
  170. if (MotionControl.hotkeyFinished)
  171. {
  172. ToDoInfoWindow.ShowOrHide();
  173. }
  174. });
  175. }
  176. if (!first)
  177. {
  178. HandyControl.Controls.Growl.Success("新建待办任务快捷键注册成功(" + appData.AppConfig.ToDoHotkeyStr + ")!", "HotKeyGrowl");
  179. }
  180. }
  181. catch (Exception)
  182. {
  183. if (first)
  184. {
  185. HandyControl.Controls.Growl.WarningGlobal("新建待办任务快捷键已被其它程序占用(" + appData.AppConfig.ToDoHotkeyStr + ")!");
  186. }
  187. else
  188. {
  189. HandyControl.Controls.Growl.Warning("新建待办任务快捷键已被其它程序占用(" + appData.AppConfig.ToDoHotkeyStr + ")!", "HotKeyGrowl");
  190. }
  191. }
  192. }
  193. void MainWindow_Resize(object sender, System.EventArgs e)
  194. {
  195. if (this.DataContext != null)
  196. {
  197. AppData appData = this.DataContext as AppData;
  198. appData.AppConfig.WindowWidth = this.Width;
  199. appData.AppConfig.WindowHeight = this.Height;
  200. }
  201. }
  202. private void DragMove(object sender, MouseEventArgs e)
  203. {
  204. //if (e.LeftButton == MouseButtonState.Pressed)
  205. //{
  206. // this.DragMove();
  207. //}
  208. if (e.LeftButton == MouseButtonState.Pressed)
  209. {
  210. var windowMode = this.ResizeMode;
  211. if (this.ResizeMode != ResizeMode.NoResize)
  212. {
  213. this.ResizeMode = ResizeMode.NoResize;
  214. }
  215. this.UpdateLayout();
  216. /* 当点击拖拽区域的时候,让窗口跟着移动
  217. (When clicking the drag area, make the window follow) */
  218. DragMove();
  219. if (this.ResizeMode != windowMode)
  220. {
  221. this.ResizeMode = windowMode;
  222. }
  223. this.UpdateLayout();
  224. }
  225. }
  226. /// <summary>
  227. /// 关闭按钮单击事件
  228. /// </summary>
  229. /// <param name="sender"></param>
  230. /// <param name="e"></param>
  231. private void CloseButtonClick(object sender, RoutedEventArgs e)
  232. {
  233. if (appData.AppConfig.AppAnimation)
  234. {
  235. FadeStoryBoard(0, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Collapsed);
  236. } else
  237. {
  238. this.Visibility = Visibility.Collapsed;
  239. }
  240. }
  241. ///// <summary>
  242. ///// 左侧栏宽度改变 持久化
  243. ///// </summary>
  244. ///// <param name="sender"></param>
  245. ///// <param name="e"></param>
  246. //private void LeftCardResize(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
  247. //{
  248. // appData.AppConfig.MenuCardWidth = LeftColumn.Width.Value;
  249. //}
  250. /// <summary>
  251. /// 右键任务栏图标 显示主面板
  252. /// </summary>
  253. /// <param name="sender"></param>
  254. /// <param name="e"></param>
  255. private void ShowApp(object sender, RoutedEventArgs e)
  256. {
  257. ShowApp();
  258. }
  259. public static void ShowApp()
  260. {
  261. if (appData.AppConfig.FollowMouse)
  262. {
  263. ShowWindowFollowMouse.Show(mainWindow, MousePosition.CENTER, 0, 0, false);
  264. }
  265. FadeStoryBoard(1, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Visible);
  266. Keyboard.Focus(mainWindow);
  267. }
  268. public static void HideApp()
  269. {
  270. FadeStoryBoard(0, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Collapsed);
  271. }
  272. /// <summary>
  273. /// 图片图标单击事件
  274. /// </summary>
  275. /// <param name="sender"></param>
  276. /// <param name="e"></param>
  277. private void NotifyIcon_Click(object sender, RoutedEventArgs e)
  278. {
  279. if (this.Visibility == Visibility.Collapsed || this.Opacity == 0)
  280. {
  281. ShowApp();
  282. }
  283. else
  284. {
  285. HideApp();
  286. }
  287. }
  288. /// <summary>
  289. /// 右键任务栏图标 设置
  290. /// </summary>
  291. /// <param name="sender"></param>
  292. /// <param name="e"></param>
  293. private void ConfigApp(object sender, RoutedEventArgs e)
  294. {
  295. ConfigWindow.Show(appData.AppConfig, this);
  296. }
  297. /// <summary>
  298. /// 右键任务栏图标打开程序目录
  299. /// </summary>
  300. /// <param name="sender"></param>
  301. /// <param name="e"></param>
  302. private void OpenThisDir(object sender, RoutedEventArgs e)
  303. {
  304. Process p = new Process();
  305. p.StartInfo.FileName = "Explorer.exe";
  306. p.StartInfo.Arguments = "/e,/select," + Constants.APP_DIR + Constants.MY_NAME + ".exe";
  307. p.Start();
  308. }
  309. /// <summary>
  310. /// 右键任务栏图标退出
  311. /// </summary>
  312. /// <param name="sender"></param>
  313. /// <param name="e"></param>
  314. private void ExitApp(object sender, RoutedEventArgs e)
  315. {
  316. Application.Current.Shutdown();
  317. }
  318. /// <summary>
  319. /// 设置图标
  320. /// </summary>
  321. /// <param name="sender"></param>
  322. /// <param name="e"></param>
  323. private void ConfigButtonClick(object sender, RoutedEventArgs e)
  324. {
  325. SettingMenus.IsOpen = true;
  326. }
  327. /// <summary>
  328. /// 设置菜单点击
  329. /// </summary>
  330. /// <param name="sender"></param>
  331. /// <param name="e"></param>
  332. private void ConfigMenuClick(object sender, RoutedEventArgs e)
  333. {
  334. ConfigWindow.Show(appData.AppConfig, this);
  335. }
  336. /// <summary>
  337. /// 待办任务
  338. /// </summary>
  339. /// <param name="sender"></param>
  340. /// <param name="e"></param>
  341. private void BacklogMenuClick(object sender, RoutedEventArgs e)
  342. {
  343. ToDoWindow.Show();
  344. }
  345. /// <summary>
  346. /// 禁用设置按钮右键菜单
  347. /// </summary>
  348. /// <param name="sender"></param>
  349. /// <param name="e"></param>
  350. private void SettingButton_Initialized(object sender, EventArgs e)
  351. {
  352. SettingButton.ContextMenu = null;
  353. }
  354. private void App_LostFocus(object sender, RoutedEventArgs e)
  355. {
  356. if (appData.AppConfig.AppHideType == AppHideType.LOST_FOCUS)
  357. {
  358. //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口
  359. if (appData.AppConfig.MarginHide && !hide.IsMargin())
  360. {
  361. this.Visibility = Visibility.Collapsed;
  362. }
  363. }
  364. }
  365. private void Window_Deactivated(object sender, EventArgs e)
  366. {
  367. if (appData.AppConfig.AppHideType == AppHideType.LOST_FOCUS)
  368. {
  369. this.Visibility = Visibility.Collapsed;
  370. }
  371. }
  372. private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
  373. {
  374. if (this.DataContext != null)
  375. {
  376. AppData appData = this.DataContext as AppData;
  377. appData.AppConfig.WindowWidth = this.Width;
  378. appData.AppConfig.WindowHeight = this.Height;
  379. }
  380. }
  381. /// <summary>
  382. /// 重启
  383. /// </summary>
  384. /// <param name="sender"></param>
  385. /// <param name="e"></param>
  386. private void ReStartApp(object sender, RoutedEventArgs e)
  387. {
  388. Process p = new Process();
  389. p.StartInfo.FileName = Constants.APP_DIR + Constants.MY_NAME + ".exe";
  390. p.StartInfo.WorkingDirectory = Constants.APP_DIR;
  391. p.Start();
  392. Application.Current.Shutdown();
  393. }
  394. }
  395. }