HomePagePrinterModPosterContentViewModel.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. using Microsoft.Office.Interop.Word;
  2. using PDF_Office.EventAggregators;
  3. using PDF_Office.Model.Dialog.HomePageToolsDialogs.HomePagePrinter;
  4. using Prism.Commands;
  5. using Prism.Events;
  6. using Prism.Mvvm;
  7. using Prism.Regions;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Diagnostics;
  11. using System.Linq;
  12. using System.Printing;
  13. using System.Windows;
  14. using System.Windows.Controls;
  15. using System.Windows.Media;
  16. namespace PDF_Office.ViewModels.Dialog.HomePageToolsDialogs.HomePagePrinter
  17. {
  18. public class HomePagePrinterModPosterContentViewModel : BindableBase, INavigationAware
  19. {
  20. private IEventAggregator eventAggregator;
  21. private string Unicode = null;
  22. private Visibility _pageRangeSettingVisibility = Visibility.Visible;
  23. public bool HasCutMarks = false;
  24. public bool HasLabel = false;
  25. private string _defaultLabel;
  26. public string DefaultLabel
  27. {
  28. get { return _defaultLabel; }
  29. set { _defaultLabel = value; }
  30. }
  31. public Visibility PageRangeSettingVisibility
  32. {
  33. get => _pageRangeSettingVisibility;
  34. set => SetProperty(ref _pageRangeSettingVisibility, value);
  35. }
  36. private Visibility _pagesPerSheetVisibility = Visibility.Hidden;
  37. public Visibility PagesPerSheetVisibility
  38. {
  39. get => _pagesPerSheetVisibility;
  40. set => SetProperty(ref _pagesPerSheetVisibility, value);
  41. }
  42. private string _tileRatio = "100";
  43. public string TileRatio
  44. {
  45. get => _tileRatio;
  46. set => SetProperty(ref _tileRatio, value);
  47. }
  48. private PosterInfo _posterInfo = new PosterInfo();
  49. public PosterInfo PosterInfo
  50. {
  51. get => _posterInfo;
  52. set => _posterInfo = value;
  53. }
  54. private List<string> _pageSheetList = new List<string>();
  55. /// <summary>
  56. /// <para>0: 1x2</para>
  57. /// <para>1: 2x2</para>
  58. /// <para>2: 3x2</para>
  59. /// <para>3: 3x3</para>
  60. /// <para>4: 4x4</para>
  61. /// <para>5: 自定义</para>
  62. /// </summary>
  63. public List<string> PageSheetList
  64. {
  65. get => _pageSheetList;
  66. set => _pageSheetList = value;
  67. }
  68. private bool _enableCustomSheet;
  69. public bool EnableCustomSheet
  70. {
  71. get { return _enableCustomSheet; }
  72. set
  73. {
  74. SetProperty(ref _enableCustomSheet, value);
  75. }
  76. }
  77. private int _pageSheetIndex = 0;
  78. public int PageSheetIndex
  79. {
  80. get { return _pageSheetIndex; }
  81. set
  82. {
  83. _pageSheetIndex = value;
  84. if (_pageSheetIndex < 5)
  85. {
  86. EnableCustomSheet = false;
  87. }
  88. else
  89. {
  90. EnableCustomSheet = true;
  91. }
  92. SetPageSheetValue(value);
  93. }
  94. }
  95. private int? _horizontalSheetNumber = 1;
  96. public int? HorizontalSheetNumber
  97. {
  98. get => _horizontalSheetNumber;
  99. set => SetProperty(ref _horizontalSheetNumber, value);
  100. }
  101. private int? _verticalSheetNumber = 2;
  102. public int? VerticalSheetNumber
  103. {
  104. get => _verticalSheetNumber;
  105. set => SetProperty(ref _verticalSheetNumber, value);
  106. }
  107. private double? _overlapNumber = 0;
  108. public double? OverlapNumber
  109. {
  110. get => _overlapNumber;
  111. set
  112. {
  113. if (value > 5.08)
  114. {
  115. value = 5.08;
  116. }
  117. else if (value < 0)
  118. {
  119. value = 0;
  120. }
  121. SetProperty(ref _overlapNumber, value);
  122. }
  123. }
  124. public DelegateCommand<object> SetModPosterStatusCommand { get; set; }
  125. public DelegateCommand<object> SetSheetCommand { get; set; }
  126. public DelegateCommand SetCustomSheetCommand { get; set; }
  127. public DelegateCommand SetOverlapCommand { get; set; }
  128. public DelegateCommand<object> SetCutMarksCommand { get; set; }
  129. public DelegateCommand<object> SetLabelCommand { get; set; }
  130. public DelegateCommand SetTileRatioCommand { get; set; }
  131. HomePagePrinterModPosterContentViewModel(IEventAggregator eventAggregator)
  132. {
  133. this.eventAggregator = eventAggregator;
  134. SetModPosterStatusCommand = new DelegateCommand<object>(SetModPosterStatus);
  135. SetSheetCommand = new DelegateCommand<object>(SetSheet);
  136. SetCustomSheetCommand = new DelegateCommand(SetCustomSheet);
  137. SetOverlapCommand = new DelegateCommand(SetOverlap);
  138. SetCutMarksCommand = new DelegateCommand<object>(SetCutMarks);
  139. SetLabelCommand = new DelegateCommand<object>(SetLabel);
  140. SetTileRatioCommand = new DelegateCommand(SetTileRatio);
  141. InitComponent();
  142. PosterInfo.EnumPrintMod = EnumPrintMod.StatusPoster;
  143. }
  144. public void InitPageSheetList()
  145. {
  146. PageSheetList.Clear();
  147. PageSheetList.Add("2");
  148. PageSheetList.Add("4");
  149. PageSheetList.Add("6");
  150. PageSheetList.Add("9");
  151. PageSheetList.Add("16");
  152. PageSheetList.Add("Custom");
  153. }
  154. public void InitComponent()
  155. {
  156. InitPageSheetList();
  157. }
  158. public void SetModPosterStatus(object e)
  159. {
  160. var rdo = e as RadioButton;
  161. if (rdo.Name == "StatusTileRdo")
  162. {
  163. PosterInfo.EnumPosterMod = EnumPosterMod.StatusTile;
  164. PageRangeSettingVisibility = Visibility.Visible;
  165. PagesPerSheetVisibility = Visibility.Hidden;
  166. }
  167. else
  168. {
  169. PosterInfo.EnumPosterMod = EnumPosterMod.StatusSplit;
  170. PageRangeSettingVisibility = Visibility.Hidden;
  171. PagesPerSheetVisibility = Visibility.Visible;
  172. }
  173. SendPosterInfo();
  174. }
  175. public void SetSheet(object e)
  176. {
  177. SendPosterInfo();
  178. }
  179. public void SetCustomSheet()
  180. {
  181. SendPosterInfo();
  182. }
  183. public void SetOverlap()
  184. {
  185. SendPosterInfo();
  186. }
  187. public void SetTileRatio()
  188. {
  189. int previousDisplayRatio = PosterInfo.TileRatio;
  190. PosterInfo.TileRatio = int.Parse(TileRatio);
  191. if (previousDisplayRatio != PosterInfo.TileRatio)
  192. {
  193. SendPosterInfo();
  194. }
  195. }
  196. public void SetPageSheetValue(int sheetIndex)
  197. {
  198. switch (sheetIndex)
  199. {
  200. case 0:
  201. HorizontalSheetNumber = 1;
  202. VerticalSheetNumber = 2;
  203. break;
  204. case 1:
  205. HorizontalSheetNumber = 2;
  206. VerticalSheetNumber = 2;
  207. break;
  208. case 2:
  209. HorizontalSheetNumber = 3;
  210. VerticalSheetNumber = 2;
  211. break;
  212. case 3:
  213. HorizontalSheetNumber = 3;
  214. VerticalSheetNumber = 3;
  215. break;
  216. case 4:
  217. HorizontalSheetNumber = 4;
  218. VerticalSheetNumber = 4;
  219. break;
  220. case 5:
  221. HorizontalSheetNumber = null;
  222. VerticalSheetNumber = null;
  223. break;
  224. }
  225. SendPosterInfo();
  226. }
  227. public void SendPosterInfo()
  228. {
  229. if (HorizontalSheetNumber == null)
  230. {
  231. HorizontalSheetNumber = 1;
  232. }
  233. if (VerticalSheetNumber == null)
  234. {
  235. VerticalSheetNumber = 1;
  236. }
  237. if (OverlapNumber == null)
  238. {
  239. OverlapNumber = 0;
  240. }
  241. else if (OverlapNumber < 0)
  242. {
  243. OverlapNumber = 0;
  244. }
  245. else if (OverlapNumber > 5.08)
  246. {
  247. OverlapNumber = 5.08;
  248. }
  249. if (PosterInfo != null)
  250. {
  251. if (PosterInfo.EnumPosterMod == EnumPosterMod.StatusTile)
  252. {
  253. PosterInfo.TileRatio = int.Parse(TileRatio);
  254. }
  255. else
  256. {
  257. PosterInfo.HorizontalSheetNumber = (int)HorizontalSheetNumber;
  258. PosterInfo.VerticalSheetNumber = (int)VerticalSheetNumber;
  259. }
  260. PosterInfo.OverLap = (double)OverlapNumber;
  261. PosterInfo.HasCutMarks = HasCutMarks;
  262. PosterInfo.HasLabel = HasLabel;
  263. }
  264. this.eventAggregator.GetEvent<SendPrintSettingsModInfoEvent>().Publish(new PrintModInfoWithUnicode { printModInfo = PosterInfo, Unicode = this.Unicode });
  265. }
  266. public void SetCutMarks(object e)
  267. {
  268. var chk = e as System.Windows.Controls.CheckBox;
  269. if(chk.IsChecked == true)
  270. {
  271. HasCutMarks = true;
  272. }
  273. else
  274. {
  275. HasCutMarks = false;
  276. }
  277. SendPosterInfo();
  278. }
  279. public void SetLabel(object e)
  280. {
  281. var chk = e as System.Windows.Controls.CheckBox;
  282. if (chk.IsChecked == true)
  283. {
  284. HasLabel = true;
  285. }
  286. else
  287. {
  288. HasLabel = false;
  289. }
  290. SendPosterInfo();
  291. }
  292. public bool IsNavigationTarget(NavigationContext navigationContext)
  293. {
  294. return true;
  295. }
  296. public void OnNavigatedFrom(NavigationContext navigationContext)
  297. {
  298. }
  299. public void OnNavigatedTo(NavigationContext navigationContext)
  300. {
  301. DefaultLabel = "(column, row) 1.pdf "+ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  302. navigationContext.Parameters.TryGetValue<string>("Unicode", out Unicode);
  303. SendPosterInfo();
  304. }
  305. }
  306. }