AppConfig.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785
  1. 
  2. using GeekDesk.Constant;
  3. using GeekDesk.Util;
  4. using GeekDesk.ViewModel.Temp;
  5. using Newtonsoft.Json;
  6. using System;
  7. using System.Collections.ObjectModel;
  8. using System.ComponentModel;
  9. using System.Windows;
  10. using System.Windows.Input;
  11. using System.Windows.Media.Imaging;
  12. using static GeekDesk.Util.GlobalHotKey;
  13. /// <summary>
  14. /// 程序设置
  15. /// </summary>
  16. namespace GeekDesk.ViewModel
  17. {
  18. [Serializable]
  19. public class AppConfig : INotifyPropertyChanged
  20. {
  21. private SortType menuSortType = SortType.CUSTOM; //菜单排序类型
  22. private SortType iconSortType = SortType.CUSTOM; //图表排序类型
  23. private double windowWidth = (double)CommonEnum.WINDOW_WIDTH; //窗口宽度
  24. private double windowHeight = (double)CommonEnum.WINDOW_HEIGHT; //窗口高度
  25. private double menuCardWidth = (double)CommonEnum.MENU_CARD_WIDHT;//菜单栏宽度
  26. private int selectedMenuIndex = 0; //上次选中菜单索引
  27. private bool followMouse = true; //面板跟随鼠标 默认是
  28. private Visibility configIconVisible = Visibility.Visible; // 设置按钮是否显示
  29. private AppHideType appHideType = AppHideType.START_EXE; //面板关闭方式 (默认启动程序后)
  30. private bool startedShowPanel = true; //启动时是否显示主面板 默认显示
  31. [field: NonSerialized]
  32. private BitmapImage bitmapImage; //位图
  33. private byte[] imageByteArr; //背景图片 byte数组
  34. private string bacImgName = "系统默认";
  35. private int cardOpacity = 10; //默认0.1的不透明度 此处显示数值 * 100
  36. private int bgOpacity = 100; // 背景图片不透明度 此处显示数值 * 100
  37. private int pannelOpacity = 100; //主面板不透明度 此处显示数值 * 100
  38. private int pannelCornerRadius = 4; //面板圆角 默认4
  39. [field: NonSerialized]
  40. private ObservableCollection<IconInfo> selectedMenuIcons;
  41. private string hotkeyStr = "Ctrl + Q"; //默认启动面板快捷键
  42. private HotkeyModifiers hotkeyModifiers = HotkeyModifiers.MOD_CONTROL; //默认启动面板快捷键
  43. private Key hotkey = Key.Q; //默认启动面板快捷键
  44. private string toDoHotkeyStr = "Ctrl + Shift + Q"; //待办任务快捷键
  45. private HotkeyModifiers toDoHotkeyModifiers; //待办任务快捷键
  46. private Key toDoHotkey = Key.E; //待办任务快捷键
  47. private string customIconUrl; //自定义图标url
  48. private string customIconJsonUrl; //自定义图标json信息url
  49. private bool blurEffect = false; //毛玻璃效果 默认否
  50. private double blurValue;
  51. private UpdateType updateType = UpdateType.Gitee; //更新源 默认gitee源
  52. private bool selfStartUp = true; //开机自启动设置
  53. private bool selfStartUped = false; //是否已设置
  54. private bool pmModel = false; //性能模式
  55. private string textColor = "#000000"; //字体颜色
  56. private double imgPanelWidth = (double)CommonEnum.IMAGE_PANEL_WIDTH;
  57. private double imgPanelHeight = (double)CommonEnum.IMAGE_PANEL_HEIGHT;
  58. private bool marginHide = false; //贴边隐藏
  59. private bool appAnimation = false; //主窗口动画效果
  60. private int imageWidth = (int)CommonEnum.IMAGE_WIDTH; //图片宽度
  61. private int imageHeight = (int)CommonEnum.IMAGE_HEIGHT; //图片高度
  62. private bool mouseMiddleShow = false; //鼠标中键呼出 默认不启用
  63. private bool showBarIcon = true; //显示托盘图标 默认显示
  64. private bool doubleOpen = false; //双击打开项目 默认关闭
  65. private bool hoverMenu = false; //悬停切换菜单 默认关闭
  66. private BGStyle bgStyle = BGStyle.ImgBac; //背景风格
  67. private GradientBGParam gradientBGParam = null; //渐变背景参数
  68. #region GetSet
  69. public GradientBGParam GradientBGParam
  70. {
  71. get
  72. {
  73. if (gradientBGParam == null)
  74. {
  75. gradientBGParam = GradientBGParamList.GradientBGParams[0];
  76. }
  77. return gradientBGParam;
  78. }
  79. set
  80. {
  81. gradientBGParam = value;
  82. OnPropertyChanged("GradientBGParam");
  83. }
  84. }
  85. public BGStyle BGStyle
  86. {
  87. get
  88. {
  89. return bgStyle;
  90. }
  91. set
  92. {
  93. bgStyle = value;
  94. OnPropertyChanged("BGStyle");
  95. }
  96. }
  97. public bool HoverMenu
  98. {
  99. get
  100. {
  101. return hoverMenu;
  102. }
  103. set
  104. {
  105. hoverMenu = value;
  106. OnPropertyChanged("HoverMenu");
  107. }
  108. }
  109. public bool DoubleOpen
  110. {
  111. get
  112. {
  113. return doubleOpen;
  114. }
  115. set
  116. {
  117. doubleOpen = value;
  118. OnPropertyChanged("DoubleOpen");
  119. }
  120. }
  121. public bool ShowBarIcon
  122. {
  123. get
  124. {
  125. return showBarIcon;
  126. }
  127. set
  128. {
  129. showBarIcon = value;
  130. OnPropertyChanged("ShowBarIcon");
  131. }
  132. }
  133. public bool MouseMiddleShow
  134. {
  135. get
  136. {
  137. return mouseMiddleShow;
  138. }
  139. set
  140. {
  141. mouseMiddleShow = value;
  142. OnPropertyChanged("MouseMiddleShow");
  143. }
  144. }
  145. public int ImageWidth
  146. {
  147. get
  148. {
  149. // 为了兼容旧版 暂时使用默认
  150. if (imageWidth == 0)
  151. {
  152. return (int)CommonEnum.IMAGE_WIDTH;
  153. }
  154. else
  155. {
  156. return imageWidth;
  157. }
  158. }
  159. set
  160. {
  161. imageWidth = value;
  162. //同时设置高度
  163. ImageHeight = value;
  164. //计算 容器宽度因子
  165. double i = ((double)imageWidth - (double)CommonEnum.IMAGE_WIDTH) / 5d;
  166. double s = 2.44;
  167. i *= 2d;
  168. while (i > 1)
  169. {
  170. i /= 10d;
  171. }
  172. if (i > 0d)
  173. {
  174. s -= i;
  175. }
  176. if (s < 2.2)
  177. {
  178. s = 2.2;
  179. }
  180. //设置容器宽度
  181. ImgPanelWidth = (int)(ImageWidth * s);
  182. OnPropertyChanged("ImageWidth");
  183. }
  184. }
  185. public int ImageHeight
  186. {
  187. get
  188. {
  189. //都使用宽度来确定大小
  190. // 为了兼容旧版 暂时使用默认
  191. if (imageHeight == 0)
  192. {
  193. return (int)CommonEnum.IMAGE_HEIGHT;
  194. }
  195. else
  196. {
  197. return imageHeight;
  198. }
  199. }
  200. set
  201. {
  202. imageHeight = value;
  203. //计算容器高度因子
  204. double i = ((double)imageHeight - (double)CommonEnum.IMAGE_HEIGHT) / 5d;
  205. while (i > 1)
  206. {
  207. i /= 10d;
  208. }
  209. double s = 2.00;
  210. if (i > 0d)
  211. {
  212. s -= i;
  213. }
  214. if (s < 1.5) s = 1.5;
  215. //设置容器高度
  216. ImgPanelHeight = ImageHeight * s;
  217. OnPropertyChanged("ImageHeight");
  218. }
  219. }
  220. public bool AppAnimation
  221. {
  222. get
  223. {
  224. return appAnimation;
  225. }
  226. set
  227. {
  228. appAnimation = value;
  229. OnPropertyChanged("AppAnimation");
  230. }
  231. }
  232. public bool MarginHide
  233. {
  234. get
  235. {
  236. return marginHide;
  237. }
  238. set
  239. {
  240. marginHide = value;
  241. OnPropertyChanged("MarginHide");
  242. }
  243. }
  244. public double ImgPanelWidth
  245. {
  246. get
  247. {
  248. if (imgPanelWidth == 0d) return (double)CommonEnum.IMAGE_PANEL_WIDTH;
  249. return imgPanelWidth;
  250. }
  251. set
  252. {
  253. imgPanelWidth = value;
  254. OnPropertyChanged("ImgPanelWidth");
  255. }
  256. }
  257. public double ImgPanelHeight
  258. {
  259. get
  260. {
  261. if (imgPanelHeight == 0d) return (double)CommonEnum.IMAGE_PANEL_HEIGHT;
  262. return imgPanelHeight;
  263. }
  264. set
  265. {
  266. imgPanelHeight = value;
  267. OnPropertyChanged("ImgPanelHeight");
  268. }
  269. }
  270. public string TextColor
  271. {
  272. get
  273. {
  274. if (textColor == null) return "#000000";
  275. return textColor;
  276. }
  277. set
  278. {
  279. textColor = value;
  280. OnPropertyChanged("TextColor");
  281. }
  282. }
  283. public bool PMModel
  284. {
  285. get
  286. {
  287. return pmModel;
  288. }
  289. set
  290. {
  291. pmModel = value;
  292. OnPropertyChanged("PMModel");
  293. }
  294. }
  295. public bool SelfStartUped
  296. {
  297. get
  298. {
  299. return selfStartUped;
  300. }
  301. set
  302. {
  303. selfStartUped = value;
  304. OnPropertyChanged("SelfStartUped");
  305. }
  306. }
  307. public bool SelfStartUp
  308. {
  309. get
  310. {
  311. return selfStartUp;
  312. }
  313. set
  314. {
  315. selfStartUp = value;
  316. selfStartUped = true;
  317. OnPropertyChanged("SelfStartUp");
  318. }
  319. }
  320. public Key ToDoHotkey
  321. {
  322. get
  323. {
  324. //兼容老版本
  325. if (toDoHotkey == Key.None)
  326. {
  327. toDoHotkey = Key.Q;
  328. }
  329. return toDoHotkey;
  330. }
  331. set
  332. {
  333. toDoHotkey = value;
  334. OnPropertyChanged("ToDoHotkey");
  335. }
  336. }
  337. public HotkeyModifiers ToDoHotkeyModifiers
  338. {
  339. get
  340. {
  341. if (toDoHotkeyModifiers == 0)
  342. {
  343. toDoHotkeyModifiers = HotkeyModifiers.MOD_CONTROL | HotkeyModifiers.MOD_SHIFT;
  344. }
  345. return toDoHotkeyModifiers;
  346. }
  347. set
  348. {
  349. toDoHotkeyModifiers = value;
  350. OnPropertyChanged("ToDoHotkeyModifiers");
  351. }
  352. }
  353. public string ToDoHotkeyStr
  354. {
  355. get
  356. {
  357. //兼容老版本
  358. if (toDoHotkeyStr == null)
  359. {
  360. toDoHotkeyStr = "Ctrl + Shift + Q";
  361. }
  362. return toDoHotkeyStr;
  363. }
  364. set
  365. {
  366. toDoHotkeyStr = value;
  367. OnPropertyChanged("ToDoHotkeyStr");
  368. }
  369. }
  370. public UpdateType UpdateType
  371. {
  372. get
  373. {
  374. return updateType;
  375. }
  376. set
  377. {
  378. updateType = value;
  379. OnPropertyChanged("UpdateType");
  380. }
  381. }
  382. public double BlurValue
  383. {
  384. get
  385. {
  386. return blurValue;
  387. }
  388. set
  389. {
  390. blurValue = value;
  391. OnPropertyChanged("BlurValue");
  392. }
  393. }
  394. public bool BlurEffect
  395. {
  396. get
  397. {
  398. return blurEffect;
  399. }
  400. set
  401. {
  402. blurEffect = value;
  403. if (blurEffect)
  404. {
  405. BlurValue = 100;
  406. }
  407. else
  408. {
  409. BlurValue = 0;
  410. }
  411. OnPropertyChanged("BlurEffect");
  412. }
  413. }
  414. public string CustomIconUrl
  415. {
  416. get
  417. {
  418. return customIconUrl;
  419. }
  420. set
  421. {
  422. customIconUrl = value;
  423. OnPropertyChanged("CustomIconUrl");
  424. }
  425. }
  426. public string CustomIconJsonUrl
  427. {
  428. get
  429. {
  430. return customIconJsonUrl;
  431. }
  432. set
  433. {
  434. customIconJsonUrl = value;
  435. OnPropertyChanged("CustomIconJsonUrl");
  436. }
  437. }
  438. public Key Hotkey
  439. {
  440. get
  441. {
  442. return hotkey;
  443. }
  444. set
  445. {
  446. hotkey = value;
  447. OnPropertyChanged("Hotkey");
  448. }
  449. }
  450. public string HotkeyStr
  451. {
  452. get
  453. {
  454. return hotkeyStr;
  455. }
  456. set
  457. {
  458. hotkeyStr = value;
  459. OnPropertyChanged("HotkeyStr");
  460. }
  461. }
  462. public HotkeyModifiers HotkeyModifiers
  463. {
  464. get
  465. {
  466. if (hotkeyModifiers == 0)
  467. {
  468. hotkeyModifiers = HotkeyModifiers.MOD_CONTROL;
  469. }
  470. return hotkeyModifiers;
  471. }
  472. set
  473. {
  474. hotkeyModifiers = value;
  475. OnPropertyChanged("HotkeyModifiers");
  476. }
  477. }
  478. public ObservableCollection<IconInfo> SelectedMenuIcons
  479. {
  480. get
  481. {
  482. return selectedMenuIcons;
  483. }
  484. set
  485. {
  486. selectedMenuIcons = value;
  487. OnPropertyChanged("SelectedMenuIcons");
  488. }
  489. }
  490. public int PannelCornerRadius
  491. {
  492. get
  493. {
  494. return pannelCornerRadius;
  495. }
  496. set
  497. {
  498. pannelCornerRadius = value;
  499. OnPropertyChanged("pannelCornerRadius");
  500. }
  501. }
  502. public int PannelOpacity
  503. {
  504. get
  505. {
  506. return pannelOpacity;
  507. }
  508. set
  509. {
  510. pannelOpacity = value;
  511. OnPropertyChanged("PannelOpacity");
  512. }
  513. }
  514. public int BgOpacity
  515. {
  516. get
  517. {
  518. return bgOpacity;
  519. }
  520. set
  521. {
  522. bgOpacity = value;
  523. OnPropertyChanged("BgOpacity");
  524. }
  525. }
  526. public int CardOpacity
  527. {
  528. get
  529. {
  530. return cardOpacity;
  531. }
  532. set
  533. {
  534. cardOpacity = value;
  535. OnPropertyChanged("CardOpacity");
  536. }
  537. }
  538. public string BacImgName
  539. {
  540. get
  541. {
  542. return bacImgName;
  543. }
  544. set
  545. {
  546. bacImgName = value;
  547. OnPropertyChanged("BacImgName");
  548. }
  549. }
  550. public byte[] ImageByteArr
  551. {
  552. get
  553. {
  554. return imageByteArr;
  555. }
  556. set
  557. {
  558. imageByteArr = value;
  559. OnPropertyChanged("ImageByteArr");
  560. }
  561. }
  562. public BitmapImage BitmapImage
  563. {
  564. get
  565. {
  566. if (imageByteArr == null || imageByteArr.Length == 0)
  567. {
  568. bacImgName = "系统默认";
  569. //Image image = ImageUtil.ByteArrayToImage(Convert.FromBase64String(Constants.DEFAULT_BAC_IMAGE_BASE64));
  570. return ImageUtil.ByteArrToImage(Convert.FromBase64String(Constants.DEFAULT_BAC_IMAGE_BASE64));
  571. }
  572. else
  573. {
  574. return ImageUtil.ByteArrToImage(ImageByteArr);
  575. }
  576. }
  577. set
  578. {
  579. bitmapImage = value;
  580. imageByteArr = ImageUtil.BitmapImageToByte(bitmapImage);
  581. OnPropertyChanged("BitmapImage");
  582. }
  583. }
  584. public bool StartedShowPanel
  585. {
  586. get
  587. {
  588. return startedShowPanel;
  589. }
  590. set
  591. {
  592. startedShowPanel = value;
  593. OnPropertyChanged("StartedShowPanel");
  594. }
  595. }
  596. public AppHideType AppHideType
  597. {
  598. get
  599. {
  600. return appHideType;
  601. }
  602. set
  603. {
  604. appHideType = value;
  605. OnPropertyChanged("AppHideType");
  606. }
  607. }
  608. public Visibility ConfigIconVisible
  609. {
  610. get
  611. {
  612. return configIconVisible;
  613. }
  614. set
  615. {
  616. configIconVisible = value;
  617. OnPropertyChanged("ConfigIconVisible");
  618. }
  619. }
  620. public bool FollowMouse
  621. {
  622. get
  623. {
  624. return followMouse;
  625. }
  626. set
  627. {
  628. followMouse = value;
  629. OnPropertyChanged("FollowMouse");
  630. }
  631. }
  632. public int SelectedMenuIndex
  633. {
  634. get
  635. {
  636. return selectedMenuIndex;
  637. }
  638. set
  639. {
  640. selectedMenuIndex = value;
  641. OnPropertyChanged("SelectedMenuIndex");
  642. }
  643. }
  644. public SortType MenuSortType
  645. {
  646. get
  647. {
  648. return menuSortType;
  649. }
  650. set
  651. {
  652. menuSortType = value;
  653. OnPropertyChanged("MenuSortType");
  654. }
  655. }
  656. public SortType IconSortType
  657. {
  658. get
  659. {
  660. return iconSortType;
  661. }
  662. set
  663. {
  664. iconSortType = value;
  665. OnPropertyChanged("IconSortType");
  666. }
  667. }
  668. public double WindowWidth
  669. {
  670. get
  671. {
  672. return windowWidth;
  673. }
  674. set
  675. {
  676. windowWidth = value;
  677. OnPropertyChanged("WindowWidth");
  678. }
  679. }
  680. public double WindowHeight
  681. {
  682. get
  683. {
  684. return windowHeight;
  685. }
  686. set
  687. {
  688. windowHeight = value;
  689. OnPropertyChanged("WindowHeight");
  690. }
  691. }
  692. public double MenuCardWidth
  693. {
  694. get
  695. {
  696. return menuCardWidth;
  697. }
  698. set
  699. {
  700. menuCardWidth = value;
  701. OnPropertyChanged("MenuCardWidth");
  702. }
  703. }
  704. [field: NonSerializedAttribute()]
  705. public event PropertyChangedEventHandler PropertyChanged;
  706. private void OnPropertyChanged(string propertyName)
  707. {
  708. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  709. CommonCode.SaveAppData(MainWindow.appData);
  710. }
  711. #endregion
  712. public override String ToString()
  713. {
  714. return JsonConvert.SerializeObject(this);
  715. }
  716. }
  717. }