整理Redo和Undo命令

This commit is contained in:
艾竹
2023-04-05 23:40:22 +08:00
parent c513bd0f64
commit e0a26a76d2
4 changed files with 314 additions and 197 deletions

View File

@@ -390,6 +390,8 @@ namespace AIStudio.Wpf.DiagramDesigner
if (_viewModel.IsReadOnly) return; if (_viewModel.IsReadOnly) return;
this.Focus();
Point currentPoint = e.GetPosition(this); Point currentPoint = e.GetPosition(this);
_viewModel.CurrentPoint = new Point(ScreenHelper.WidthToMm(currentPoint.X), ScreenHelper.WidthToMm(currentPoint.Y)); _viewModel.CurrentPoint = new Point(ScreenHelper.WidthToMm(currentPoint.X), ScreenHelper.WidthToMm(currentPoint.Y));
var point = CursorPointManager.GetCursorPosition(); var point = CursorPointManager.GetCursorPosition();
@@ -445,8 +447,9 @@ namespace AIStudio.Wpf.DiagramDesigner
adornerLayer.Add(adorner); adornerLayer.Add(adorner);
} }
} }
} }
} }
//e.Handled = true; //e.Handled = true;
} }
@@ -456,6 +459,8 @@ namespace AIStudio.Wpf.DiagramDesigner
if (_viewModel.IsReadOnly) return; if (_viewModel.IsReadOnly) return;
this.Focus();
if (_service.DrawModeViewModel.GetDrawMode() == DrawMode.DirectLine) if (_service.DrawModeViewModel.GetDrawMode() == DrawMode.DirectLine)
{ {
return; return;

View File

@@ -639,12 +639,12 @@ namespace AIStudio.Wpf.DiagramDesigner
#endregion #endregion
#region #region
private ICommand _createNewDiagramCommand; private ICommand _clearCommand;
public ICommand CreateNewDiagramCommand public ICommand ClearCommand
{ {
get get
{ {
return this._createNewDiagramCommand ?? (this._createNewDiagramCommand = new SimpleCommand(ExecuteEnable, ExecuteCreateNewDiagramCommand)); return this._clearCommand ?? (this._clearCommand = new SimpleCommand(ExecuteEnable, ExecuteClearCommand));
} }
} }
@@ -1050,7 +1050,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
Mediator.Instance.Register(this); Mediator.Instance.Register(this);
Items.CollectionChanged += Items_CollectionChanged; Items.CollectionChanged += Items_CollectionChanged;
var zoomValueChangedSubscription = WhenPropertyChanged.Where(o => o.ToString() == nameof(ZoomValue)).Throttle(TimeSpan.FromMilliseconds(100)).Subscribe(OnZoomValueChanged);//Sample var zoomValueChangedSubscription = WhenPropertyChanged.Where(o => o.ToString() == nameof(ZoomValue)).Throttle(TimeSpan.FromMilliseconds(100)).Subscribe(OnZoomValueChanged);//Sample
this.PropertyChanged += DiagramViewModel_PropertyChanged; this.PropertyChanged += DiagramViewModel_PropertyChanged;
BuildMenuOptions(); BuildMenuOptions();
@@ -1123,12 +1123,6 @@ namespace AIStudio.Wpf.DiagramDesigner
private bool Undo(object para) private bool Undo(object para)
{ {
var first = SelectedItems.OfType<DesignerItemViewModelBase>().FirstOrDefault();
if (first != null && first.IsEditing == true)
{
return false;
}
DoCommandManager.UnDo(); DoCommandManager.UnDo();
return true; return true;
@@ -1141,11 +1135,6 @@ namespace AIStudio.Wpf.DiagramDesigner
private bool Redo(object para) private bool Redo(object para)
{ {
var first = SelectedItems.OfType<DesignerItemViewModelBase>().FirstOrDefault();
if (first != null && first.IsEditing == true)
{
return false;
}
DoCommandManager.ReDo(); DoCommandManager.ReDo();
return true; return true;
@@ -1165,7 +1154,7 @@ namespace AIStudio.Wpf.DiagramDesigner
#region #region
protected virtual void DiagramViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) protected virtual void DiagramViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{ {
} }
private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
@@ -1213,7 +1202,7 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
} }
//提供给标尺计算延迟100ms等布局改变再计算。 //提供给标尺计算延迟100ms等布局改变再计算。
private void OnZoomValueChanged(string obj) private void OnZoomValueChanged(string obj)
@@ -1232,45 +1221,44 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
#region , #region ,
protected virtual void ExecuteCreateNewDiagramCommand(object parameter) protected virtual void ExecuteClearCommand(object parameter)
{ {
this.Items.Clear(); var items = this.Items.ToList();
} DoCommandManager.DoNewCommand(this.ToString(),
() => {
this.Items.Clear();
},
() => {
foreach (var item in items)
{
Add(item);
}
});
}
private void ExecuteAddItemCommand(object parameter) private void ExecuteAddItemCommand(object parameter)
{ {
List<SelectableDesignerItemViewModelBase> newitems = new List<SelectableDesignerItemViewModelBase>();
if (parameter is SelectableDesignerItemViewModelBase ite) if (parameter is SelectableDesignerItemViewModelBase ite)
{ {
if (AddVerify(ite) != true) return; newitems.Add(ite);
DoCommandManager.DoNewCommand(this.ToString(),
() => {
ClearSelectedItems();
Add(ite);
},
() => {
Items.Remove(ite);
});
} }
else if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> items) else if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> items)
{ {
if (items.Select(p => AddVerify(p)).Any() != true) return; newitems.AddRange(items);
DoCommandManager.DoNewCommand(this.ToString(),
() => {
ClearSelectedItems();
foreach (var item in items)
{
Add(item);
}
},
() => {
foreach (var item in items)
{
Items.Remove(item);
}
});
} }
DoCommandManager.DoNewCommand(this.ToString(),
() => {
ClearSelectedItems();
Add(newitems);
},
() => {
foreach (var item in newitems)
{
Items.Remove(item);
}
});
} }
public bool AddVerify(SelectableDesignerItemViewModelBase item) public bool AddVerify(SelectableDesignerItemViewModelBase item)
@@ -1282,13 +1270,13 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
//使用程序添加对象比如Demo初始化 //使用程序添加对象比如Demo初始化
public void Add(object parameter) public void Add(object parameter, bool? isSelected = false)
{ {
if (parameter is SelectableDesignerItemViewModelBase ite) if (parameter is SelectableDesignerItemViewModelBase ite)
{ {
if (AddVerify(ite) != true) return; if (AddVerify(ite) != true) return;
Add(ite, false); Add(ite, isSelected);
} }
else if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> items) else if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> items)
{ {
@@ -1296,12 +1284,12 @@ namespace AIStudio.Wpf.DiagramDesigner
foreach (var item in items) foreach (var item in items)
{ {
Add(item, false); Add(item, isSelected);
} }
} }
} }
private void Add(SelectableDesignerItemViewModelBase item, bool isSelected = true) private void Add(SelectableDesignerItemViewModelBase item, bool? isSelected = true)
{ {
item.Root = this; item.Root = this;
item.ZIndex = Items.Any() ? Items.Max(p => p.ZIndex) + 1 : 0; item.ZIndex = Items.Any() ? Items.Max(p => p.ZIndex) + 1 : 0;
@@ -1322,8 +1310,11 @@ namespace AIStudio.Wpf.DiagramDesigner
designerItemViewModelBase.SetCellAlignment(); designerItemViewModelBase.SetCellAlignment();
} }
Items.Add(item); Items.Add(item);
item.IsSelected = isSelected; if (isSelected != null)
} {
item.IsSelected = isSelected.Value;
}
}
public void Remove(object parameter) public void Remove(object parameter)
{ {
@@ -1344,54 +1335,72 @@ namespace AIStudio.Wpf.DiagramDesigner
private void ExecuteRemoveItemCommand(object parameter) private void ExecuteRemoveItemCommand(object parameter)
{ {
if (parameter is SelectableDesignerItemViewModelBase ite) List<SelectableDesignerItemViewModelBase> olditems = new List<SelectableDesignerItemViewModelBase>();
if (parameter is SelectableDesignerItemViewModelBase node)
{ {
DoCommandManager.DoNewCommand(this.ToString(), olditems.Add(node);
() => {
ite.IsSelected = false;
Items.Remove(ite);
},
() => {
Items.Add(ite);
});
} }
else if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> items) else if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> para)
{
olditems.AddRange(para);
}
else
{
olditems.AddRange(SelectedItems);
}
if (olditems.Any())
{ {
DoCommandManager.DoNewCommand(this.ToString(), DoCommandManager.DoNewCommand(this.ToString(),
() => { () => {
foreach (var item in items) foreach (var item in olditems)
{ {
item.IsSelected = false; Items.Remove(item);
Items.Remove(item); }
} },
() => {
}, foreach (var item in olditems)
() => { {
foreach (var item in items) Items.Add(item);
{ }
Items.Add(item); });
}
});
} }
} }
private void ExecuteClearSelectedItemsCommand(object parameter) private void ExecuteClearSelectedItemsCommand(object parameter)
{ {
IEnumerable<SelectableDesignerItemViewModelBase> selectedItems; List<SelectableDesignerItemViewModelBase> selectedItems = new List<SelectableDesignerItemViewModelBase>();
if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> para) if (parameter is SelectableDesignerItemViewModelBase node)
{ {
selectedItems = para; selectedItems.Add(node);
}
else if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> para)
{
selectedItems.AddRange(para);
} }
else else
{ {
selectedItems = this.SelectedItems.OfType<DesignerItemViewModelBase>(); selectedItems.AddRange(SelectedItems);
} }
foreach (var item in selectedItems) if (selectedItems.Any())
{ {
item.IsSelected = false; Dictionary<SelectableDesignerItemViewModelBase, bool> infos = selectedItems.ToDictionary(p => p, p => p.IsSelected);
DoCommandManager.DoNewCommand(this.ToString(),
() => {
foreach (var item in selectedItems)
{
item.IsSelected = false;
}
},
() => {
foreach (var item in infos)
{
item.Key.IsSelected = item.Value;
}
});
} }
} }
public void ClearSelectedItems() public void ClearSelectedItems()
@@ -1404,39 +1413,93 @@ namespace AIStudio.Wpf.DiagramDesigner
private void ExecuteSelectAllCommand(object parameter) private void ExecuteSelectAllCommand(object parameter)
{ {
foreach (var item in Items) List<SelectableDesignerItemViewModelBase> selectedItems = Items.ToList();
if (selectedItems.Any())
{ {
item.IsSelected = true; Dictionary<SelectableDesignerItemViewModelBase, bool> infos = selectedItems.ToDictionary(p => p, p => p.IsSelected);
DoCommandManager.DoNewCommand(this.ToString(),
() => {
foreach (var item in selectedItems)
{
item.IsSelected = true;
}
},
() => {
foreach (var item in infos)
{
item.Key.IsSelected = item.Value;
}
});
} }
} }
private void ExecuteSelectInverseCommand(object parameter) private void ExecuteSelectInverseCommand(object parameter)
{ {
foreach (var item in SelectedItems) List<SelectableDesignerItemViewModelBase> selectedItems = new List<SelectableDesignerItemViewModelBase>();
if (parameter is SelectableDesignerItemViewModelBase node)
{ {
item.IsSelected = false; selectedItems.Add(node);
} }
foreach (var item in Items.Except(SelectedItems)) else if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> para)
{ {
item.IsSelected = true; selectedItems.AddRange(para);
}
else
{
selectedItems.AddRange(Items);
}
if (selectedItems.Any())
{
Dictionary<SelectableDesignerItemViewModelBase, bool> infos = selectedItems.ToDictionary(p => p, p => p.IsSelected);
DoCommandManager.DoNewCommand(this.ToString(),
() => {
foreach (var item in selectedItems)
{
item.IsSelected = !item.IsSelected;
}
},
() => {
foreach (var item in infos)
{
item.Key.IsSelected = item.Value;
}
});
} }
} }
public void ExecuteSelectItemCommand(object parameter) public void ExecuteSelectItemCommand(object parameter)
{ {
if (parameter is ISelectable selectable) List<SelectableDesignerItemViewModelBase> selectedItems = new List<SelectableDesignerItemViewModelBase>();
if (parameter is SelectableDesignerItemViewModelBase node)
{ {
foreach (var item in this.Items.ToList()) selectedItems.Add(node);
{ }
if (object.Equals(selectable, item)) else if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> para)
{ {
item.IsSelected = true; selectedItems.AddRange(para);
} }
else else
{ {
item.IsSelected = false; selectedItems.AddRange(Items);
} }
}
if (selectedItems.Any())
{
Dictionary<SelectableDesignerItemViewModelBase, bool> infos = selectedItems.ToDictionary(p => p, p => p.IsSelected);
DoCommandManager.DoNewCommand(this.ToString(),
() => {
foreach (var item in selectedItems)
{
item.IsSelected = true;
}
},
() => {
foreach (var item in infos)
{
item.Key.IsSelected = item.Value;
}
});
} }
} }
#endregion #endregion
@@ -1447,58 +1510,52 @@ namespace AIStudio.Wpf.DiagramDesigner
Copy(parameter); Copy(parameter);
} }
private bool Copy(object parameter) private List<SelectableDesignerItemViewModelBase> Copy(object parameter)
{ {
List<DesignerItemViewModelBase> selectedDesignerItems; List<SelectableDesignerItemViewModelBase> selectedItems = new List<SelectableDesignerItemViewModelBase>();
if (parameter is SelectableDesignerItemViewModelBase node)
List<ConnectionViewModel> selectedConnections;
if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> para)
{ {
selectedDesignerItems = para.OfType<DesignerItemViewModelBase>().ToList(); selectedItems.Add(node);
selectedConnections = para.OfType<ConnectionViewModel>().ToList(); }
else if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> para)
{
selectedItems.AddRange(para);
} }
else else
{ {
if (SelectedItems.Count == 0) selectedItems.AddRange(SelectedItems);
{
return false;
}
var first = SelectedItems.OfType<DesignerItemViewModelBase>().FirstOrDefault();
if (first != null && first.IsEditing == true)
{
return false;
}
selectedDesignerItems = SelectedItems.OfType<DesignerItemViewModelBase>().ToList();
selectedConnections = SelectedItems.OfType<ConnectionViewModel>().ToList();
} }
if (selectedItems.Any())
foreach (ConnectionViewModel connection in Items.OfType<ConnectionViewModel>())
{ {
if (!selectedConnections.Contains(connection)) var selectedDesignerItems = selectedItems.OfType<DesignerItemViewModelBase>().ToList();
var selectedConnections = selectedItems.OfType<ConnectionViewModel>().ToList();
foreach (ConnectionViewModel connection in Items.OfType<ConnectionViewModel>())
{ {
DesignerItemViewModelBase sourceItem = selectedDesignerItems.FirstOrDefault(p => p.Id == connection.SourceConnectorInfo.DataItem.Id); if (!selectedConnections.Contains(connection))
DesignerItemViewModelBase sinkItem = selectedDesignerItems.FirstOrDefault(p => p.Id == connection.SinkConnectorInfoFully?.DataItem?.Id);
if (sourceItem != null && sinkItem != null && BelongToSameGroup(sourceItem, sinkItem))
{ {
selectedConnections.Add(connection); DesignerItemViewModelBase sourceItem = selectedDesignerItems.FirstOrDefault(p => p.Id == connection.SourceConnectorInfo.DataItem.Id);
DesignerItemViewModelBase sinkItem = selectedDesignerItems.FirstOrDefault(p => p.Id == connection.SinkConnectorInfoFully?.DataItem?.Id);
if (sourceItem != null && sinkItem != null && BelongToSameGroup(sourceItem, sinkItem))
{
selectedConnections.Add(connection);
}
} }
} }
string json = new SerializableObject
{
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 = 0;
OffsetY = 0;
System.Windows.Clipboard.Clear();
System.Windows.Clipboard.SetData(System.Windows.DataFormats.Serializable, json);
} }
return selectedItems;
string json = new SerializableObject
{
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 = 0;
OffsetY = 0;
System.Windows.Clipboard.Clear();
System.Windows.Clipboard.SetData(System.Windows.DataFormats.Serializable, json);
return true;
} }
private void ExecutePasteCommand(object parameter) private void ExecutePasteCommand(object parameter)
@@ -1506,20 +1563,21 @@ namespace AIStudio.Wpf.DiagramDesigner
Paste(parameter); Paste(parameter);
} }
protected virtual bool Paste(object parameter) protected virtual List<SelectableDesignerItemViewModelBase> Paste(object parameter, bool paste = true)
{ {
if (System.Windows.Clipboard.ContainsData(System.Windows.DataFormats.Serializable)) if (System.Windows.Clipboard.ContainsData(System.Windows.DataFormats.Serializable))
{ {
string clipboardData = System.Windows.Clipboard.GetData(System.Windows.DataFormats.Serializable) as String; string clipboardData = System.Windows.Clipboard.GetData(System.Windows.DataFormats.Serializable) as String;
if (string.IsNullOrEmpty(clipboardData)) if (string.IsNullOrEmpty(clipboardData))
return false; return null;
List<SelectableDesignerItemViewModelBase> items = new List<SelectableDesignerItemViewModelBase>();
try try
{ {
OffsetX += 10; OffsetX += 10;
OffsetY += 10; OffsetY += 10;
List<SelectableDesignerItemViewModelBase> items = new List<SelectableDesignerItemViewModelBase>();
SerializableObject copyitem = JsonConvert.DeserializeObject<SerializableObject>(clipboardData); SerializableObject copyitem = JsonConvert.DeserializeObject<SerializableObject>(clipboardData);
Dictionary<Guid, Guid> mappingOldToNewIDs = new Dictionary<Guid, Guid>(); Dictionary<Guid, Guid> mappingOldToNewIDs = new Dictionary<Guid, Guid>();
@@ -1543,7 +1601,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{ {
items.Add(newItem); items.Add(newItem);
} }
} }
List<SelectableDesignerItemViewModelBase> connectors = new List<SelectableDesignerItemViewModelBase>(); List<SelectableDesignerItemViewModelBase> connectors = new List<SelectableDesignerItemViewModelBase>();
foreach (var connection in copyitem.Connections) foreach (var connection in copyitem.Connections)
@@ -1578,27 +1636,45 @@ namespace AIStudio.Wpf.DiagramDesigner
if (mappingOldToNewIDs.ContainsKey(item.ParentId)) if (mappingOldToNewIDs.ContainsKey(item.ParentId))
item.ParentId = mappingOldToNewIDs[item.ParentId]; item.ParentId = mappingOldToNewIDs[item.ParentId];
} }
} }
items.AddRange(connectors); items.AddRange(connectors);
Add(items);
FixOtherInfo(items);
} }
catch (Exception e) catch (Exception e)
{ {
System.Windows.MessageBox.Show(e.StackTrace, e.Message, System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error); System.Windows.MessageBox.Show(e.StackTrace, e.Message, System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
return null;
} }
return true;
if (items.Any())
{
if (paste)
{
DoCommandManager.DoNewCommand(this.ToString(),
() => {
ClearSelectedItems();
Add(items, true);
FixOtherInfo(items);
},
() => {
foreach (var item in items)
{
Items.Remove(item);
}
});
}
}
return items;
} }
else else
{ {
return false; return null;
} }
} }
protected virtual void FixOtherInfo(List<SelectableDesignerItemViewModelBase> items) protected virtual void FixOtherInfo(List<SelectableDesignerItemViewModelBase> items)
{ {
} }
private bool ItemsToDeleteHasConnector(List<SelectableDesignerItemViewModelBase> itemsToRemove, ConnectorInfoBase connector) private bool ItemsToDeleteHasConnector(List<SelectableDesignerItemViewModelBase> itemsToRemove, ConnectorInfoBase connector)
@@ -1616,42 +1692,70 @@ namespace AIStudio.Wpf.DiagramDesigner
Cut(parameter); Cut(parameter);
} }
private bool Cut(object parameter) private List<SelectableDesignerItemViewModelBase> Cut(object parameter, bool cut = true)
{ {
if (Paste(null) == false) if (Copy(null) == null)
return false; return null;
if (Delete(null) == false)
return false;
return true; var items = Delete(parameter, false);
if (items.Any())
{
if (cut)
{
DoCommandManager.DoNewCommand(this.ToString(),
() => {
foreach (var item in items)
{
Items.Remove(item);
}
},
() => {
foreach (var item in items)
{
Items.Add(item);
}
});
}
}
return items;
} }
protected void ExecuteDeleteCommand(object parameter) protected void ExecuteDeleteCommand(object parameter)
{ {
Delete(parameter); var items = Delete(parameter, false);
if (items.Any())
{
DoCommandManager.DoNewCommand(this.ToString(),
() => {
foreach (var item in items)
{
Items.Remove(item);
}
},
() => {
foreach (var item in items)
{
Items.Add(item);
}
});
}
} }
protected virtual bool Delete(object parameter) protected virtual List<SelectableDesignerItemViewModelBase> Delete(object parameter, bool delete = true)
{ {
List<SelectableDesignerItemViewModelBase> itemsToRemove; List<SelectableDesignerItemViewModelBase> itemsToRemove = new List<SelectableDesignerItemViewModelBase>();
if (parameter is SelectableDesignerItemViewModelBase node)
if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> para)
{ {
itemsToRemove = para.OfType<SelectableDesignerItemViewModelBase>().ToList(); itemsToRemove.Add(node);
}
else if (parameter is IEnumerable<SelectableDesignerItemViewModelBase> para)
{
itemsToRemove.AddRange(para);
} }
else else
{ {
if (SelectedItems.Count == 0) itemsToRemove.AddRange(SelectedItems);
{
return false;
}
var first = SelectedItems.OfType<DesignerItemViewModelBase>().FirstOrDefault();
if (first != null && first.IsEditing == true)
{
return false;
}
itemsToRemove = SelectedItems.OfType<SelectableDesignerItemViewModelBase>().ToList();
} }
List<SelectableDesignerItemViewModelBase> connectionsToAlsoRemove = new List<SelectableDesignerItemViewModelBase>(); List<SelectableDesignerItemViewModelBase> connectionsToAlsoRemove = new List<SelectableDesignerItemViewModelBase>();
@@ -1671,9 +1775,17 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
itemsToRemove.AddRange(connectionsToAlsoRemove); itemsToRemove.AddRange(connectionsToAlsoRemove);
RemoveItemCommand.Execute(itemsToRemove); if (itemsToRemove.Any())
{
return true; if (delete)
{
foreach (var item in itemsToRemove)
{
Items.Remove(item);
}
}
}
return itemsToRemove;
} }
#endregion #endregion
@@ -2477,7 +2589,7 @@ namespace AIStudio.Wpf.DiagramDesigner
groupItem = new GroupDesignerItemViewModel(); groupItem = new GroupDesignerItemViewModel();
} }
Add(groupItem); Add(groupItem, true);
foreach (DesignerItemViewModelBase item in items) foreach (DesignerItemViewModelBase item in items)
item.ParentId = groupItem.Id; item.ParentId = groupItem.Id;
@@ -2524,22 +2636,27 @@ namespace AIStudio.Wpf.DiagramDesigner
#region #region
public bool ExecuteShortcut(KeyEventArgs e) public bool ExecuteShortcut(KeyEventArgs e)
{ {
if (SelectedItem?.IsEditing == true)
{
return false;
}
if (DiagramOption.ShortcutOption.SelectAll(e)) if (DiagramOption.ShortcutOption.SelectAll(e))
{ {
SelectAllCommand.Execute(null); SelectAllCommand.Execute(null);
return true; return true;
} }
else if (DiagramOption.ShortcutOption.Copy(e)) else if (DiagramOption.ShortcutOption.Copy(e))
{ {
return Copy(null); return Copy(null) != null;
} }
else if (DiagramOption.ShortcutOption.Paste(e)) else if (DiagramOption.ShortcutOption.Paste(e))
{ {
return Paste(null); return Paste(null) != null;
} }
else if (DiagramOption.ShortcutOption.Cut(e)) else if (DiagramOption.ShortcutOption.Cut(e))
{ {
return Cut(null); return Cut(null) != null;
} }
else if (DiagramOption.ShortcutOption.Undo(e)) else if (DiagramOption.ShortcutOption.Undo(e))
{ {
@@ -2551,7 +2668,7 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
else if (DiagramOption.ShortcutOption.Delete(e)) else if (DiagramOption.ShortcutOption.Delete(e))
{ {
return Delete(null); return Delete(null) != null;
} }
else if (DiagramOption.ShortcutOption.LeftMove(e)) else if (DiagramOption.ShortcutOption.LeftMove(e))
{ {
@@ -2611,7 +2728,7 @@ namespace AIStudio.Wpf.DiagramDesigner
} }
private void ExecutedSearchUpCommand(object obj) private void ExecutedSearchUpCommand(object obj)
{ {
if (obj != null) if (obj != null)
{ {
var selecteddesign = SelectedItem as DesignerItemViewModelBase; var selecteddesign = SelectedItem as DesignerItemViewModelBase;

View File

@@ -31,7 +31,7 @@ namespace AIStudio.Wpf.DiagramDesigner
get; get;
} }
ICommand CreateNewDiagramCommand ICommand ClearCommand
{ {
get; get;
} }
@@ -335,7 +335,7 @@ namespace AIStudio.Wpf.DiagramDesigner
void Init(bool initNew); void Init(bool initNew);
void Add(object parameter); void Add(object parameter, bool? isSelected = false);
void Remove(object parameter); void Remove(object parameter);

View File

@@ -774,7 +774,7 @@ namespace AIStudio.Wpf.Mind.ViewModels
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.UpdatedLayout()); items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.UpdatedLayout());
} }
protected override bool Delete(object parameter) protected override List<SelectableDesignerItemViewModelBase> Delete(object parameter, bool delete = true)
{ {
List<MindNode> items = new List<MindNode>(); List<MindNode> items = new List<MindNode>();
List<SelectableDesignerItemViewModelBase> others = new List<SelectableDesignerItemViewModelBase>(); List<SelectableDesignerItemViewModelBase> others = new List<SelectableDesignerItemViewModelBase>();
@@ -793,11 +793,6 @@ namespace AIStudio.Wpf.Mind.ViewModels
others = SelectedItems.Where(p => !(p is MindNode)).ToList(); others = SelectedItems.Where(p => !(p is MindNode)).ToList();
} }
if (items.FirstOrDefault()?.IsEditing != false)
{
return false;
}
if (items.Any()) if (items.Any())
{ {
//把子节点都加上 //把子节点都加上
@@ -842,10 +837,10 @@ namespace AIStudio.Wpf.Mind.ViewModels
items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.UpdatedLayout()); items.Select(p => p.RootNode).Distinct().ToList().ForEach(p => p.UpdatedLayout());
}); });
return true; return items.OfType<SelectableDesignerItemViewModelBase>().ToList();
} }
else else
return false; return null;
} }
#endregion #endregion