2023-01-25 15:58:05 +08:00
|
|
|
|
using AIStudio.Wpf.DiagramDesigner.Additionals.Commands;
|
2021-07-29 13:55:18 +08:00
|
|
|
|
using AIStudio.Wpf.Flowchart;
|
2023-01-25 15:58:05 +08:00
|
|
|
|
using AIStudio.Wpf.DiagramDesigner.Additionals.Extensions.ViewModels;
|
|
|
|
|
|
using AIStudio.Wpf.DiagramDesigner.Additionals;
|
2022-10-28 22:45:39 +08:00
|
|
|
|
using AIStudio.Wpf.DiagramApp.Models;
|
2021-07-23 09:42:22 +08:00
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Collections.ObjectModel;
|
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
|
using System.Globalization;
|
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Windows;
|
|
|
|
|
|
using System.Windows.Input;
|
|
|
|
|
|
using System.Windows.Media;
|
|
|
|
|
|
using System.Xml.Serialization;
|
2022-10-28 22:45:39 +08:00
|
|
|
|
using AIStudio.Wpf.DiagramDesigner;
|
2021-07-23 09:42:22 +08:00
|
|
|
|
using ZXing;
|
2022-12-08 20:54:45 +08:00
|
|
|
|
using AIStudio.Wpf.DiagramDesigner.Helpers;
|
2023-03-18 21:44:58 +08:00
|
|
|
|
using AIStudio.Wpf.DiagramDesigner.ViewModels;
|
|
|
|
|
|
using AIStudio.Wpf.DiagramDesigner.ViewModels.BaseViewModel;
|
2023-06-11 23:58:22 +08:00
|
|
|
|
using System.Threading.Tasks;
|
2021-07-23 09:42:22 +08:00
|
|
|
|
|
2022-10-28 22:45:39 +08:00
|
|
|
|
namespace AIStudio.Wpf.DiagramApp.ViewModels
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
2023-02-12 21:30:16 +08:00
|
|
|
|
public partial class PageViewModel : BindableBase
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
2023-04-09 12:38:57 +08:00
|
|
|
|
#region 初始化
|
2023-04-02 22:59:22 +08:00
|
|
|
|
protected IDiagramServiceProvider _service
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return DiagramServicesProvider.Instance.Provider;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-06-11 23:58:22 +08:00
|
|
|
|
|
2023-04-04 22:42:09 +08:00
|
|
|
|
public PageViewModel(string title, string status, DiagramType diagramType, string subType = null)
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
|
|
|
|
|
Title = title;
|
|
|
|
|
|
Status = status;
|
|
|
|
|
|
DiagramType = diagramType;
|
2023-04-04 22:42:09 +08:00
|
|
|
|
SubType = subType;
|
2023-06-11 23:58:22 +08:00
|
|
|
|
|
2021-07-23 09:42:22 +08:00
|
|
|
|
}
|
2023-02-12 21:30:16 +08:00
|
|
|
|
public PageViewModel(string filename)
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
|
|
|
|
|
FileName = filename;
|
2023-01-25 11:11:27 +08:00
|
|
|
|
string ext = Path.GetExtension(filename);
|
2023-06-11 23:58:22 +08:00
|
|
|
|
DiagramDocument = OpenFile(filename, ext);
|
2021-08-03 18:19:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-02-12 21:30:16 +08:00
|
|
|
|
public PageViewModel(string filename, DiagramDocument diagramDocument)
|
2021-08-03 18:19:47 +08:00
|
|
|
|
{
|
|
|
|
|
|
FileName = filename;
|
2023-06-11 23:58:22 +08:00
|
|
|
|
DiagramDocument = diagramDocument;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DiagramDocument DiagramDocument;
|
|
|
|
|
|
public virtual void View_Loaded(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
//await Task.Run(() => {
|
|
|
|
|
|
//Application.Current.Dispatcher.Invoke(() => {
|
|
|
|
|
|
if (string.IsNullOrEmpty(FileName))
|
|
|
|
|
|
{
|
|
|
|
|
|
Init(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
string ext = Path.GetExtension(FileName);
|
|
|
|
|
|
OpenFile(DiagramDocument, ext);
|
|
|
|
|
|
}
|
|
|
|
|
|
//});
|
|
|
|
|
|
//});
|
|
|
|
|
|
|
2021-07-23 09:42:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-06-11 23:58:22 +08:00
|
|
|
|
|
2021-07-23 09:42:22 +08:00
|
|
|
|
protected virtual void InitDiagramViewModel()
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-04-02 22:59:22 +08:00
|
|
|
|
protected virtual void Init(bool initNew)
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
2023-03-05 21:30:53 +08:00
|
|
|
|
DiagramViewModels = new ObservableCollection<IDiagramViewModel>()
|
|
|
|
|
|
{
|
2023-04-02 22:59:22 +08:00
|
|
|
|
GetDiagramViewModel("页-1", DiagramType,initNew),
|
2023-03-05 21:30:53 +08:00
|
|
|
|
};
|
|
|
|
|
|
DiagramViewModel = DiagramViewModels.FirstOrDefault();
|
|
|
|
|
|
|
2021-07-23 09:42:22 +08:00
|
|
|
|
InitDiagramViewModel();
|
|
|
|
|
|
}
|
2023-04-09 12:38:57 +08:00
|
|
|
|
#endregion
|
2021-07-23 09:42:22 +08:00
|
|
|
|
|
2023-04-09 12:38:57 +08:00
|
|
|
|
#region 属性
|
2023-04-02 22:59:22 +08:00
|
|
|
|
public string FileName
|
|
|
|
|
|
{
|
|
|
|
|
|
get; set;
|
|
|
|
|
|
}
|
2021-07-23 09:42:22 +08:00
|
|
|
|
|
|
|
|
|
|
private string _title;
|
|
|
|
|
|
public string Title
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return _title;
|
|
|
|
|
|
}
|
|
|
|
|
|
set
|
|
|
|
|
|
{
|
|
|
|
|
|
SetProperty(ref _title, value);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private string _status;
|
|
|
|
|
|
public string Status
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return _status;
|
|
|
|
|
|
}
|
|
|
|
|
|
set
|
|
|
|
|
|
{
|
|
|
|
|
|
SetProperty(ref _status, value);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-05-11 19:14:39 +08:00
|
|
|
|
//private bool _showGrid;
|
|
|
|
|
|
//public bool ShowGrid
|
|
|
|
|
|
//{
|
|
|
|
|
|
// get
|
|
|
|
|
|
// {
|
|
|
|
|
|
// return _showGrid;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// set
|
|
|
|
|
|
// {
|
|
|
|
|
|
// if (SetProperty(ref _showGrid, value))
|
|
|
|
|
|
// {
|
|
|
|
|
|
// foreach (var item in DiagramViewModels)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// item.DiagramOption.LayoutOption.ShowGrid = _showGrid;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
//}
|
2021-07-23 09:42:22 +08:00
|
|
|
|
|
2023-04-02 22:59:22 +08:00
|
|
|
|
public DiagramType DiagramType
|
|
|
|
|
|
{
|
|
|
|
|
|
get; set;
|
|
|
|
|
|
}
|
2021-07-23 09:42:22 +08:00
|
|
|
|
|
2023-04-04 22:42:09 +08:00
|
|
|
|
public string SubType
|
|
|
|
|
|
{
|
|
|
|
|
|
get; set;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-07-23 09:42:22 +08:00
|
|
|
|
private ObservableCollection<IDiagramViewModel> _diagramViewModels;
|
|
|
|
|
|
public ObservableCollection<IDiagramViewModel> DiagramViewModels
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return _diagramViewModels;
|
|
|
|
|
|
}
|
|
|
|
|
|
set
|
|
|
|
|
|
{
|
|
|
|
|
|
SetProperty(ref _diagramViewModels, value);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private IDiagramViewModel _diagramViewModel;
|
|
|
|
|
|
public IDiagramViewModel DiagramViewModel
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return _diagramViewModel;
|
|
|
|
|
|
}
|
|
|
|
|
|
set
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_diagramViewModel != value)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_diagramViewModel != null)
|
2023-05-27 12:35:44 +08:00
|
|
|
|
{
|
2021-07-23 09:42:22 +08:00
|
|
|
|
_diagramViewModel.PropertyChanged -= DiagramViewModel_PropertyChanged;
|
2023-05-27 12:35:44 +08:00
|
|
|
|
_diagramViewModel.SaveThumbnail();
|
2021-07-23 09:42:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
SetProperty(ref _diagramViewModel, value);
|
|
|
|
|
|
if (_diagramViewModel != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
_diagramViewModel.PropertyChanged += DiagramViewModel_PropertyChanged;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
2023-04-09 12:38:57 +08:00
|
|
|
|
#region 命令
|
|
|
|
|
|
private ICommand _addPageCommand;
|
|
|
|
|
|
public ICommand AddPageCommand
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return this._addPageCommand ?? (this._addPageCommand = new DelegateCommand<object>(para => this.AddPageExecuted(para)));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private ICommand _addCopyPageCommand;
|
|
|
|
|
|
public ICommand AddCopyPageCommand
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return this._addCopyPageCommand ?? (this._addCopyPageCommand = new DelegateCommand<object>(para => this.AddCopyPageExecuted(para)));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private ICommand _renamePageCommand;
|
|
|
|
|
|
public ICommand RenamePageCommand
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return this._renamePageCommand ?? (this._renamePageCommand = new DelegateCommand<object>(para => this.RenamePageExecuted(para)));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private ICommand _endRenamePageCommand;
|
|
|
|
|
|
public ICommand EndRenamePageCommand
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return this._endRenamePageCommand ?? (this._endRenamePageCommand = new DelegateCommand<object>(para => this.EndRenamePageExecuted(para)));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private ICommand _deletePageCommand;
|
|
|
|
|
|
public ICommand DeletePageCommand
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return this._deletePageCommand ?? (this._deletePageCommand = new DelegateCommand<object>(para => this.DeletePageExecuted(para)));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private ICommand _addImageCommand;
|
|
|
|
|
|
public ICommand AddImageCommand
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return this._addImageCommand ?? (this._addImageCommand = new DelegateCommand<object>(para => this.AddImageExecuted(para)));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private ICommand _editImageCommand;
|
|
|
|
|
|
public ICommand EditImageCommand
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return this._editImageCommand ?? (this._editImageCommand = new DelegateCommand<object>(para => this.EditImageExecuted(para)));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private ICommand _resizeImageCommand;
|
|
|
|
|
|
public ICommand ResizeImageCommand
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return this._resizeImageCommand ?? (this._resizeImageCommand = new DelegateCommand<object>(para => this.ResizeImageExecuted(para)));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private ICommand _resetImageCommand;
|
|
|
|
|
|
public ICommand ResetImageCommand
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return this._resetImageCommand ?? (this._resetImageCommand = new DelegateCommand<object>(para => this.ResetImageExecuted(para)));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private ICommand _addVideoCommand;
|
|
|
|
|
|
public ICommand AddVideoCommand
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return this._addVideoCommand ?? (this._addVideoCommand = new DelegateCommand<object>(para => this.AddVideoExectued(para)));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private ICommand _addOutLineTextCommand;
|
|
|
|
|
|
public ICommand AddOutLineTextCommand
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return this._addOutLineTextCommand ?? (this._addOutLineTextCommand = new DelegateCommand<object>(para => this.AddOutLineTextExecuted(para)));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private ICommand _addBarcodeCommand;
|
|
|
|
|
|
public ICommand AddBarcodeCommand
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
return this._addBarcodeCommand ?? (this._addBarcodeCommand = new DelegateCommand<object>(para => this.AddBarcodeExecuted(para)));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
2021-07-23 09:42:22 +08:00
|
|
|
|
|
2023-04-09 12:38:57 +08:00
|
|
|
|
#region 属性改变
|
2021-07-23 09:42:22 +08:00
|
|
|
|
private void DiagramViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (e.PropertyName == "IsSelected")
|
|
|
|
|
|
{
|
2023-04-09 12:38:57 +08:00
|
|
|
|
_service.SelectedItemViewModel = CopyHelper.Mapper(DiagramViewModel?.SelectedItem);
|
2023-04-16 12:21:51 +08:00
|
|
|
|
return;
|
2021-07-23 09:42:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var property = sender.GetType().GetProperty(e.PropertyName);
|
|
|
|
|
|
var attr = property.GetCustomAttributes(typeof(BrowsableAttribute), true);
|
2023-04-16 12:21:51 +08:00
|
|
|
|
if (attr != null && attr.OfType<BrowsableAttribute>().FirstOrDefault()?.Browsable != true)
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Status = "*";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
2023-04-09 12:38:57 +08:00
|
|
|
|
#region 方法
|
2023-01-24 09:02:40 +08:00
|
|
|
|
protected virtual bool AddVerify(SelectableDesignerItemViewModelBase arg)
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-01-25 11:11:27 +08:00
|
|
|
|
public static DiagramDocument OpenFile(string filename, string ext)
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
DiagramDocument diagramDocument = null;
|
|
|
|
|
|
|
2023-01-25 11:11:27 +08:00
|
|
|
|
if (ext == ".xml")
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
|
|
|
|
|
XmlSerializer serializer = new XmlSerializer(typeof(DiagramDocument));
|
|
|
|
|
|
FileInfo fileInfo = new FileInfo(filename);
|
|
|
|
|
|
|
|
|
|
|
|
using (TextReader reader = fileInfo.OpenText())
|
|
|
|
|
|
{
|
|
|
|
|
|
diagramDocument = (DiagramDocument)serializer.Deserialize(reader);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
diagramDocument = JsonConvert.DeserializeObject<DiagramDocument>(File.ReadAllText(filename));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-08-03 18:19:47 +08:00
|
|
|
|
return diagramDocument;
|
2021-07-23 09:42:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
catch (System.IO.FileNotFoundException fnfe)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new FileNotFoundException("The system document could not be found ", fnfe);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (System.IO.DirectoryNotFoundException dnfe)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new DirectoryNotFoundException("A required directory was nt found", dnfe);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (System.IO.IOException ioe)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new IOException("A file system error occurred", ioe);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (System.UnauthorizedAccessException uae)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new UnauthorizedAccessException("The requested file system access wasnot granted", uae);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (System.Security.SecurityException se)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new System.Security.SecurityException("The security policy prevents access to a file system resource", se);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (System.Exception e)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new System.Exception(
|
|
|
|
|
|
string.Format("The database format vc invalid \r\n Exception:{0} \r\n InnerException:{1}", e.Message, e.InnerException.Message));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-01-25 11:11:27 +08:00
|
|
|
|
protected virtual void OpenFile(DiagramDocument diagramDocument, string ext)
|
2021-08-03 18:19:47 +08:00
|
|
|
|
{
|
|
|
|
|
|
Title = diagramDocument.Title;
|
|
|
|
|
|
DiagramType = diagramDocument.DiagramType;
|
|
|
|
|
|
|
|
|
|
|
|
List<DiagramViewModel> viewModels = new List<DiagramViewModel>();
|
|
|
|
|
|
foreach (var diagramItem in diagramDocument.DiagramItems)
|
2023-05-27 12:35:44 +08:00
|
|
|
|
{
|
2023-08-26 15:02:43 +08:00
|
|
|
|
var viewModel = GetDiagramViewModel(diagramItem, ext);
|
2021-08-03 18:19:47 +08:00
|
|
|
|
viewModels.Add(viewModel);
|
|
|
|
|
|
}
|
|
|
|
|
|
DiagramViewModels = new ObservableCollection<IDiagramViewModel>(viewModels);
|
2023-09-03 21:11:23 +08:00
|
|
|
|
foreach (var vm in DiagramViewModels)
|
|
|
|
|
|
{
|
|
|
|
|
|
vm.Init(false);
|
|
|
|
|
|
}
|
2021-08-03 18:19:47 +08:00
|
|
|
|
DiagramViewModel = DiagramViewModels.FirstOrDefault();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-07-23 09:42:22 +08:00
|
|
|
|
public bool SaveFile(bool isSaveAs = false)
|
|
|
|
|
|
{
|
|
|
|
|
|
string filter = "Files (*.xml)|*.xml|Files (*.json)|*.json|All Files (*.*)|*.*";
|
|
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(FileName) || isSaveAs == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
Microsoft.Win32.SaveFileDialog saveFile = new Microsoft.Win32.SaveFileDialog();
|
|
|
|
|
|
saveFile.Filter = filter;
|
|
|
|
|
|
if (saveFile.ShowDialog() == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
FileName = saveFile.FileName;
|
|
|
|
|
|
Title = Path.GetFileNameWithoutExtension(FileName);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-01-25 11:11:27 +08:00
|
|
|
|
var ext = Path.GetExtension(FileName);
|
2021-07-23 09:42:22 +08:00
|
|
|
|
|
|
|
|
|
|
DiagramDocument diagramDocument = new DiagramDocument();
|
|
|
|
|
|
diagramDocument.DiagramItems = new List<DiagramItem>();
|
|
|
|
|
|
diagramDocument.Title = Title;
|
|
|
|
|
|
diagramDocument.DiagramType = DiagramType;
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var viewModel in DiagramViewModels)
|
|
|
|
|
|
{
|
2023-12-15 23:03:17 +08:00
|
|
|
|
DiagramItem diagramItem = new DiagramItem(viewModel, ext);
|
2021-07-23 09:42:22 +08:00
|
|
|
|
diagramDocument.DiagramItems.Add(diagramItem);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-01-25 11:11:27 +08:00
|
|
|
|
if (ext == ".xml")
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
|
|
|
|
|
FileInfo file = new FileInfo(FileName);
|
|
|
|
|
|
diagramDocument.Save(file);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
File.WriteAllText(FileName, JsonConvert.SerializeObject(diagramDocument));
|
|
|
|
|
|
}
|
|
|
|
|
|
Status = "";
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
2023-04-02 22:59:22 +08:00
|
|
|
|
}
|
2021-07-23 09:42:22 +08:00
|
|
|
|
|
|
|
|
|
|
public virtual void AddPageExecuted(object para)
|
|
|
|
|
|
{
|
|
|
|
|
|
int index = 0;
|
|
|
|
|
|
if (para is DiagramViewModel oldpage)
|
|
|
|
|
|
{
|
|
|
|
|
|
index = DiagramViewModels.IndexOf(oldpage) + 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
index = DiagramViewModels.Count;
|
|
|
|
|
|
}
|
2023-04-02 22:59:22 +08:00
|
|
|
|
var page = GetDiagramViewModel(null, DiagramType, true);
|
2021-07-23 09:42:22 +08:00
|
|
|
|
DiagramViewModels.Insert(index, page);
|
|
|
|
|
|
DiagramViewModel = page;
|
|
|
|
|
|
InitDiagramViewModel();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-08-26 15:02:43 +08:00
|
|
|
|
protected virtual DiagramViewModel GetDiagramViewModel(DiagramItem diagramItem, string ext)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new BlockDiagramViewModel(diagramItem, ext);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-04-02 22:59:22 +08:00
|
|
|
|
protected virtual DiagramViewModel GetDiagramViewModel(string name, DiagramType diagramType, bool initNew)
|
2023-03-08 19:45:07 +08:00
|
|
|
|
{
|
2023-06-19 15:47:39 +08:00
|
|
|
|
return new BlockDiagramViewModel() { Name = name ?? NewNameHelper.GetNewName(DiagramViewModels.Select(p => p.Name), "页-"), DiagramType = diagramType };
|
2023-03-08 19:45:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-07-23 09:42:22 +08:00
|
|
|
|
public void AddCopyPageExecuted(object para)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (DiagramViewModel != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
var viewModel = DiagramViewModel;
|
2023-02-11 23:51:48 +08:00
|
|
|
|
DiagramItem diagramItem = new DiagramItem(viewModel);
|
2023-08-26 15:02:43 +08:00
|
|
|
|
diagramItem.Name = NewNameHelper.GetNewName(DiagramViewModels.Select(p => p.Name), "页-");
|
2021-07-23 09:42:22 +08:00
|
|
|
|
|
2023-08-26 15:02:43 +08:00
|
|
|
|
viewModel = GetDiagramViewModel(diagramItem, ".json");
|
2021-07-23 09:42:22 +08:00
|
|
|
|
|
|
|
|
|
|
DiagramViewModels.Add(viewModel);
|
|
|
|
|
|
DiagramViewModel = viewModel;
|
|
|
|
|
|
InitDiagramViewModel();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void DeletePageExecuted(object para)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (para is DiagramViewModel oldpage)
|
|
|
|
|
|
{
|
|
|
|
|
|
int index = DiagramViewModels.IndexOf(oldpage) - 1;
|
|
|
|
|
|
DiagramViewModels.Remove(oldpage);
|
|
|
|
|
|
if (index > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
DiagramViewModel = DiagramViewModels[index];
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
DiagramViewModel = DiagramViewModels.FirstOrDefault();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void RenamePageExecuted(object para)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (para is DiagramViewModel oldpage)
|
|
|
|
|
|
{
|
|
|
|
|
|
oldpage.IsEditName = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EndRenamePageExecuted(object para)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (para is DiagramViewModel oldpage)
|
|
|
|
|
|
{
|
|
|
|
|
|
oldpage.IsEditName = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void AddImageExecuted(object para)
|
|
|
|
|
|
{
|
|
|
|
|
|
ImageItemViewModel itemBase = new ImageItemViewModel();
|
2023-05-21 22:06:59 +08:00
|
|
|
|
DiagramViewModel?.AddCommand.Execute(itemBase);
|
2023-01-24 16:20:39 +08:00
|
|
|
|
if (itemBase.Root != null)
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
|
|
|
|
|
_service.DrawModeViewModel.CursorMode = CursorMode.Move;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EditImageExecuted(object para)
|
|
|
|
|
|
{
|
2023-04-09 12:38:57 +08:00
|
|
|
|
if (para == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
para = DiagramViewModel.SelectedItem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-07-23 09:42:22 +08:00
|
|
|
|
ImageItemViewModel itemBase = para as ImageItemViewModel;
|
|
|
|
|
|
if (itemBase != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
itemBase.EditData();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void ResizeImageExecuted(object para)
|
|
|
|
|
|
{
|
2023-04-09 12:38:57 +08:00
|
|
|
|
if (para == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
para = DiagramViewModel.SelectedItem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-07-23 09:42:22 +08:00
|
|
|
|
ImageItemViewModel itemBase = para as ImageItemViewModel;
|
|
|
|
|
|
if (itemBase != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
itemBase.StartResize();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void ResetImageExecuted(object para)
|
|
|
|
|
|
{
|
2023-04-09 12:38:57 +08:00
|
|
|
|
if (para == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
para = DiagramViewModel.SelectedItem;
|
|
|
|
|
|
}
|
2021-07-23 09:42:22 +08:00
|
|
|
|
ImageItemViewModel itemBase = para as ImageItemViewModel;
|
|
|
|
|
|
if (itemBase != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
itemBase.Reset();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-04-09 12:38:57 +08:00
|
|
|
|
public void AddVideoExectued(object para)
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
|
|
|
|
|
VideoItemViewModel itemBase = new VideoItemViewModel();
|
2023-05-21 22:06:59 +08:00
|
|
|
|
DiagramViewModel?.AddCommand.Execute(itemBase);
|
2023-01-24 16:20:39 +08:00
|
|
|
|
if (itemBase.Root != null)
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
|
|
|
|
|
_service.DrawModeViewModel.CursorMode = CursorMode.Move;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void AddOutLineTextExecuted(object para)
|
|
|
|
|
|
{
|
|
|
|
|
|
OutLineTextDesignerItemViewModel itemBase = new OutLineTextDesignerItemViewModel();
|
2023-05-21 22:06:59 +08:00
|
|
|
|
DiagramViewModel?.AddCommand.Execute(itemBase);
|
2023-01-24 16:20:39 +08:00
|
|
|
|
if (itemBase.Root != null)
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
|
|
|
|
|
_service.DrawModeViewModel.CursorMode = CursorMode.Move;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void AddBarcodeExecuted(object para)
|
|
|
|
|
|
{
|
2023-04-02 22:59:22 +08:00
|
|
|
|
BarcodeDesignerItemViewModel itemBase = new BarcodeDesignerItemViewModel() { Format = (BarcodeFormat)Enum.Parse(typeof(BarcodeFormat), para.ToString()), Text = "AIStudio.Wpf.DiagramApp" };
|
2023-05-21 22:06:59 +08:00
|
|
|
|
DiagramViewModel?.AddCommand.Execute(itemBase);
|
2023-01-24 16:20:39 +08:00
|
|
|
|
if (itemBase.Root != null)
|
2021-07-23 09:42:22 +08:00
|
|
|
|
{
|
|
|
|
|
|
_service.DrawModeViewModel.CursorMode = CursorMode.Move;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2023-04-09 12:38:57 +08:00
|
|
|
|
#endregion
|
2021-08-02 18:08:43 +08:00
|
|
|
|
|
|
|
|
|
|
public virtual void Dispose()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
2021-07-23 09:42:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|