using DotNetSpeech;
using Microsoft.AppCenter.Utils.Files;
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.IO;
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 int height;
private int width;
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);
if ((string.IsNullOrEmpty(value) == false))
{
Model.width = int.Parse(value);
if (IsVerticalSelected == false && IsCustomSelected)
{
width = int.Parse(CustomHeight);
height = int.Parse(value);
}
}
}
}
private string customHeight;
///
/// 自定义页面高度
///
public string CustomHeight
{
get { return customHeight; }
set
{
SetProperty(ref customHeight, value);
if ((string.IsNullOrEmpty(value) == false))
{
Model.height = int.Parse(value);
if (IsVerticalSelected == false && IsCustomSelected)
{
height = int.Parse(CustomWidth);
width = int.Parse(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)
{
if (IsVerticalSelected == false)
{
IsVerticalSelected = true;
}
CustomWidth = pageSizeInfo.Width;
CustomHeight = pageSizeInfo.Height;
Model.width = Convert.ToInt32(pageSizeInfo.Width);
Model.height = Convert.ToInt32(pageSizeInfo.Height);
height = Model.height;
width = Model.width;
}
}
}
}
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);
if (IsCurrentSelected && size != null)
{
if (IsVerticalSelected == false)
{
IsVerticalSelected = true;
}
CustomWidth = size.Width.ToString("F0");
CustomHeight = size.Height.ToString("F0");
Model.width = Convert.ToInt32(size.Width);
Model.height = Convert.ToInt32(size.Height);
height = Model.height;
width = Model.width;
}
}
}
private bool isStandSelcted;
public bool IsStandSelected
{
get { return isStandSelcted; }
set
{
SetProperty(ref isStandSelcted, value);
PageSizeInfo pageSizeInfo = PageSizeInfos[PageSizeSelectedIndex];
if (IsStandSelected && pageSizeInfo != null)
{
if (IsVerticalSelected == false)
{
IsVerticalSelected = true;
}
CustomWidth = pageSizeInfo.Width;
CustomHeight = pageSizeInfo.Height;
Model.width = Convert.ToInt32(pageSizeInfo.Width);
Model.height = Convert.ToInt32(pageSizeInfo.Height);
height = Model.height;
width = Model.width;
}
}
}
private bool isCustomSelected;
public bool IsCustomSelected
{
get { return isCustomSelected; }
set
{
SetProperty(ref isCustomSelected, value);
if (IsCustomSelected)
{
IsVerticalSelected = true;
}
}
}
private bool isVerticalSelected = true;
public bool IsVerticalSelected
{
get { return isVerticalSelected; }
set
{
SetProperty(ref isVerticalSelected, value);
if (isVerticalSelected)
{
if (height != 0 && width != 0)
{
if (height.ToString() != CustomHeight)
{
CustomHeight = height.ToString();
}
if (width.ToString() != CustomWidth)
{
CustomWidth = width.ToString();
}
Model.width = width;
Model.height = height;
}
}
}
}
private bool isHorizontalSelected;
public bool IsHorizontalSelected
{
get { return isHorizontalSelected; }
set
{
SetProperty(ref isHorizontalSelected, value);
if (isHorizontalSelected)
{
if (IsCustomSelected)
{
height = Model.height;
width = Model.width;
}
if (width != 0 && height != 0)
{
if (CustomHeight != width.ToString())
{
CustomHeight = width.ToString();
}
if (CustomWidth != height.ToString())
{
CustomWidth = height.ToString();
}
Model.width = height;
Model.height = width;
}
}
}
}
///
/// 自定义页面的路径集合
///
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=App.MainPageLoader.GetString("PageEdit_10Envelope"),Width ="105",Height="241",Unit="mm"},
new PageSizeInfo(){ Name=App.MainPageLoader.GetString("PageEdit_Choukei3"),Width="120",Height="235",Unit="mm"},
new PageSizeInfo(){ Name=App.MainPageLoader.GetString("PageEdit_DLEnvelope"),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=App.MainPageLoader.GetString("PageEdit_SuperB"),Width="330",Height="483",Unit="mm"},
new PageSizeInfo(){ Name=App.MainPageLoader.GetString("PageEdit_TabloidPaper"),Width="279",Height="432",Unit="mm"},
new PageSizeInfo(){ Name=App.MainPageLoader.GetString("PageEdit_TabloidPaperBig"),Width="305",Height="457",Unit="mm"},
new PageSizeInfo(){ Name=App.MainPageLoader.GetString("PageEdit_USLegalPaper"),Width="216",Height="356",Unit="mm"},
new PageSizeInfo(){ Name=App.MainPageLoader.GetString("PageEdit_USLetterPaper"),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();
//20230704 插入自定义弹窗,弹窗不出来的情况,保险起见 先注释掉这部分代码
//Pages.Add(new CustomPageItem() { Name = "空白页", FilePath = "" });
//string filePath = System.IO.Path.Combine(Environment.CurrentDirectory, @"Resources\PageEdit\HorizontalLine.jpg");
//if (System.IO.File.Exists(filePath))
//{
// Pages.Add(new CustomPageItem() { Name = "横线", FilePath = filePath });
//}
//filePath = System.IO.Path.Combine(Environment.CurrentDirectory, @"Resources\PageEdit\Staff.jpg");
//if (System.IO.File.Exists(filePath))
//{
// Pages.Add(new CustomPageItem() { Name = "五线谱", FilePath = filePath });
//}
//filePath = System.IO.Path.Combine(Environment.CurrentDirectory, @"Resources\PageEdit\GridLine.jpg");
//if (System.IO.File.Exists(filePath))
//{
// Pages.Add(new CustomPageItem() { Name = "格子线", FilePath = 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 = Convert.ToInt32(size.Width);
Model.height = Convert.ToInt32(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 = Convert.ToInt32(size.Width);
int height = Convert.ToInt32(size.Height);
int.TryParse(customWidth, out width);
int.TryParse(customHeight, out height);
if (width <= 0)
{
width = Convert.ToInt32(size.Width);
}
if (height <= 0)
{
height = Convert.ToInt32(size.Height);
}
switch (unitsSelectedIndex)
{
case 1:
width = width / 10;
height = height / 10;
break;
case 2:
width = Convert.ToInt32(width / 25.4);
height = Convert.ToInt32(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;
PageSizeSelectedIndex = 1;
IsStandSelected = true;
}
else
{
CurrentPageSize = $"({size.Width.ToString("F0")}mm*{size.Height.ToString("F0")}mm)";
IsCurrentIsEnabled = true;
IsCurrentSelected = true;
}
IsVerticalSelected = true;
}
}
#endregion 弹窗接口
}
}