Files
aistudio-wpf-diagram/AIStudio.Wpf.Logical/ViewModels/LogicalGateItemViewModel.cs
2023-01-24 16:20:39 +08:00

946 lines
24 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows.Media;
using AIStudio.Wpf.DiagramDesigner;
using AIStudio.Wpf.DiagramDesigner.Services;
namespace AIStudio.Wpf.Logical.ViewModels
{
public class LogicalGateItemViewModel : LogicalGateItemViewModelBase
{
protected IUIVisualizerService visualiserService;
public LogicalGateItemViewModel(LogicalType logicalType) : base(logicalType)
{
ColorViewModel.FillColor.Color = Colors.Orange;
}
public LogicalGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public LogicalGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
protected override void Init()
{
base.Init();
visualiserService = ApplicationServicesProvider.Instance.Provider.VisualizerService;
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
LogicalGateDesignerItemBase designer = designerbase as LogicalGateDesignerItemBase;
this.Value = designer.Value;
}
protected override void ExecuteEditCommand(object parameter)
{
if (LogicalType == LogicalType.Constant)
{
ValueDesignerItemData data = new ValueDesignerItemData(Value);
if (visualiserService.ShowDialog(data) == true)
{
this.Value = data.Value;
}
}
else
{
LogicalGateItemData data = new LogicalGateItemData(Input.Values);
if (visualiserService.ShowDialog(data) == true)
{
}
}
}
}
public class AddGateItemViewModel : LogicalGateItemViewModel
{
public AddGateItemViewModel() : base(LogicalType.ADD)
{
}
public AddGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public AddGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class SubtractGateItemViewModel : LogicalGateItemViewModel
{
public SubtractGateItemViewModel() : base(LogicalType.SUB)
{
}
public SubtractGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public SubtractGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class MultiplyGateItemViewModel : LogicalGateItemViewModel
{
public MultiplyGateItemViewModel() : base(LogicalType.MUL)
{
}
public MultiplyGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public MultiplyGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class DivideGateItemViewModel : LogicalGateItemViewModel
{
public DivideGateItemViewModel() : base(LogicalType.DIV)
{
}
public DivideGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public DivideGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class AverageGateItemViewModel : LogicalGateItemViewModel
{
public AverageGateItemViewModel() : base(LogicalType.AVE)
{
}
public AverageGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public AverageGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class MODGateItemViewModel : LogicalGateItemViewModel
{
public MODGateItemViewModel() : base(LogicalType.MOD)
{
}
public MODGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public MODGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class ANDGateItemViewModel : LogicalGateItemViewModel
{
public ANDGateItemViewModel() : base(LogicalType.AND)
{
}
public ANDGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public ANDGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class ORGateItemViewModel : LogicalGateItemViewModel
{
public ORGateItemViewModel() : base(LogicalType.OR)
{
}
public ORGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public ORGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class XORGateItemViewModel : LogicalGateItemViewModel
{
public XORGateItemViewModel() : base(LogicalType.XOR)
{
}
public XORGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public XORGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class NOTGateItemViewModel : LogicalGateItemViewModel
{
public NOTGateItemViewModel() : base(LogicalType.NOT)
{
}
public NOTGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public NOTGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class SHLGateItemViewModel : LogicalGateItemViewModel
{
public SHLGateItemViewModel() : base(LogicalType.SHL)
{
}
public SHLGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public SHLGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class SHRGateItemViewModel : LogicalGateItemViewModel
{
public SHRGateItemViewModel() : base(LogicalType.SHR)
{
}
public SHRGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public SHRGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class ROLGateItemViewModel : LogicalGateItemViewModel
{
public ROLGateItemViewModel() : base(LogicalType.ROL)
{
}
public ROLGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public ROLGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class RORGateItemViewModel : LogicalGateItemViewModel
{
public RORGateItemViewModel() : base(LogicalType.ROR)
{
}
public RORGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public RORGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class SELGateItemViewModel : LogicalGateItemViewModel
{
public SELGateItemViewModel() : base(LogicalType.SEL)
{
}
public SELGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public SELGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class MAXGateItemViewModel : LogicalGateItemViewModel
{
public MAXGateItemViewModel() : base(LogicalType.MAX)
{
}
public MAXGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public MAXGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class MINGateItemViewModel : LogicalGateItemViewModel
{
public MINGateItemViewModel() : base(LogicalType.MIN)
{
}
public MINGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public MINGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class LIMITGateItemViewModel : LogicalGateItemViewModel
{
public LIMITGateItemViewModel() : base(LogicalType.LIMIT)
{
}
public LIMITGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public LIMITGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class GTGateItemViewModel : LogicalGateItemViewModel
{
public GTGateItemViewModel() : base(LogicalType.GT)
{
}
public GTGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public GTGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class LTGateItemViewModel : LogicalGateItemViewModel
{
public LTGateItemViewModel() : base(LogicalType.GT)
{
}
public LTGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public LTGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class GEGateItemViewModel : LogicalGateItemViewModel
{
public GEGateItemViewModel() : base(LogicalType.GE)
{
}
public GEGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public GEGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class LEGateItemViewModel : LogicalGateItemViewModel
{
public LEGateItemViewModel() : base(LogicalType.LE)
{
}
public LEGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public LEGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class EQGateItemViewModel : LogicalGateItemViewModel
{
public EQGateItemViewModel() : base(LogicalType.LE)
{
}
public EQGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public EQGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class NEGateItemViewModel : LogicalGateItemViewModel
{
public NEGateItemViewModel() : base(LogicalType.NE)
{
}
public NEGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public NEGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class ABSGateItemViewModel : LogicalGateItemViewModel
{
public ABSGateItemViewModel() : base(LogicalType.ABS)
{
}
public ABSGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public ABSGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class SQRTGateItemViewModel : LogicalGateItemViewModel
{
public SQRTGateItemViewModel() : base(LogicalType.SQRT)
{
}
public SQRTGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public SQRTGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class LNGateItemViewModel : LogicalGateItemViewModel
{
public LNGateItemViewModel() : base(LogicalType.LN)
{
}
public LNGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public LNGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class LOGGateItemViewModel : LogicalGateItemViewModel
{
public LOGGateItemViewModel() : base(LogicalType.LOG)
{
}
public LOGGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public LOGGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class EXPGateItemViewModel : LogicalGateItemViewModel
{
public EXPGateItemViewModel() : base(LogicalType.EXP)
{
}
public EXPGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public EXPGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class SINGateItemViewModel : LogicalGateItemViewModel
{
public SINGateItemViewModel() : base(LogicalType.SIN)
{
}
public SINGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public SINGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class COSGateItemViewModel : LogicalGateItemViewModel
{
public COSGateItemViewModel() : base(LogicalType.COS)
{
}
public COSGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public COSGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class TANGateItemViewModel : LogicalGateItemViewModel
{
public TANGateItemViewModel() : base(LogicalType.TAN)
{
}
public TANGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public TANGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class ASINGateItemViewModel : LogicalGateItemViewModel
{
public ASINGateItemViewModel() : base(LogicalType.ASIN)
{
}
public ASINGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public ASINGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class ACOSGateItemViewModel : LogicalGateItemViewModel
{
public ACOSGateItemViewModel() : base(LogicalType.ACOS)
{
}
public ACOSGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public ACOSGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class ATANGateItemViewModel : LogicalGateItemViewModel
{
public ATANGateItemViewModel() : base(LogicalType.ATAN)
{
}
public ATANGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public ATANGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class EXPTGateItemViewModel : LogicalGateItemViewModel
{
public EXPTGateItemViewModel() : base(LogicalType.EXPT)
{
}
public EXPTGateItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public EXPTGateItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class ConstantDesignerItemViewModel : LogicalGateItemViewModel
{
public ConstantDesignerItemViewModel() : base(LogicalType.Constant)
{
ItemHeight = 28;
}
public ConstantDesignerItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public ConstantDesignerItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
}
public class InputItemViewModel : LogicalGateItemViewModel
{
public InputItemViewModel() : base(LogicalType.Input)
{
ItemHeight = 28;
}
public InputItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public InputItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
LogicalGateDesignerItemBase designer = designerbase as LogicalGateDesignerItemBase;
this.Value = designer.Value;
LinkPoint = LogicalService.LinkPoint.FirstOrDefault(p => p.Id.ToString() == designer.Icon); //不想新增字段了就用这个Icon保存自定义测点的Id吧。
if (LinkPoint != null)
{
LinkPoint.Value = designer.Value;
}
}
private LinkPoint _linkPoint;
public LinkPoint LinkPoint
{
get { return _linkPoint; }
set
{
if (SetProperty(ref _linkPoint, value))
{
Icon = _linkPoint?.Id.ToString();//不想新增字段了就用这个Icon保存自定义测点的Id吧。
Text = _linkPoint?.Name;
}
}
}
protected override void ExecuteEditCommand(object parameter)
{
LinkPointDesignerItemData data = new LinkPointDesignerItemData(LinkPoint);
if (visualiserService.ShowDialog(data) == true)
{
this.LinkPoint = data.LinkPoint;
}
}
}
public class OutputItemViewModel : LogicalGateItemViewModel
{
public OutputItemViewModel() : base(LogicalType.Output)
{
ItemHeight = 28;
}
public OutputItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
}
public OutputItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
LogicalGateDesignerItemBase designer = designerbase as LogicalGateDesignerItemBase;
this.Value = designer.Value;
LinkPoint = LogicalService.LinkPoint.FirstOrDefault(p => p.Id.ToString() == designer.Icon); //不想新增字段了就用这个Icon保存自定义测点的Id吧。
if (LinkPoint != null)
{
LinkPoint.Value = designer.Value;
}
}
private LinkPoint _linkPoint;
public LinkPoint LinkPoint
{
get { return _linkPoint; }
set
{
if (SetProperty(ref _linkPoint, value))
{
Icon = _linkPoint?.Id.ToString();//不想新增字段了就用这个Icon保存自定义测点的Id吧。
Text = _linkPoint?.Name;
}
}
}
protected override void ExecuteEditCommand(object parameter)
{
LinkPointDesignerItemData data = new LinkPointDesignerItemData(LinkPoint);
if (visualiserService.ShowDialog(data) == true)
{
this.LinkPoint = data.LinkPoint;
}
}
}
public class TimerDesignerItemViewModel : LogicalGateItemViewModel
{
private System.Timers.Timer readDataTimer = new System.Timers.Timer();
public Action Do;
public TimerDesignerItemViewModel() : base(LogicalType.Time)
{
ItemHeight = 32;
ItemWidth = 32;
Value = 1;
Start();
BuildMenuOptions();
}
public TimerDesignerItemViewModel(IDiagramViewModel root, LogicalGateDesignerItemBase designer) : base(root, designer)
{
BuildMenuOptions();
}
public TimerDesignerItemViewModel(IDiagramViewModel root, string json) : base(root, json)
{
BuildMenuOptions();
}
protected override void Init()
{
MenuItemCommand = new SimpleCommand(ExecuteMenuItemCommand);
base.Init();
readDataTimer.Elapsed += timeCycle;
readDataTimer.Interval = 1000;
}
protected override void LoadDesignerItemViewModel(IDiagramViewModel root, SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(root, designerbase);
if (IsEnabled)
{
Start();
}
else
{
Stop();
}
}
private void Start()
{
IsEnabled = true;
Output[0].ColorViewModel.FillColor.Color = Colors.Green;
readDataTimer.Start();
}
private void Stop()
{
IsEnabled = false;
Output[0].ColorViewModel.FillColor.Color = Colors.Red;
readDataTimer.Stop();
}
private void ExecuteMenuItemCommand(object obj)
{
if ((obj as CinchMenuItem).IsChecked == true)
{
Start();
}
else
{
Stop();
}
}
public SimpleCommand MenuItemCommand { get; private set; }
private void BuildMenuOptions()
{
menuOptions = new ObservableCollection<CinchMenuItem>();
CinchMenuItem menuItem = new CinchMenuItem();
menuItem.Text = "启动";
menuItem.IsCheckable = true;
menuItem.IsChecked = IsEnabled;
menuItem.Command = MenuItemCommand;
menuItem.CommandParameter = menuItem;
menuOptions.Add(menuItem);
}
protected override void ExecuteEditCommand(object parameter)
{
ValueDesignerItemData data = new ValueDesignerItemData(Value);
if (visualiserService.ShowDialog(data) == true)
{
this.Value = data.Value;
readDataTimer.Interval = this.Value * 1000;
}
}
private void timeCycle(object sender, EventArgs e)
{
Output.FirstOrDefault().Value.ConnectorValue += Value;
if (Do != null)
{
Do();
}
}
public override void Dispose()
{
base.Dispose();
readDataTimer.Stop();
readDataTimer.Dispose();
}
}
}