| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- using System;
- using System.IO;
- using Flowchart;
- using System.Linq;
- using System.Windows;
- using System.Text.Json;
- using System.ComponentModel;
- using SHJX.Service.Common.Utils;
- using System.Text.Encodings.Web;
- using System.Collections.Generic;
- using SHJX.Service.Model.WorkFlowModules;
- using System.Windows.Input;
- namespace SHJX.Service.Shell.Views.Manual
- {
- #region Module
- public class SaveLocalJsonData
- {
- public List<FlowNode> Nodes { get; set; }
- public List<Link> Links { get; set; }
- }
- #endregion
- /// <summary>
- /// CustomMoveWindow.xaml 的交互逻辑
- /// </summary>
- public partial class CustomMoveWindow : Window
- {
- private readonly string pathFile = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "\\userroute\\";
- private readonly string fileName = "workflow.json";
- private FlowchartModel _model;
- private string OpKey { get; init; }
- public CustomMoveWindow()
- {
- Owner = Application.Current.MainWindow;
- InitializeComponent();
- }
- public CustomMoveWindow(string opkey)
- {
- Owner = Application.Current.MainWindow;
- InitializeComponent();
- txt_point.Text = opkey;
- _editor.Zoom = 0.8;
- OpKey = opkey;
- _model = CreateModel();
- _editor.Controller = new Controller(_editor, _model);
- _editor.DragDropTool = new DragDropTool(_editor, _model);
- _editor.DragTool = new CustomMoveResizeTool(_editor, _model)
- {
- MoveGridCell = _editor.GridCellSize
- };
- _editor.LinkTool = new CustomLinkTool(_editor);
- _editor.Selection.PropertyChanged += new PropertyChangedEventHandler(Selection_PropertyChanged);
- ItemsControlDragHelper _dragHelper = new(_toolbox, this);
- FillToolbox();
- }
- private FlowchartModel CreateModel()
- {
- _model = new FlowchartModel();
- if (!File.Exists(string.Concat(pathFile, fileName)))
- {
- return _model;
- }
- string readInfo = File.ReadAllText(string.Concat(pathFile, fileName));
- if (string.IsNullOrWhiteSpace(readInfo))
- {
- return _model;
- }
- SaveLocalJsonData data = JsonSerializer.Deserialize<SaveLocalJsonData>(readInfo);
- foreach (FlowNode node in data.Nodes)
- {
- _model.Nodes.Add(node);
- }
- data.Links.ForEach(link =>
- {
- FlowNode source = data.Nodes.Where(item => item.Column.Equals(link.Source.Column) && item.Row.Equals(link.Source.Row)).FirstOrDefault();
- FlowNode target = data.Nodes.Where(item => item.Column.Equals(link.Target.Column) && item.Row.Equals(link.Target.Row)).FirstOrDefault();
- _model.Links.Add(new Link(source, link.SourcePort, target, link.TargetPort));
- });
- return _model;
- }
- private void FillToolbox()
- {
- foreach (NodeKinds nk in Enum.GetValues(typeof(NodeKinds)))
- {
- FlowNode node = new FlowNode(nk);
- FrameworkElement ui = Controller.CreateContent(node);
- ui.Width = 80;
- ui.Height = 40;
- ui.Margin = new Thickness(5);
- ui.Tag = nk;
- _toolbox.Items.Add(ui);
- }
- }
- private void Selection_PropertyChanged(object sender, PropertyChangedEventArgs e)
- {
- _ = _editor.Selection.Primary;
- }
- private void btn_custom_move_Click(object sender, RoutedEventArgs e)
- {
- FlowNode startNode = _model.Nodes.FirstOrDefault(item => item.Text.Equals("开始"));
- if (startNode is null)
- {
- return;
- }
- List<string> lists = new();
- GetNodeName(ref lists, startNode);
- List<CustomMoveStep> moveSteps = new();
- foreach (string item in lists)
- {
- FlowNode node = _model.Nodes.FirstOrDefault(it => it.Text.Equals(item));
- if (node is null)
- {
- continue;
- }
- if (moveSteps.Any())
- {
- moveSteps.Last().NextStep = item;
- }
- CustomMoveStep step = new(item);
- moveSteps.Add(step);
- }
- WorkFlowEventArgs args = new(OpKey, moveSteps);
- Messager<WorkFlowEventArgs>.Send("CustomMove", args);
- }
- private void btn_save_move_Click(object sender, RoutedEventArgs e)
- {
- SaveLocalJsonData saveLocalJson = new()
- {
- Nodes = _model.Nodes.ToList(),
- Links = _model.Links.ToList()
- };
- string stepInfo = JsonSerializer.Serialize(saveLocalJson, new JsonSerializerOptions
- {
- Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
- });
- DirectoryInfo dir = new(pathFile);
- if (!dir.Exists)
- {
- dir.Create();
- }
- File.WriteAllText(string.Concat(pathFile, fileName), stepInfo);
- }
- public void GetNodeName(ref List<string> list, FlowNode node)
- {
- list.Add(node.Text);
- Link startLink = _model.Links.FirstOrDefault(item => item.Source.Row.Equals(node.Row) && item.Source.Column.Equals(node.Column));
- if (startLink == null)
- {
- return;
- }
- FlowNode nextNode = _model.Nodes.FirstOrDefault(item => item.Row.Equals(startLink.Target.Row) && item.Column.Equals(startLink.Target.Column));
- if (nextNode == null)
- {
- return;
- }
- GetNodeName(ref list, nextNode);
- }
- private Key DownKey;
- private void Window_KeyDown(object sender, KeyEventArgs e)
- {
- DownKey = e.Key;
- }
- private void Window_KeyUp(object sender, KeyEventArgs e)
- {
- DownKey = Key.None;
- }
- private void Window_MouseWheel(object sender, MouseWheelEventArgs e)
- {
- if (DownKey.Equals(Key.LeftCtrl))
- {
- if (e.Delta > 0)
- {
- _editor.Zoom += 0.05;
- }
- else
- {
- _editor.Zoom -= 0.05;
- }
- }
- }
- private void WorkFlowEdit_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- DragMove();
- }
- private void btn_edit_close_Click(object sender, RoutedEventArgs e)
- {
- Close();
- }
- }
- }
|