mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-03 00:00:57 +08:00
序列化调整中
This commit is contained in:
@@ -18,6 +18,27 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
public class DiagramViewModel : BindableBase, IDiagramViewModel
|
||||
{
|
||||
#region 属性
|
||||
public ObservableCollection<SelectableDesignerItemViewModelBase> Items { get; set; } = new ObservableCollection<SelectableDesignerItemViewModelBase>();
|
||||
public List<SelectableDesignerItemViewModelBase> SelectedItems
|
||||
{
|
||||
get
|
||||
{
|
||||
return Items.Where(x => x.IsSelected).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
private SelectionService selectionService;
|
||||
public SelectionService SelectionService
|
||||
{
|
||||
get
|
||||
{
|
||||
if (selectionService == null)
|
||||
selectionService = new SelectionService(this);
|
||||
|
||||
return selectionService;
|
||||
}
|
||||
}
|
||||
|
||||
private bool _isReadOnly;
|
||||
public bool IsReadOnly
|
||||
{
|
||||
@@ -61,7 +82,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
|
||||
private Size _pageSize = new Size(1000, 600);
|
||||
|
||||
public Size PageSize
|
||||
{
|
||||
get
|
||||
@@ -388,145 +408,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
private double OffsetY = 10;
|
||||
#endregion
|
||||
|
||||
private DoCommandManager DoCommandManager = new DoCommandManager();
|
||||
public DiagramViewModel()
|
||||
{
|
||||
CreateNewDiagramCommand = new SimpleCommand(ExecuteEnable, ExecuteCreateNewDiagramCommand);
|
||||
AddItemCommand = new SimpleCommand(ExecuteEnable, ExecuteAddItemCommand);
|
||||
DirectAddItemCommand = new SimpleCommand(ExecuteEnable, ExecuteDirectAddItemCommand);
|
||||
RemoveItemCommand = new SimpleCommand(ExecuteEnable, ExecuteRemoveItemCommand);
|
||||
DirectRemoveItemCommand = new SimpleCommand(ExecuteEnable, ExecuteDirectRemoveItemCommand);
|
||||
ClearSelectedItemsCommand = new SimpleCommand(ExecuteEnable, ExecuteClearSelectedItemsCommand);
|
||||
|
||||
AlignTopCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignTopCommand);
|
||||
AlignVerticalCentersCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignVerticalCentersCommand);
|
||||
AlignBottomCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignBottomCommand);
|
||||
AlignLeftCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignLeftCommand);
|
||||
AlignHorizontalCentersCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignHorizontalCentersCommand);
|
||||
AlignRightCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignRightCommand);
|
||||
BringForwardCommand = new SimpleCommand(ExecuteEnable, ExecuteBringForwardCommand);
|
||||
BringToFrontCommand = new SimpleCommand(ExecuteEnable, ExecuteBringToFrontCommand);
|
||||
SendBackwardCommand = new SimpleCommand(ExecuteEnable, ExecuteSendBackwardCommand);
|
||||
SendToBackCommand = new SimpleCommand(ExecuteEnable, ExecuteSendToBackCommand);
|
||||
DistributeHorizontalCommand = new SimpleCommand(ExecuteEnable, ExecuteDistributeHorizontalCommand);
|
||||
DistributeVerticalCommand = new SimpleCommand(ExecuteEnable, ExecuteDistributeVerticalCommand);
|
||||
SelectAllCommand = new SimpleCommand(ExecuteEnable, ExecuteSelectAllCommand);
|
||||
CopyCommand = new SimpleCommand(ExecuteEnable, ExecuteCopyCommand);
|
||||
PasteCommand = new SimpleCommand(ExecuteEnable, ExecutePasteCommand);
|
||||
CutCommand = new SimpleCommand(ExecuteEnable, ExecuteCutCommand);
|
||||
DeleteCommand = new SimpleCommand(ExecuteEnable, ExecuteDeleteCommand);
|
||||
LeftMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteLeftMoveCommand);
|
||||
RightMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteRightMoveCommand);
|
||||
UpMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteUpMoveCommand);
|
||||
DownMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteDownMoveCommand);
|
||||
CenterMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteCenterMoveCommand);
|
||||
SameSizeCommand = new SimpleCommand(ExecuteEnable, ExecuteSameSizeCommand);
|
||||
SameWidthCommand = new SimpleCommand(ExecuteEnable, ExecuteSameWidthCommand);
|
||||
SameHeightCommand = new SimpleCommand(ExecuteEnable, ExecuteSameHeightCommand);
|
||||
SameAngleCommand = new SimpleCommand(ExecuteEnable, ExecuteSameAngleCommand);
|
||||
GroupCommand = new SimpleCommand(ExecuteEnable, ExecuteGroupCommand);
|
||||
UngroupCommand = new SimpleCommand(ExecuteEnable, ExecuteUngroupCommand);
|
||||
LockCommand = new SimpleCommand(ExecuteEnable, ExecuteLockCommand);
|
||||
UnlockCommand = new SimpleCommand(ExecuteEnable, ExecuteUnlockCommand);
|
||||
Mediator.Instance.Register(this);
|
||||
|
||||
Items.CollectionChanged += Items_CollectionChanged;
|
||||
}
|
||||
|
||||
public bool ExecuteEnable(object para)
|
||||
{
|
||||
return IsReadOnly == false;
|
||||
}
|
||||
|
||||
#region UnDo ReDo
|
||||
|
||||
private void Do(object sender, string propertyName, object newvalue)
|
||||
{
|
||||
sender.SetPropertyValue(propertyName, newvalue);
|
||||
}
|
||||
|
||||
private void UnDo(object sender, string propertyName, object oldvalue)
|
||||
{
|
||||
sender.SetPropertyValue(propertyName, oldvalue);
|
||||
}
|
||||
|
||||
private bool _undoing;
|
||||
private void UndoExecuted(object para)
|
||||
{
|
||||
_undoing = true;
|
||||
DoCommandManager.UnDo();
|
||||
_undoing = false;
|
||||
}
|
||||
private void RedoExecuted(object para)
|
||||
{
|
||||
_undoing = true;
|
||||
DoCommandManager.ReDo();
|
||||
_undoing = false;
|
||||
}
|
||||
private bool Undo_Enabled(object para)
|
||||
{
|
||||
return DoCommandManager.CanUnDo;
|
||||
}
|
||||
private bool Redo_Enabled(object para)
|
||||
{
|
||||
return DoCommandManager.CanReDo;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
|
||||
{
|
||||
if (e.OldItems != null)
|
||||
{
|
||||
foreach (var item in e.OldItems.OfType<SelectableDesignerItemViewModelBase>())
|
||||
{
|
||||
item.PropertyChanged -= Item_PropertyChanged;
|
||||
item.Dispose();
|
||||
}
|
||||
}
|
||||
if (e.NewItems != null)
|
||||
{
|
||||
foreach (var item in e.NewItems.OfType<SelectableDesignerItemViewModelBase>())
|
||||
{
|
||||
item.PropertyChanged += Item_PropertyChanged;
|
||||
}
|
||||
}
|
||||
|
||||
RaisePropertyChanged("Items");
|
||||
}
|
||||
|
||||
private void Item_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||
{
|
||||
RaisePropertyChanged(sender, e.PropertyName);
|
||||
|
||||
if (_undoing == true) return;
|
||||
|
||||
//连续改变,需要特殊处理,不单独触发属性改变ReDo
|
||||
if (sender is DesignerItemViewModelBase designer)
|
||||
{
|
||||
if (designer.BeginDo) return;
|
||||
}
|
||||
|
||||
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
|
||||
{
|
||||
var property = sender.GetType().GetProperty(e.PropertyName);
|
||||
var attr = property.GetCustomAttributes(typeof(CanDoAttribute), true);
|
||||
if (attr != null && attr.Length != 0)
|
||||
{
|
||||
DoCommandManager.DoNewCommand(sender.ToString() + e.PropertyName, () => Do(sender, e.PropertyName, valuePropertyChangedEventArgs.NewValue), () => UnDo(sender, e.PropertyName, valuePropertyChangedEventArgs.OldValue), null, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[MediatorMessageSink("DoneDrawingMessage")]
|
||||
public void OnDoneDrawingMessage(bool dummy)
|
||||
{
|
||||
foreach (var item in Items.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
item.ShowConnectors = false;
|
||||
}
|
||||
}
|
||||
|
||||
#region 命令
|
||||
public SimpleCommand CreateNewDiagramCommand
|
||||
{
|
||||
get; private set;
|
||||
@@ -699,28 +581,144 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
return this._redoCommand ?? (this._redoCommand = new SimpleCommand(Redo_Enabled, this.RedoExecuted));
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
public ObservableCollection<SelectableDesignerItemViewModelBase> Items { get; set; } = new ObservableCollection<SelectableDesignerItemViewModelBase>();
|
||||
|
||||
public List<SelectableDesignerItemViewModelBase> SelectedItems
|
||||
private DoCommandManager DoCommandManager = new DoCommandManager();
|
||||
public DiagramViewModel()
|
||||
{
|
||||
get
|
||||
CreateNewDiagramCommand = new SimpleCommand(ExecuteEnable, ExecuteCreateNewDiagramCommand);
|
||||
AddItemCommand = new SimpleCommand(ExecuteEnable, ExecuteAddItemCommand);
|
||||
DirectAddItemCommand = new SimpleCommand(ExecuteEnable, ExecuteDirectAddItemCommand);
|
||||
RemoveItemCommand = new SimpleCommand(ExecuteEnable, ExecuteRemoveItemCommand);
|
||||
DirectRemoveItemCommand = new SimpleCommand(ExecuteEnable, ExecuteDirectRemoveItemCommand);
|
||||
ClearSelectedItemsCommand = new SimpleCommand(ExecuteEnable, ExecuteClearSelectedItemsCommand);
|
||||
|
||||
AlignTopCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignTopCommand);
|
||||
AlignVerticalCentersCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignVerticalCentersCommand);
|
||||
AlignBottomCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignBottomCommand);
|
||||
AlignLeftCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignLeftCommand);
|
||||
AlignHorizontalCentersCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignHorizontalCentersCommand);
|
||||
AlignRightCommand = new SimpleCommand(ExecuteEnable, ExecuteAlignRightCommand);
|
||||
BringForwardCommand = new SimpleCommand(ExecuteEnable, ExecuteBringForwardCommand);
|
||||
BringToFrontCommand = new SimpleCommand(ExecuteEnable, ExecuteBringToFrontCommand);
|
||||
SendBackwardCommand = new SimpleCommand(ExecuteEnable, ExecuteSendBackwardCommand);
|
||||
SendToBackCommand = new SimpleCommand(ExecuteEnable, ExecuteSendToBackCommand);
|
||||
DistributeHorizontalCommand = new SimpleCommand(ExecuteEnable, ExecuteDistributeHorizontalCommand);
|
||||
DistributeVerticalCommand = new SimpleCommand(ExecuteEnable, ExecuteDistributeVerticalCommand);
|
||||
SelectAllCommand = new SimpleCommand(ExecuteEnable, ExecuteSelectAllCommand);
|
||||
CopyCommand = new SimpleCommand(ExecuteEnable, ExecuteCopyCommand);
|
||||
PasteCommand = new SimpleCommand(ExecuteEnable, ExecutePasteCommand);
|
||||
CutCommand = new SimpleCommand(ExecuteEnable, ExecuteCutCommand);
|
||||
DeleteCommand = new SimpleCommand(ExecuteEnable, ExecuteDeleteCommand);
|
||||
LeftMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteLeftMoveCommand);
|
||||
RightMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteRightMoveCommand);
|
||||
UpMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteUpMoveCommand);
|
||||
DownMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteDownMoveCommand);
|
||||
CenterMoveCommand = new SimpleCommand(ExecuteEnable, ExecuteCenterMoveCommand);
|
||||
SameSizeCommand = new SimpleCommand(ExecuteEnable, ExecuteSameSizeCommand);
|
||||
SameWidthCommand = new SimpleCommand(ExecuteEnable, ExecuteSameWidthCommand);
|
||||
SameHeightCommand = new SimpleCommand(ExecuteEnable, ExecuteSameHeightCommand);
|
||||
SameAngleCommand = new SimpleCommand(ExecuteEnable, ExecuteSameAngleCommand);
|
||||
GroupCommand = new SimpleCommand(ExecuteEnable, ExecuteGroupCommand);
|
||||
UngroupCommand = new SimpleCommand(ExecuteEnable, ExecuteUngroupCommand);
|
||||
LockCommand = new SimpleCommand(ExecuteEnable, ExecuteLockCommand);
|
||||
UnlockCommand = new SimpleCommand(ExecuteEnable, ExecuteUnlockCommand);
|
||||
Mediator.Instance.Register(this);
|
||||
|
||||
Items.CollectionChanged += Items_CollectionChanged;
|
||||
}
|
||||
|
||||
public bool ExecuteEnable(object para)
|
||||
{
|
||||
return IsReadOnly == false;
|
||||
}
|
||||
|
||||
#region UnDo ReDo
|
||||
|
||||
private void Do(object sender, string propertyName, object newvalue)
|
||||
{
|
||||
sender.SetPropertyValue(propertyName, newvalue);
|
||||
}
|
||||
|
||||
private void UnDo(object sender, string propertyName, object oldvalue)
|
||||
{
|
||||
sender.SetPropertyValue(propertyName, oldvalue);
|
||||
}
|
||||
|
||||
private bool _undoing;
|
||||
private void UndoExecuted(object para)
|
||||
{
|
||||
_undoing = true;
|
||||
DoCommandManager.UnDo();
|
||||
_undoing = false;
|
||||
}
|
||||
private void RedoExecuted(object para)
|
||||
{
|
||||
_undoing = true;
|
||||
DoCommandManager.ReDo();
|
||||
_undoing = false;
|
||||
}
|
||||
private bool Undo_Enabled(object para)
|
||||
{
|
||||
return DoCommandManager.CanUnDo;
|
||||
}
|
||||
private bool Redo_Enabled(object para)
|
||||
{
|
||||
return DoCommandManager.CanReDo;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
|
||||
{
|
||||
if (e.OldItems != null)
|
||||
{
|
||||
return Items.Where(x => x.IsSelected).ToList();
|
||||
foreach (var item in e.OldItems.OfType<SelectableDesignerItemViewModelBase>())
|
||||
{
|
||||
item.PropertyChanged -= Item_PropertyChanged;
|
||||
item.Dispose();
|
||||
}
|
||||
}
|
||||
if (e.NewItems != null)
|
||||
{
|
||||
foreach (var item in e.NewItems.OfType<SelectableDesignerItemViewModelBase>())
|
||||
{
|
||||
item.PropertyChanged += Item_PropertyChanged;
|
||||
}
|
||||
}
|
||||
|
||||
RaisePropertyChanged("Items");
|
||||
}
|
||||
|
||||
private void Item_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||
{
|
||||
RaisePropertyChanged(sender, e.PropertyName);
|
||||
|
||||
if (_undoing == true) return;
|
||||
|
||||
//连续改变,需要特殊处理,不单独触发属性改变ReDo
|
||||
if (sender is DesignerItemViewModelBase designer)
|
||||
{
|
||||
if (designer.BeginDo) return;
|
||||
}
|
||||
|
||||
if (e is ValuePropertyChangedEventArgs valuePropertyChangedEventArgs)
|
||||
{
|
||||
var property = sender.GetType().GetProperty(e.PropertyName);
|
||||
var attr = property.GetCustomAttributes(typeof(CanDoAttribute), true);
|
||||
if (attr != null && attr.Length != 0)
|
||||
{
|
||||
DoCommandManager.DoNewCommand(sender.ToString() + e.PropertyName, () => Do(sender, e.PropertyName, valuePropertyChangedEventArgs.NewValue), () => UnDo(sender, e.PropertyName, valuePropertyChangedEventArgs.OldValue), null, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private SelectionService selectionService;
|
||||
public SelectionService SelectionService
|
||||
[MediatorMessageSink("DoneDrawingMessage")]
|
||||
public void OnDoneDrawingMessage(bool dummy)
|
||||
{
|
||||
get
|
||||
foreach (var item in Items.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
if (selectionService == null)
|
||||
selectionService = new SelectionService(this);
|
||||
|
||||
return selectionService;
|
||||
item.ShowConnectors = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -728,8 +726,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
|
||||
public bool AddVerify(SelectableDesignerItemViewModelBase item)
|
||||
{
|
||||
if (item.InitData() == false)
|
||||
@@ -741,11 +737,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
return true;
|
||||
}
|
||||
|
||||
#region 新增,删除
|
||||
private void ExecuteCreateNewDiagramCommand(object parameter)
|
||||
{
|
||||
this.Items.Clear();
|
||||
}
|
||||
|
||||
private void ExecuteDirectAddItemCommand(object parameter)
|
||||
{
|
||||
if (parameter is SelectableDesignerItemViewModelBase ite)
|
||||
@@ -766,7 +762,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void Add(SelectableDesignerItemViewModelBase item)
|
||||
{
|
||||
item.Root = this;
|
||||
@@ -791,7 +786,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
Items.Add(item);
|
||||
item.IsSelected = true;
|
||||
}
|
||||
|
||||
private void ExecuteAddItemCommand(object parameter)
|
||||
{
|
||||
if (parameter is SelectableDesignerItemViewModelBase ite)
|
||||
@@ -824,7 +818,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void ExecuteDirectRemoveItemCommand(object parameter)
|
||||
{
|
||||
if (parameter is SelectableDesignerItemViewModelBase ite)
|
||||
@@ -878,7 +871,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
ClearSelectedItems();
|
||||
}
|
||||
|
||||
public void ClearSelectedItems()
|
||||
{
|
||||
foreach (var item in this.Items.ToList())
|
||||
@@ -886,6 +878,14 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
item.IsSelected = false;
|
||||
}
|
||||
}
|
||||
private void ExecuteSelectAllCommand(object parameter)
|
||||
{
|
||||
foreach (var item in Items)
|
||||
{
|
||||
item.IsSelected = true;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 布局
|
||||
private void ExecuteAlignTopCommand(object parameter)
|
||||
@@ -1079,7 +1079,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
});
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
private void ExecuteBringForwardCommand(object parameter)
|
||||
{
|
||||
@@ -1316,7 +1316,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void ExecuteDistributeVerticalCommand(object parameter)
|
||||
{
|
||||
var selectedItems = from item in this.SelectedItems.OfType<DesignerItemViewModelBase>()
|
||||
@@ -1373,15 +1372,9 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
});
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
private void ExecuteSelectAllCommand(object parameter)
|
||||
{
|
||||
foreach (var item in Items)
|
||||
{
|
||||
item.IsSelected = true;
|
||||
}
|
||||
}
|
||||
|
||||
#region 复制,粘贴
|
||||
private void ExecuteCopyCommand(object parameter)
|
||||
{
|
||||
List<DesignerItemViewModelBase> selectedDesignerItems =
|
||||
@@ -1413,8 +1406,8 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
string json = new SerializableObject
|
||||
{
|
||||
DesignerItems = selectedDesignerItems.Select(p => p.ToSerializabObject()).Where(p => p != null).ToList(),
|
||||
Connections = selectedConnections.Select(p => p.ToSerializabObject()).Where(p => p != null).ToList(),
|
||||
DesignerItems = selectedDesignerItems.Select(p => p.ToSerializableItem("json")).Where(p => p != null).ToList(),
|
||||
Connections = selectedConnections.Select(p => p.ToSerializableItem("json")).Where(p => p != null).ToList(),
|
||||
}.ToJson();
|
||||
|
||||
OffsetX = 10;
|
||||
@@ -1436,7 +1429,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
List<SelectableDesignerItemViewModelBase> items = new List<SelectableDesignerItemViewModelBase>();
|
||||
SerializableObject copyitem = JsonConvert.DeserializeObject<SerializableObject>(clipboardData);
|
||||
|
||||
|
||||
Dictionary<Guid, Guid> mappingOldToNewIDs = new Dictionary<Guid, Guid>();
|
||||
|
||||
foreach (var diagramItemData in copyitem.DesignerItems)
|
||||
@@ -1445,7 +1437,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
Type type = TypeHelper.GetType(diagramItemData.TypeName);
|
||||
|
||||
DesignerItemViewModelBase itemBase = (DesignerItemViewModelBase)Activator.CreateInstance(type, this, diagramItemData.ObjectJson);
|
||||
DesignerItemViewModelBase itemBase = Activator.CreateInstance(type, this, diagramItemData.SerializableString, "json") as DesignerItemViewModelBase;
|
||||
Guid newID = Guid.NewGuid();
|
||||
mappingOldToNewIDs.Add(itemBase.Id, newID);
|
||||
itemBase.Id = newID;
|
||||
@@ -1467,7 +1459,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
List<SelectableDesignerItemViewModelBase> connectors = new List<SelectableDesignerItemViewModelBase>();
|
||||
foreach (var connection in copyitem.Connections)
|
||||
{
|
||||
var connectionItem = JsonConvert.DeserializeObject<ConnectionItem>(connection.ObjectJson);
|
||||
var connectionItem = JsonConvert.DeserializeObject<ConnectionItem>(connection.SerializableString);
|
||||
Guid newID = Guid.NewGuid();
|
||||
mappingOldToNewIDs.Add(connectionItem.Id, newID);
|
||||
|
||||
@@ -1549,7 +1541,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private void ExecuteCutCommand(object parameter)
|
||||
{
|
||||
ExecutePasteCommand(null);
|
||||
@@ -1580,7 +1571,9 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
RemoveItemCommand.Execute(itemsToRemove);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 移动
|
||||
private void ExecuteLeftMoveCommand(object parameter)
|
||||
{
|
||||
foreach (var item in SelectedItems.OfType<DesignerItemViewModelBase>())
|
||||
@@ -1622,6 +1615,20 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateZIndex()
|
||||
{
|
||||
List<SelectableDesignerItemViewModelBase> ordered = Items.OrderBy(p => p.ZIndex).ToList();
|
||||
|
||||
|
||||
for (int i = 0; i < ordered.Count; i++)
|
||||
{
|
||||
ordered[i].ZIndex = i;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 大小
|
||||
|
||||
private void ExecuteSameSizeCommand(object parameter)
|
||||
{
|
||||
if (parameter is DesignerItemViewModelBase designerItem)
|
||||
@@ -1667,6 +1674,9 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 分组
|
||||
private void ExecuteGroupCommand(object parameter)
|
||||
{
|
||||
var items = from item in SelectedItems.OfType<DesignerItemViewModelBase>()
|
||||
@@ -1713,6 +1723,15 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
|
||||
public bool BelongToSameGroup(IGroupable item1, IGroupable item2)
|
||||
{
|
||||
IGroupable root1 = SelectionService.GetGroupRoot(item1);
|
||||
IGroupable root2 = SelectionService.GetGroupRoot(item2);
|
||||
|
||||
return (root1.Id == root2.Id);
|
||||
}
|
||||
#endregion
|
||||
|
||||
private void ExecuteLockCommand(object parameter)
|
||||
{
|
||||
|
||||
@@ -1722,25 +1741,10 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public bool BelongToSameGroup(IGroupable item1, IGroupable item2)
|
||||
{
|
||||
IGroupable root1 = SelectionService.GetGroupRoot(item1);
|
||||
IGroupable root2 = SelectionService.GetGroupRoot(item2);
|
||||
|
||||
return (root1.Id == root2.Id);
|
||||
}
|
||||
|
||||
public void UpdateZIndex()
|
||||
{
|
||||
List<SelectableDesignerItemViewModelBase> ordered = Items.OrderBy(p => p.ZIndex).ToList();
|
||||
|
||||
|
||||
|
||||
|
||||
for (int i = 0; i < ordered.Count; i++)
|
||||
{
|
||||
ordered[i].ZIndex = i;
|
||||
}
|
||||
}
|
||||
|
||||
public RectangleBase GetBoundingRectangle(IEnumerable<DesignerItemViewModelBase> items)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user