系统优化

This commit is contained in:
akwkevin
2025-02-03 15:22:00 +08:00
parent ddf89e21e4
commit 141ba3b775
14 changed files with 871 additions and 66 deletions

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
@@ -57,7 +58,7 @@ namespace AIStudio.Wpf.DiagramDesigner
Point point = sourceDataItem.MiddlePosition;
_partialConnection = new ConnectionViewModel(_viewModel, sourceDataItem, new PartCreatedConnectorInfo(point.X, point.Y), LineDrawMode, RouterMode);
_partialConnection = new ConnectionViewModel(_viewModel, sourceDataItem, new PartCreatedConnectorInfo(point.X, point.Y), DrawModeViewModel.LineDrawMode, DrawModeViewModel.LineRouterMode);
_viewModel.Add(_partialConnection);
_partialConnection.ZIndex = -1;
@@ -110,6 +111,20 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
private IDrawModeViewModel DrawModeViewModel
{
get
{
if (_viewModel.DrawModeViewModel != null)
{
return _viewModel.DrawModeViewModel;
}
else
{
return _service.DrawModeViewModel;
}
}
}
private DrawMode DrawMode
{
get
@@ -125,36 +140,6 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
private DrawMode LineDrawMode
{
get
{
if (_viewModel.DrawModeViewModel != null)
{
return _viewModel.DrawModeViewModel.LineDrawMode;
}
else
{
return _service.DrawModeViewModel.LineDrawMode;
}
}
}
private RouterMode RouterMode
{
get
{
if (_viewModel.DrawModeViewModel != null)
{
return _viewModel.DrawModeViewModel.LineRouterMode;
}
else
{
return _service.DrawModeViewModel.LineRouterMode;
}
}
}
#region GridCellSize
public static readonly DependencyProperty GridCellSizeProperty =
@@ -511,22 +496,22 @@ namespace AIStudio.Wpf.DiagramDesigner
{
if (e.PropertyName == nameof(CursorMode))
{
if (_service.DrawModeViewModel.CursorMode == CursorMode.Format)
if (DrawModeViewModel.CursorMode == CursorMode.Format)
{
EnterFormat();
}
else if (_service.DrawModeViewModel.CursorMode == CursorMode.Move)
else if (DrawModeViewModel.CursorMode == CursorMode.Move)
{
EnterMove();
}
else if (_service.DrawModeViewModel.CursorMode == CursorMode.Exit)
else if (DrawModeViewModel.CursorMode == CursorMode.Exit)
{
ExitCursor();
}
}
else if (e.PropertyName == nameof(_service.DrawModeViewModel.DrawingDrawMode))
else if (e.PropertyName == nameof(DrawModeViewModel.DrawingDrawMode))
{
if (_service.DrawModeViewModel.DrawingDrawMode == DrawMode.ColorPicker)
if (DrawModeViewModel.DrawingDrawMode == DrawMode.ColorPicker)
{
EnterColorPicker();
}
@@ -576,7 +561,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{
item.IsHitTestVisible = true;
}
_service.DrawModeViewModel.CursorMode = CursorMode.Normal;
DrawModeViewModel.CursorMode = CursorMode.Normal;
}
private void Format(SelectableDesignerItemViewModelBase source, SelectableDesignerItemViewModelBase target)
@@ -596,7 +581,7 @@ namespace AIStudio.Wpf.DiagramDesigner
if (_service.DrawModeViewModel.CursorMode == CursorMode.Format)
if (DrawModeViewModel.CursorMode == CursorMode.Format)
{
var element = (e.OriginalSource as FrameworkElement);
if (element.DataContext is SelectableDesignerItemViewModelBase target)
@@ -607,7 +592,7 @@ namespace AIStudio.Wpf.DiagramDesigner
ExitCursor();
}
else if (_service.DrawModeViewModel.CursorMode == CursorMode.Move)
else if (DrawModeViewModel.CursorMode == CursorMode.Move)
{
ExitCursor();
return;
@@ -629,8 +614,8 @@ namespace AIStudio.Wpf.DiagramDesigner
}
if (_service.DrawModeViewModel.SharpDrawModeSelected ||
(_service.DrawModeViewModel.DrawingDrawModeSelected && _service.DrawModeViewModel.DrawingDrawMode != DrawMode.Select))
if (DrawModeViewModel.SharpDrawModeSelected ||
(DrawModeViewModel.DrawingDrawModeSelected && DrawModeViewModel.DrawingDrawMode != DrawMode.Select))
{
// create rubberband adorner
AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(this);
@@ -643,7 +628,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
}
else if (_service.DrawModeViewModel.LineDrawModeSelected)//画线模式,可以不命中实体
else if (DrawModeViewModel.LineDrawModeSelected)//画线模式,可以不命中实体
{
if (SourceConnector == null)
{
@@ -676,7 +661,7 @@ namespace AIStudio.Wpf.DiagramDesigner
_viewModel.CurrentColor = ColorPickerManager.GetColor(point.X, point.Y);
//移动
if (_service.DrawModeViewModel.CursorMode == CursorMode.Move)
if (DrawModeViewModel.CursorMode == CursorMode.Move)
{
_viewModel.SelectedItems.OfType<DesignerItemViewModelBase>().ToList().ForEach(p => {
p.Left = currentPoint.X;
@@ -692,7 +677,7 @@ namespace AIStudio.Wpf.DiagramDesigner
_partialConnection.SinkConnectorInfo = new PartCreatedConnectorInfo(currentPoint.X, currentPoint.Y);
SinkConnector = HitTesting(currentPoint);
if (SinkConnector?.Info?.CanAttachTo(SourceConnector?.Info) == false)
if (SinkConnector != SourceConnector && SinkConnector?.Info?.CanAttachTo(SourceConnector?.Info) == false)
{
SinkConnector.Info.DisableAttachTo = true;
}
@@ -759,19 +744,19 @@ namespace AIStudio.Wpf.DiagramDesigner
ConnectorInfoBase sinkDataItem = SinkConnector.Info;
_viewModel.Delete(_partialConnection);
_viewModel.AddCommand.Execute(new ConnectionViewModel(_viewModel, sourceDataItem, sinkDataItem, LineDrawMode, RouterMode));
_viewModel.AddCommand.Execute(new ConnectionViewModel(_viewModel, sourceDataItem, sinkDataItem, DrawModeViewModel.LineDrawMode, DrawModeViewModel.LineRouterMode));
}
else if (_partialConnection.IsFullConnection)//自动连接模式
{
_viewModel.ClearAttachTo();
}
else if (_service.DrawModeViewModel.LineDrawModeSelected)
else if (DrawModeViewModel.LineDrawModeSelected)
{
Point currentPoint = e.GetPosition(this);
ConnectorInfoBase sinkDataItem = new PartCreatedConnectorInfo(currentPoint.X, currentPoint.Y);
_viewModel.Delete(_partialConnection);
_viewModel.AddCommand.Execute(new ConnectionViewModel(_viewModel, sourceDataItem, sinkDataItem, LineDrawMode, RouterMode));
_viewModel.AddCommand.Execute(new ConnectionViewModel(_viewModel, sourceDataItem, sinkDataItem, DrawModeViewModel.LineDrawMode, DrawModeViewModel.LineRouterMode));
}
else
{
@@ -791,7 +776,7 @@ namespace AIStudio.Wpf.DiagramDesigner
SourceItemsContainer = null;
_service.DrawModeViewModel.ResetDrawMode();
DrawModeViewModel.ResetDrawMode();
}
protected override void OnPreviewKeyDown(KeyEventArgs e)
@@ -944,6 +929,10 @@ namespace AIStudio.Wpf.DiagramDesigner
itemBase.MinItemWidth = dragObject.DesiredMinSize.Value.Width;
itemBase.MinItemHeight = dragObject.DesiredMinSize.Value.Height;
}
if (dragObject.ConnectorInfo != null)
{
InitConnectorInfo(itemBase, dragObject.ConnectorInfo);
}
_viewModel.AddCommand.Execute(itemBase);
if (itemBase is BlockDesignerItemViewModel block)
@@ -966,6 +955,7 @@ namespace AIStudio.Wpf.DiagramDesigner
if (!string.IsNullOrEmpty(dragObject.Icon))
itemBase.Icon = dragObject.Icon;
itemBase.ColorViewModel = CopyHelper.Mapper(dragObject.ColorViewModel);
itemBase.FontViewModel = CopyHelper.Mapper(dragObject.FontViewModel);
if (dragObject.DesiredSize != null)
{
itemBase.ItemWidth = dragObject.DesiredSize.Value.Width;
@@ -976,7 +966,10 @@ namespace AIStudio.Wpf.DiagramDesigner
itemBase.MinItemWidth = dragObject.DesiredMinSize.Value.Width;
itemBase.MinItemHeight = dragObject.DesiredMinSize.Value.Height;
}
if (dragObject.ConnectorInfo != null)
{
InitConnectorInfo(itemBase, dragObject.ConnectorInfo);
}
}
itemBase.Left = Math.Max(0, position.X - itemBase.GetItemWidth() / 2);
itemBase.Top = Math.Max(0, position.Y - itemBase.GetItemHeight() / 2);
@@ -1013,5 +1006,14 @@ namespace AIStudio.Wpf.DiagramDesigner
this.Focus();
}
private void InitConnectorInfo(DesignerItemViewModelBase itemBase, List<FullyCreatedConnectorInfo> connectorInfos)
{
itemBase.ClearConnectors();
foreach (var connectorInfo in connectorInfos)
{
itemBase.AddConnector(new FullyCreatedConnectorInfo(itemBase, connectorInfo.Orientation, connectorInfo.IsInnerPoint, connectorInfo.IsPortless) { XRatio = connectorInfo.XRatio, YRatio = connectorInfo.YRatio });
}
}
}
}