最近精简代码,有些bug,修复

This commit is contained in:
艾竹
2023-04-08 14:22:12 +08:00
parent 347488e8e9
commit 78da8f4852
15 changed files with 193 additions and 199 deletions

View File

@@ -16,11 +16,13 @@ using Newtonsoft.Json;
using AIStudio.Wpf.DiagramDesigner.Models;
using AIStudio.Wpf.DiagramDesigner.ViewModels;
using AIStudio.Wpf.DiagramDesigner.ViewModels.BaseViewModel;
using System.Diagnostics;
namespace AIStudio.Wpf.DiagramDesigner
{
public class DesignerCanvas : Canvas
{
#region
private IDiagramViewModel _viewModel
{
get
@@ -35,7 +37,6 @@ namespace AIStudio.Wpf.DiagramDesigner
return DiagramServicesProvider.Instance.Provider;
}
}
private ConnectionViewModel partialConnection;
private List<Connector> connectorsHit = new List<Connector>();
@@ -188,6 +189,9 @@ namespace AIStudio.Wpf.DiagramDesigner
#endregion
#endregion
#region
public DesignerCanvas()
{
this.Focusable = true;
@@ -200,7 +204,6 @@ namespace AIStudio.Wpf.DiagramDesigner
private void DesignerCanvas_Loaded(object sender, RoutedEventArgs e)
{
this.Focus();
}
protected override void OnRender(DrawingContext dc)
@@ -222,7 +225,9 @@ namespace AIStudio.Wpf.DiagramDesigner
dc.DrawLine(new Pen(new SolidColorBrush(GridColor), 1), new Point(i, GridMarginSize.Height), new Point(i, rect.Height - GridMarginSize.Height));
dc.DrawLine(new Pen(new SolidColorBrush(GridColor), 1), new Point(rect.Width - GridMarginSize.Width, GridMarginSize.Height), new Point(rect.Width - GridMarginSize.Width, rect.Height - GridMarginSize.Height));
}
#endregion
#region Format/Move
private void _service_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (sender is IDrawModeViewModel)
@@ -241,7 +246,6 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
#region Format/Move
private void EnterFormat()
{
StreamResourceInfo sri = Application.GetResourceStream(new Uri("pack://application:,,,/AIStudio.Wpf.DiagramDesigner;component/Images/FormatPainter.cur", UriKind.RelativeOrAbsolute));
@@ -270,13 +274,14 @@ namespace AIStudio.Wpf.DiagramDesigner
}
_service.DrawModeViewModel.CursorMode = CursorMode.Normal;
}
#endregion
private void Format(SelectableDesignerItemViewModelBase source, SelectableDesignerItemViewModelBase target)
{
CopyHelper.CopyPropertyValue(source.ColorViewModel, target.ColorViewModel);
CopyHelper.CopyPropertyValue(source.FontViewModel, target.FontViewModel);
CopyHelper.CopyPropertyValue(source.ShapeViewModel, target.ShapeViewModel);
}
#endregion
private Connector sourceConnector;
public Connector SourceConnector
@@ -294,7 +299,6 @@ namespace AIStudio.Wpf.DiagramDesigner
FullyCreatedConnectorInfo sourceDataItem = sourceConnector.Info;
Rect rectangleBounds = sourceConnector.TransformToVisual(this).TransformBounds(new Rect(sourceConnector.RenderSize));
Point point = new Point(rectangleBounds.Left + (rectangleBounds.Width / 2),
rectangleBounds.Bottom + (rectangleBounds.Height / 2));
@@ -305,38 +309,12 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
private FullyCreatedConnectorInfo sourceConnectorInfo;
public FullyCreatedConnectorInfo SourceConnectorInfo
{
get
{
return sourceConnectorInfo;
}
set
{
if (sourceConnectorInfo != value)
{
sourceConnectorInfo = value;
sourceConnector = new Connector() { Name = "占位" };//占位使用
connectorsHit.Add(sourceConnector);
Rect rectangleBounds = new Rect(sourceConnectorInfo.DataItem.Left, sourceConnectorInfo.DataItem.Top, 3, 3);
Point point = new Point(rectangleBounds.Left + (rectangleBounds.Width / 2),
rectangleBounds.Bottom + (rectangleBounds.Height / 2));
partialConnection = new ConnectionViewModel(_viewModel, sourceConnectorInfo, new PartCreatedConnectorInfo(point.X, point.Y), DrawMode, RouterMode);
_viewModel.Add(partialConnection);
}
}
}
protected override void OnMouseDown(MouseButtonEventArgs e)
{
base.OnMouseDown(e);
base.OnMouseDown(e);
if (_viewModel.IsReadOnly) return;
this.Focus();
if (_service.DrawModeViewModel.CursorMode == CursorMode.Format)
{
var element = (e.OriginalSource as FrameworkElement);
@@ -365,20 +343,10 @@ namespace AIStudio.Wpf.DiagramDesigner
if (!(Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)))
{
_viewModel.ClearSelectedItemsCommand.Execute(null);
_viewModel.ClearSelectedItems();
}
//e.Handled = true;
if (_service.DrawModeViewModel.GetDrawMode() == DrawMode.ConnectingLineSmooth)
{
if (connectorsHit.Count == 0)
{
LinkPointDesignerItemViewModel pointItemView = new LinkPointDesignerItemViewModel(rubberbandSelectionStartPoint.Value);
_viewModel.Add(pointItemView);
SourceConnectorInfo = pointItemView.Connectors.FirstOrDefault();
}
}
e.Handled = true;
}
}
@@ -386,12 +354,13 @@ namespace AIStudio.Wpf.DiagramDesigner
protected override void OnMouseMove(MouseEventArgs e)
{
var focusedElement = Keyboard.FocusedElement;
Debug.WriteLine("focusedElement" + focusedElement?.ToString());
base.OnMouseMove(e);
if (_viewModel.IsReadOnly) return;
this.Focus();
Point currentPoint = e.GetPosition(this);
_viewModel.CurrentPoint = new Point(ScreenHelper.WidthToMm(currentPoint.X), ScreenHelper.WidthToMm(currentPoint.Y));
var point = CursorPointManager.GetCursorPosition();
@@ -418,10 +387,6 @@ namespace AIStudio.Wpf.DiagramDesigner
var nearPort = FindNearPortToAttachTo();
if (nearPort != null || partialConnection.SinkConnectorInfoFully != null)
{
//var oldPort = _ongoingLink.TargetPort;
//_ongoingLink.SetTargetPort(nearPort);
//oldPort?.Refresh();
//nearPort?.Refresh();
partialConnection.SinkConnectorInfo = nearPort;
}
}
@@ -447,10 +412,10 @@ namespace AIStudio.Wpf.DiagramDesigner
adornerLayer.Add(adorner);
}
}
}
}
}
//e.Handled = true;
e.Handled = true;
}
protected override void OnMouseUp(MouseButtonEventArgs e)
@@ -459,18 +424,11 @@ namespace AIStudio.Wpf.DiagramDesigner
if (_viewModel.IsReadOnly) return;
this.Focus();
if (_service.DrawModeViewModel.GetDrawMode() == DrawMode.DirectLine)
{
return;
}
Mediator.Instance.NotifyColleagues<bool>("DoneDrawingMessage", true);
if (sourceConnector != null)
{
FullyCreatedConnectorInfo sourceDataItem = sourceConnectorInfo ?? (sourceConnector.Info);
FullyCreatedConnectorInfo sourceDataItem = sourceConnector.Info;
if (connectorsHit.Count() == 2)
{
Connector sinkConnector = connectorsHit.Last();
@@ -481,25 +439,10 @@ namespace AIStudio.Wpf.DiagramDesigner
sinkDataItem.DataItem.Root.Items[indexOfLastTempConnection]);
sinkDataItem.DataItem.Root.AddItemCommand.Execute(new ConnectionViewModel(_viewModel, sourceDataItem, sinkDataItem, DrawMode, RouterMode));
}
else if (partialConnection.IsFullConnection)
else if (partialConnection.IsFullConnection)//自动连接模式
{
partialConnection.RaiseFullConnection();
}
else if (_service.DrawModeViewModel.GetDrawMode() == DrawMode.DirectLine && connectorsHit.Count() == 1)
{
LinkPointDesignerItemViewModel pointItemView = new LinkPointDesignerItemViewModel(e.GetPosition(this));
FullyCreatedConnectorInfo sinkDataItem = pointItemView.TopConnector;
int indexOfLastTempConnection = _viewModel.Items.Count - 1;
_viewModel.Remove(_viewModel.Items[indexOfLastTempConnection]);
_viewModel.Add(pointItemView);
var connector = new ConnectionViewModel(_viewModel, sourceDataItem, sinkDataItem, DrawMode, RouterMode);
_viewModel.AddItemCommand.Execute(connector);
sourceDataItem.DataItem.ZIndex++;
connector.ZIndex--;
}
else
{
//Need to remove last item as we did not finish drawing the path
@@ -513,9 +456,11 @@ namespace AIStudio.Wpf.DiagramDesigner
connectorsHit = new List<Connector>();
sourceConnector = null;
sourceConnectorInfo = null;
_service.DrawModeViewModel.ResetDrawMode();
if (_service.DrawModeViewModel.GetDrawMode() != DrawMode.DirectLine)
{
_service.DrawModeViewModel.ResetDrawMode();
}
}
protected override void OnPreviewKeyDown(KeyEventArgs e)
@@ -577,34 +522,26 @@ namespace AIStudio.Wpf.DiagramDesigner
while (hitObject != null &&
hitObject.GetType() != typeof(DesignerCanvas))
{
if (hitObject is Connector connector && connector.Info != null)
if (hitObject is Connector connector)
{
if (SourceConnector == null || connector.Info.CanAttachTo(SourceConnector.Info))
{
if (connectorsHit.Any(p => p.Name == "占位"))
{
connectorsHit.Remove(connectorsHit.FirstOrDefault(p => p.Name == "占位"));
}
if (!connectorsHit.Contains(hitObject as Connector))
connectorsHit.Add(hitObject as Connector);
}
if (!connectorsHit.Contains(hitObject as Connector))
connectorsHit.Add(hitObject as Connector);
}
hitObject = VisualTreeHelper.GetParent(hitObject);
}
}
protected override void OnDrop(DragEventArgs e)
{
base.OnDrop(e);
if (_viewModel.IsReadOnly) return;
if (_viewModel.IsReadOnly) return;
DragObject dragObject = e.Data.GetData(typeof(DragObject)) as DragObject;
if (dragObject != null)
{
_viewModel.ClearSelectedItemsCommand.Execute(null);
Point position = e.GetPosition(this);
Point position = e.GetPosition(this);
if (dragObject.DesignerItem is SerializableObject serializableObject)
{
var designerItems = serializableObject.ToObject();
@@ -618,7 +555,7 @@ namespace AIStudio.Wpf.DiagramDesigner
foreach (var item in designerItems.OfType<DesignerItemViewModelBase>())
{
item.Left += position.X - itemswidth / 2;
item.Top += position.Y - itemsheight / 2;
item.Top += position.Y - itemsheight / 2;
}
_viewModel.AddItemCommand.Execute(designerItems);
}
@@ -668,7 +605,8 @@ namespace AIStudio.Wpf.DiagramDesigner
this.Focus();
}
public FullyCreatedConnectorInfo FindNearPortToAttachTo()
#region
private FullyCreatedConnectorInfo FindNearPortToAttachTo()
{
foreach (var port in _viewModel.Items.OfType<DesignerItemViewModelBase>().ToList().SelectMany(n => n.Connectors))
{
@@ -679,5 +617,6 @@ namespace AIStudio.Wpf.DiagramDesigner
return null;
}
#endregion
}
}