using PDF_Master.Helper; using PDF_Master.Model; using PDF_Master.Model.PageEdit; using Prism.Commands; using Prism.Mvvm; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Drawing.Printing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace PDF_Master.ViewModels.Dialog.PageEditDialogs { public class InsertDialogViewModel : BindableBase, IDialogAware { public string Title => ""; /// /// 数据模型 /// private CustomInsertModel Model = new CustomInsertModel(); public event Action RequestClose; private Size size = new Size(); private string currentPageSize; /// /// 当前页的尺寸大小 括号显示的形式 /// public string CurrentPageSize { get { return currentPageSize; } set { SetProperty(ref currentPageSize, value); } } private int listSelectedIndex; public int ListSelectedIndex { get { return listSelectedIndex; } set { SetProperty(ref listSelectedIndex, value); } } private int itemSelectedIndex = 0; /// /// 自定义页面的选中索引 /// public int ItemSelectedIndex { get { return itemSelectedIndex; } set { SetProperty(ref itemSelectedIndex, value); if (Model != null) { Model.filepath = Pages[itemSelectedIndex].FilePath; } } } private string customWidth; /// /// 自定义页面宽度 /// public string CustomWidth { get { return customWidth; } set { SetProperty(ref customWidth, value); } } private string customHeight; /// /// 自定义页面高度 /// public string CustomHeight { get { return customHeight; } set { SetProperty(ref customHeight, value); } } private int unitsSelectedIndex = 0; /// /// 单位下拉框的选中项索引 /// public int UnitsSelectedIndex { get { return unitsSelectedIndex; } set { SetProperty(ref unitsSelectedIndex, value); } } private int pageSizeSelectedIndex = 0; /// /// 页面尺寸选中项 /// public int PageSizeSelectedIndex { get { return pageSizeSelectedIndex; } set { SetProperty(ref pageSizeSelectedIndex, value); if (pageSizeSelectedIndex != -1) { PageSizeInfo pageSizeInfo = PageSizeInfos[pageSizeSelectedIndex]; if (pageSizeInfo != null) { CustomWidth = pageSizeInfo.Width; CustomHeight = pageSizeInfo.Height; Model.width = Convert.ToInt32(pageSizeInfo.Width); Model.height = Convert.ToInt32(pageSizeInfo.Height); //V_Width = CustomWidth; //V_Height = CustomHeight; //H_Width = CustomHeight; //H_Height = CustomWidth; } } } } private bool isCurrentIsEnabled = true; public bool IsCurrentIsEnabled { get { return isCurrentIsEnabled; } set { SetProperty(ref isCurrentIsEnabled, value); } } private bool isCurrentSelected = true; public bool IsCurrentSelected { get { return isCurrentSelected; } set { SetProperty(ref isCurrentSelected, value); } } private bool isStandSelcted; public bool IsStandSelected { get { return isStandSelcted; } set { SetProperty(ref isStandSelcted, value); } } private bool isCustomSelected; public bool IsCustomSelected { get { return isCustomSelected; } set { SetProperty(ref isCustomSelected, value); } } private bool isVerticalSelected = true; public bool IsVerticalSelected { get { return isVerticalSelected; } set { SetProperty(ref isVerticalSelected, value); if (isVerticalSelected) { //if (V_Width != null && V_Height != null) //{ // CustomHeight = V_Height; // CustomWidth = V_Width; //} if (Model.height != 0 && Model.width != 0) { CustomHeight = Model.height.ToString(); CustomWidth = Model.width.ToString(); } } } } private bool isHorizontalSelected; public bool IsHorizontalSelected { get { return isHorizontalSelected; } set { SetProperty(ref isHorizontalSelected, value); if (isHorizontalSelected) { //if (H_Width != null && H_Height != null) //{ // CustomHeight = H_Height; // CustomWidth = H_Width; //} if (Model.height != 0 && Model.width != 0) { CustomHeight = Model.width.ToString(); CustomWidth = Model.height.ToString(); } } } } //public string H_Width = null; //public string H_Height = null; //public string V_Width = null; //public string V_Height = null; /// /// 自定义页面的路径集合 /// public ObservableCollection Pages { get; set; } /// /// 页面单位集合 /// public List Units { get; set; } public List PageSize { get; set; } public List PageSizeInfos { get; set; } public DelegateCommand CancelCommand { get; set; } public DelegateCommand InsertCommnad { get; set; } public InsertDialogViewModel() { InitPageSource(); InitUnits(); InitPage(); CancelCommand = new DelegateCommand(cancel); InsertCommnad = new DelegateCommand(insert); } private void InitPage() { PageSize = new List(); //PageSize.Add("Letter(8.5x11 inches)"); //PageSize.Add("Legal (210 x 297mm)"); //PageSize.Add("A3 (297 x 420mm)"); //PageSize.Add("A4 (210 x 297mm)"); //PageSize.Add("A5 (148 x 210mm)"); //PageSize.Add("B4 (250 x 353mm)"); //PageSize.Add("B5 (176 x 250mm)"); //PageSize.Add("Executive (7.25x10.5 inches)"); //PageSize.Add("US4x6 (4x6 inches)"); //PageSize.Add("US4x8 (4x8 inches)"); //PageSize.Add("US5x7 (5x7 inches)"); //PageSize.Add("Comm10 (4.125x9.5 inches)"); PageSizeInfos = new List() { new PageSizeInfo(){ Name="A3",Width="297",Height="420",Unit="mm"}, new PageSizeInfo(){ Name="A4",Width="210",Height="297",Unit="mm"}, new PageSizeInfo(){ Name="A5",Width="148",Height="210",Unit="mm"}, new PageSizeInfo(){ Name="B5",Width="176",Height="250",Unit="mm"}, new PageSizeInfo(){ Name="10号信封",Width="105",Height="241",Unit="mm"}, new PageSizeInfo(){ Name="Choukei 3信封",Width="120",Height="235",Unit="mm"}, new PageSizeInfo(){ Name="DL信封",Width="110",Height="220",Unit="mm"}, new PageSizeInfo(){ Name="JIS B5",Width="182",Height="257",Unit="mm"}, new PageSizeInfo(){ Name="ROC 16K",Width="197",Height="273",Unit="mm"}, new PageSizeInfo(){ Name="超大B/A3型",Width="330",Height="483",Unit="mm"}, new PageSizeInfo(){ Name="小报用纸",Width="279",Height="432",Unit="mm"}, new PageSizeInfo(){ Name="小报用纸(特大)",Width="305",Height="457",Unit="mm"}, new PageSizeInfo(){ Name="美国法定用纸",Width="216",Height="356",Unit="mm"}, new PageSizeInfo(){ Name="美国信纸",Width="216",Height="279",Unit="mm"}, }; foreach (var item in PageSizeInfos) { PageSize.Add($"{item.Name}({item.Width} x {item.Height} {item.Unit})"); } } /// /// 初始化页面大小单位集合 /// private void InitUnits() { Units = new List(); Units.Add("mm"); Units.Add("cm"); Units.Add("in"); } /// /// 初始化自定义页面集合 /// private void InitPageSource() { Pages = new ObservableCollection(); Pages.Add(new CustomPageItem() { Name = "空白页", FilePath = "" }); Pages.Add(new CustomPageItem() { Name = "横线", FilePath = System.IO.Path.Combine(Environment.CurrentDirectory, @"Resources\PageEdit\HorizontalLine.jpg") }); Pages.Add(new CustomPageItem() { Name = "五线谱", FilePath = System.IO.Path.Combine(Environment.CurrentDirectory, @"Resources\PageEdit\Staff.jpg") }); Pages.Add(new CustomPageItem() { Name = "格子线", FilePath = System.IO.Path.Combine(Environment.CurrentDirectory, @"Resources\PageEdit\GridLine.jpg") }); } private void cancel() { RequestClose.Invoke(new DialogResult(ButtonResult.Cancel)); } private void insert() { //最后统一处理页面尺寸 if (IsCurrentSelected) { Model.width = (int)size.Width; Model.height = (int)size.Height; } else if (IsStandSelected) { PageSizeInfo pageSizeInfo = PageSizeInfos[PageSizeSelectedIndex]; if (pageSizeInfo != null) { Model.width = Convert.ToInt32(pageSizeInfo.Width); Model.height = Convert.ToInt32(pageSizeInfo.Height); } } else { int width = (int)size.Width; int height = (int)size.Height; int.TryParse(customWidth, out width); int.TryParse(customHeight, out height); if (width <= 0) { width = (int)size.Width; } if (height <= 0) { height = (int)size.Height; } switch (unitsSelectedIndex) { case 1: width = width / 10; height = height / 10; break; case 2: width = (int)(width / 25.4); height = (int)(height / 25.4); break; case 0: default: break; } Model.width = width; Model.height = height; } //方向处理 if (isVerticalSelected) { if (Model.height <= Model.width) { //纵向 需要重新定义宽高 var temp = Model.height; Model.height = Model.width; Model.width = temp; } } else { if (Model.height > Model.width) { var temp = Model.height; Model.height = Model.width; Model.width = temp; } } DialogParameters valuePairs = new DialogParameters(); //将mm转换成像素单位 Model.width = (int)CommonHelper.GetPageSizeFomrUnit(Model.width); Model.height = (int)CommonHelper.GetPageSizeFomrUnit(Model.height); valuePairs.Add(ParameterNames.DataModel, Model); RequestClose.Invoke(new DialogResult(ButtonResult.OK, valuePairs)); } #region 弹窗接口 public bool CanCloseDialog() { return true; } public void OnDialogClosed() { } public void OnDialogOpened(IDialogParameters parameters) { if (parameters != null) { size = parameters.GetValue(ParameterNames.CurrentPageSize); ListSelectedIndex = parameters.GetValue(ParameterNames.PageEditSelectedIndex); //未选择页面时,【当前页】项置灰不可点击,默认选中【标准】A4 if (ListSelectedIndex == -1) { IsCurrentIsEnabled = false; IsStandSelected = true; PageSizeSelectedIndex = 1; PageSizeInfo pageSizeInfo = PageSizeInfos[PageSizeSelectedIndex]; if (pageSizeInfo != null) { CustomWidth = pageSizeInfo.Width; CustomHeight = pageSizeInfo.Height; Model.width = Convert.ToInt32(pageSizeInfo.Width); Model.height = Convert.ToInt32(pageSizeInfo.Height); } } else { IsCurrentIsEnabled = true; CurrentPageSize = $"({size.Width.ToString("F0")}mm*{size.Height.ToString("F0")}mm)"; CustomWidth = size.Width.ToString("F0"); CustomHeight = size.Height.ToString("F0"); Model.width = (int)size.Width; Model.height = (int)size.Height; } //V_Width = CustomWidth; //V_Height = CustomHeight; //H_Width = CustomHeight; //H_Height = CustomWidth; //IsVerticalSelected = true; } } #endregion 弹窗接口 } }