序列化调整中

This commit is contained in:
艾竹
2023-01-24 23:10:57 +08:00
parent 66d3a6685b
commit a5005ac083
47 changed files with 387 additions and 333 deletions

View File

@@ -75,7 +75,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public override SelectableItemBase ToXmlObject()
public override SelectableItemBase GetSerializableObject()
{
if (IsFullConnection)
{
@@ -89,7 +89,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public override Type ToXmlType()
public override Type GetSerializableType()
{
return typeof(ConnectionItem);
}

View File

@@ -20,7 +20,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
public ConnectorInfoBase(IDiagramViewModel root, string json) : base(root, json)
public ConnectorInfoBase(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{
}
@@ -49,12 +49,12 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public override SelectableItemBase ToXmlObject()
public override SelectableItemBase GetSerializableObject()
{
return new ConnectorInfoItemBase(this);
}
public override Type ToXmlType()
public override Type GetSerializableType()
{
return typeof(ConnectorInfoBase);
}

View File

@@ -20,7 +20,7 @@ namespace AIStudio.Wpf.DiagramDesigner
Parent = connector;
}
public ConnectorLabelModel(IDiagramViewModel root, ConnectionViewModel connector, string json) : base(root, json)
public ConnectorLabelModel(IDiagramViewModel root, ConnectionViewModel connector, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{
Parent = connector;
}
@@ -43,12 +43,12 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public override SelectableItemBase ToXmlObject()
public override SelectableItemBase GetSerializableObject()
{
return new ConnectorLabelItem(this);
}
public override Type ToXmlType()
public override Type GetSerializableType()
{
return typeof(ConnectorLabelItem);
}

View File

@@ -32,7 +32,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
public ConnectorPointModel(IDiagramViewModel root, string json) : base(root, json)
public ConnectorPointModel(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{
}
@@ -60,12 +60,12 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public override SelectableItemBase ToXmlObject()
public override SelectableItemBase GetSerializableObject()
{
return new ConnectorPointItem(this);
}
public override Type ToXmlType()
public override Type GetSerializableType()
{
return typeof(ConnectorPointItem);
}

View File

@@ -17,7 +17,7 @@ namespace AIStudio.Wpf.DiagramDesigner
Parent = connector;
}
public ConnectorVertexModel(IDiagramViewModel root, ConnectionViewModel connector, string json) : base(root, json)
public ConnectorVertexModel(IDiagramViewModel root, ConnectionViewModel connector, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{
Parent = connector;
}
@@ -40,12 +40,12 @@ namespace AIStudio.Wpf.DiagramDesigner
}
public override SelectableItemBase ToXmlObject()
public override SelectableItemBase GetSerializableObject()
{
return new ConnectorVertexItem(this);
}
public override Type ToXmlType()
public override Type GetSerializableType()
{
return typeof(ConnectorVertexModel);
}

View File

@@ -30,7 +30,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public FullyCreatedConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, string json) : base(root, json)
public FullyCreatedConnectorInfo(IDiagramViewModel root, DesignerItemViewModelBase dataItem, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{
this.DataItem = dataItem;
if (IsInnerPoint == true)
@@ -62,12 +62,12 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public override SelectableItemBase ToXmlObject()
public override SelectableItemBase GetSerializableObject()
{
return new FullyCreatedConnectorInfoItem(this);
}
public override Type ToXmlType()
public override Type GetSerializableType()
{
return typeof(FullyCreatedConnectorInfo);
}

View File

@@ -23,7 +23,7 @@ namespace AIStudio.Wpf.DiagramDesigner
ShapeDefiner = Shapes.Rectangle;
}
public DesignerItemViewModelBase(IDiagramViewModel root, string json) : base(root, json)
public DesignerItemViewModelBase(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{
ShapeDefiner = Shapes.Rectangle;
}
@@ -52,12 +52,12 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public override SelectableItemBase ToXmlObject()
public override SelectableItemBase GetSerializableObject()
{
return new DesignerItemBase(this);
}
public override Type ToXmlType()
public override Type GetSerializableType()
{
return typeof(DesignerItemBase);
}

View File

@@ -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)
{

View File

@@ -33,7 +33,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
public SelectableDesignerItemViewModelBase(IDiagramViewModel root, string json) : base(root, json)
public SelectableDesignerItemViewModelBase(IDiagramViewModel root, string serializableString, string serializableType) : base(root, serializableString, serializableType)
{
}

View File

@@ -33,24 +33,21 @@ namespace AIStudio.Wpf.DiagramDesigner
(FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged;
}
public SelectableViewModelBase(IDiagramViewModel root, string json)
public SelectableViewModelBase(IDiagramViewModel root, string serializableString, string serializableType)
{
Init();
LoadDesignerItemViewModel(root, JsonConvert.DeserializeObject(json, ToXmlType()) as SelectableItemBase);
SelectableItemBase obj = SerializeHelper.DeserializeObject(GetSerializableType(), serializableString, serializableType);
LoadDesignerItemViewModel(root, obj);
(FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged;
}
}
public virtual SelectableItemBase ToXmlObject()
public virtual SerializableItem ToSerializableItem(string serializableType)
{
return null;
}
public virtual SerializableItem ToSerializabObject()
{
var obj = ToXmlObject();
var obj = GetSerializableObject();
if (obj != null)
{
return new SerializableItem() { TypeName = this.GetType().FullName, ObjectJson = obj.ToJson() };
return new SerializableItem() { TypeName = this.GetType().FullName, SerializableString = SerializeHelper.SerializeObject(obj, serializableType) };
}
else
{
@@ -58,8 +55,12 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public virtual SelectableItemBase GetSerializableObject()
{
return null;
}
public virtual Type ToXmlType()
public virtual Type GetSerializableType()
{
return null;
}