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 弹窗接口
}
}