2025-03-18 21:01:15 +08:00
|
|
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
2025-03-22 18:14:48 +08:00
|
|
|
|
using CommunityToolkit.Mvvm.Input;
|
2025-05-26 23:55:23 +08:00
|
|
|
|
using Serein.Workbench.Api;
|
2025-03-22 18:14:48 +08:00
|
|
|
|
using Serein.Workbench.Models;
|
2025-05-26 23:55:23 +08:00
|
|
|
|
using Serein.Workbench.Node.View;
|
2025-03-24 15:44:34 +08:00
|
|
|
|
using Serein.Workbench.Services;
|
2025-03-22 18:14:48 +08:00
|
|
|
|
using Serein.Workbench.Views;
|
2025-03-18 21:01:15 +08:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
2025-03-22 18:14:48 +08:00
|
|
|
|
using System.Collections.ObjectModel;
|
|
|
|
|
|
using System.ComponentModel;
|
2025-03-18 21:01:15 +08:00
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using System.Threading.Tasks;
|
2025-03-22 18:14:48 +08:00
|
|
|
|
using System.Windows.Input;
|
2025-03-24 15:44:34 +08:00
|
|
|
|
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
2025-03-18 21:01:15 +08:00
|
|
|
|
|
|
|
|
|
|
namespace Serein.Workbench.ViewModels
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 流程编辑数据视图
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public partial class FlowEditViewModel : ObservableObject
|
|
|
|
|
|
{
|
2025-05-26 23:55:23 +08:00
|
|
|
|
public ObservableCollection<FlowEditorTabModel> CanvasTabs { get; set; } = [];
|
2025-03-22 18:14:48 +08:00
|
|
|
|
|
2025-05-26 23:55:23 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 当前选择的画布
|
|
|
|
|
|
/// </summary>
|
2025-03-22 18:14:48 +08:00
|
|
|
|
[ObservableProperty]
|
2025-05-26 23:55:23 +08:00
|
|
|
|
private FlowEditorTabModel _selectedTab;
|
2025-03-22 18:14:48 +08:00
|
|
|
|
|
2025-03-24 15:44:34 +08:00
|
|
|
|
private readonly FlowNodeService flowNodeService;
|
2025-03-22 18:14:48 +08:00
|
|
|
|
|
2025-03-24 15:44:34 +08:00
|
|
|
|
public FlowEditViewModel(FlowNodeService flowNodeService)
|
2025-03-22 18:14:48 +08:00
|
|
|
|
{
|
2025-03-24 15:44:34 +08:00
|
|
|
|
this.flowNodeService = flowNodeService;
|
2025-05-27 18:32:40 +08:00
|
|
|
|
|
2025-03-22 18:14:48 +08:00
|
|
|
|
|
2025-05-26 23:55:23 +08:00
|
|
|
|
flowNodeService.OnCreateFlowCanvasView += OnCreateFlowCanvasView; // 创建了画布
|
|
|
|
|
|
flowNodeService.OnRemoveFlowCanvasView += OnRemoveFlowCanvasView; // 移除了画布
|
2025-03-24 15:44:34 +08:00
|
|
|
|
this.PropertyChanged += OnPropertyChanged;
|
2025-05-26 23:55:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
2025-03-22 18:14:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-05-26 23:55:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
2025-03-24 15:44:34 +08:00
|
|
|
|
private void OnPropertyChanged(object? value, PropertyChangedEventArgs e)
|
2025-03-22 18:14:48 +08:00
|
|
|
|
{
|
2025-05-26 23:55:23 +08:00
|
|
|
|
if (this.SelectedTab is null) return;
|
|
|
|
|
|
flowNodeService.CurrentSelectCanvas = this.SelectedTab.Content;
|
2025-03-22 18:14:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-03-24 15:44:34 +08:00
|
|
|
|
#region 响应环境事件
|
2025-05-26 23:55:23 +08:00
|
|
|
|
private void OnCreateFlowCanvasView(FlowCanvasView canvas)
|
2025-03-22 18:14:48 +08:00
|
|
|
|
{
|
2025-05-26 23:55:23 +08:00
|
|
|
|
var model = new FlowEditorTabModel(canvas);
|
|
|
|
|
|
CanvasTabs.Add(model);
|
|
|
|
|
|
SelectedTab = model;
|
2025-03-24 15:44:34 +08:00
|
|
|
|
}
|
2025-05-26 23:55:23 +08:00
|
|
|
|
private void OnRemoveFlowCanvasView(FlowCanvasView canvas)
|
2025-03-24 15:44:34 +08:00
|
|
|
|
{
|
2025-05-26 23:55:23 +08:00
|
|
|
|
var tab = CanvasTabs.FirstOrDefault(c => c.Content.Guid.Equals(canvas.Guid));
|
2025-03-24 15:44:34 +08:00
|
|
|
|
if (tab is null)
|
2025-03-22 18:14:48 +08:00
|
|
|
|
{
|
2025-03-24 15:44:34 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
2025-05-26 23:55:23 +08:00
|
|
|
|
CanvasTabs.Remove(tab);
|
|
|
|
|
|
|
|
|
|
|
|
if (CanvasTabs.Count > 0 && CanvasTabs[^1] is FlowEditorTabModel c)
|
2025-03-24 15:44:34 +08:00
|
|
|
|
{
|
2025-05-26 23:55:23 +08:00
|
|
|
|
SelectedTab = c;
|
2025-03-22 18:14:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-03-24 15:44:34 +08:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
2025-03-22 18:14:48 +08:00
|
|
|
|
|
2025-03-24 15:44:34 +08:00
|
|
|
|
|
2025-03-22 18:14:48 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 进入编辑模式
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="tab"></param>
|
2025-05-26 23:55:23 +08:00
|
|
|
|
public void StartEditingTab(FlowEditorTabModel tab)
|
2025-03-22 18:14:48 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (tab != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
tab.IsEditing = true;
|
2025-05-26 23:55:23 +08:00
|
|
|
|
OnPropertyChanged(nameof(CanvasTabs)); // 刷新Tabs集合,以便更新UI
|
2025-03-22 18:14:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 结束编辑,重命名
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="tab"></param>
|
|
|
|
|
|
/// <param name="newName"></param>
|
2025-05-26 23:55:23 +08:00
|
|
|
|
public void EndEditingTab(FlowEditorTabModel tab, string? newName = null)
|
2025-03-22 18:14:48 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (tab != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
tab.IsEditing = false;
|
2025-05-26 23:55:23 +08:00
|
|
|
|
if(tab.Name != newName && !string.IsNullOrWhiteSpace(newName)) tab.Name = newName; // 名称合法时设置新名称
|
|
|
|
|
|
OnPropertyChanged(nameof(CanvasTabs)); // 刷新Tabs集合
|
2025-03-22 18:14:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-03-18 21:01:15 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|