AppConfig.cs 20 KB

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