mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-12 04:29:27 +08:00
分组,取消分组 ReDo UnDo 整理
This commit is contained in:
@@ -136,7 +136,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
else
|
||||
{
|
||||
DeleteLabel();
|
||||
ClearLabel();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -825,6 +825,12 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
UpdatePathGeneratorResult();
|
||||
}
|
||||
|
||||
public void RemoveVertex(ConnectorVertexModel vertice)
|
||||
{
|
||||
Vertices.Remove(vertice);
|
||||
UpdatePathGeneratorResult();
|
||||
}
|
||||
|
||||
protected override void ExecuteEditCommand(object param)
|
||||
{
|
||||
AddLabel();
|
||||
@@ -841,7 +847,12 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
label.UpdatePosition(paths);
|
||||
}
|
||||
|
||||
public void DeleteLabel()
|
||||
public void RemoveLabel(ConnectorLabelModel label)
|
||||
{
|
||||
Labels.Remove(label);
|
||||
}
|
||||
|
||||
public void ClearLabel()
|
||||
{
|
||||
Labels?.Clear();
|
||||
}
|
||||
|
||||
@@ -182,14 +182,14 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
protected override void ClearText()
|
||||
{
|
||||
Connector.Labels.Remove(this);
|
||||
Connector.RemoveLabel(this);
|
||||
}
|
||||
|
||||
private void DeleteLabel(object parameter)
|
||||
{
|
||||
if (parameter is ConnectorLabelModel label)
|
||||
{
|
||||
Connector.Labels.Remove(label);
|
||||
Connector.RemoveLabel(label);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
if (parameter is ConnectorVertexModel vertice)
|
||||
{
|
||||
Connector.Vertices.Remove(vertice);
|
||||
Connector.RemoveVertex(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -92,11 +92,17 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
get; set;
|
||||
} = e => e.KeyboardDevice.Modifiers == ModifierKeys.None && e.Key == Key.Down;
|
||||
|
||||
[Description("Group Keyboard shortcut (CTRL+Shift+G by default)")]
|
||||
[Description("Group Keyboard shortcut (CTRL+G by default)")]
|
||||
public Func<KeyEventArgs, bool> Group
|
||||
{
|
||||
get; set;
|
||||
} = e => e.KeyboardDevice.Modifiers == ModifierKeys.Control && e.Key == Key.G;
|
||||
|
||||
[Description("Ungroup Keyboard shortcut (Shift+G by default)")]
|
||||
public Func<KeyEventArgs, bool> Ungroup
|
||||
{
|
||||
get; set;
|
||||
} = e => e.KeyboardDevice.Modifiers == ModifierKeys.Shift | e.Key == Key.G;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Reactive.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using AIStudio.Wpf.DiagramDesigner.Geometrys;
|
||||
@@ -1195,7 +1196,15 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (attr != null && attr.Length != 0)
|
||||
{
|
||||
//加入ReDo
|
||||
DoCommandManager.DoNewCommand(sender.ToString() + e.PropertyName, () => Do(sender, e.PropertyName, valuePropertyChangedEventArgs.NewValue), () => UnDo(sender, e.PropertyName, valuePropertyChangedEventArgs.OldValue), null, false);
|
||||
DoCommandManager.DoNewCommand(sender.ToString() + e.PropertyName,
|
||||
() => {
|
||||
Do(sender, e.PropertyName, valuePropertyChangedEventArgs.NewValue);
|
||||
},
|
||||
() => {
|
||||
UnDo(sender, e.PropertyName, valuePropertyChangedEventArgs.OldValue);
|
||||
},
|
||||
null,
|
||||
false);
|
||||
|
||||
Event?.Invoke(sender, new DiagramEventArgs(valuePropertyChangedEventArgs.PropertyName, valuePropertyChangedEventArgs.NewValue, valuePropertyChangedEventArgs.OldValue, selectable?.Id));
|
||||
}
|
||||
@@ -2480,7 +2489,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
var oldcenter = BoundingRect.Center;
|
||||
foreach (var item in selectedItems.OfType<DesignerItemViewModelBase>())
|
||||
{
|
||||
item.Left = item.Left - oldcenter.X + PageSize.Width / 2;
|
||||
item.Left = item.Left - oldcenter.X + PageSize.Width / 2;
|
||||
item.Top = item.Top - oldcenter.Y + PageSize.Height / 2;
|
||||
}
|
||||
|
||||
@@ -2541,7 +2550,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
foreach (var item in infos)
|
||||
{
|
||||
item.Key.Size = item.Value;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -2695,15 +2704,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
items = SelectedItems?.OfType<DesignerItemViewModelBase>().Where(p => p.ParentId == Guid.Empty).ToList();
|
||||
}
|
||||
|
||||
var groups = items.OfType<DesignerItemViewModelBase>().Where(p => p.IsGroup && p.ParentId == Guid.Empty).ToList();
|
||||
|
||||
//解除分组
|
||||
if (groupItem == null && groups.Count > 0)
|
||||
{
|
||||
ExecuteUngroupCommand(groups);
|
||||
return;
|
||||
}
|
||||
|
||||
RectangleBase rect = DiagramViewModelHelper.GetBoundingRectangle(items);
|
||||
|
||||
if (groupItem == null)
|
||||
@@ -2711,16 +2711,24 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
groupItem = new GroupDesignerItemViewModel();
|
||||
}
|
||||
|
||||
Add(groupItem, true);
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() => {
|
||||
Add(groupItem);
|
||||
foreach (DesignerItemViewModelBase item in items)
|
||||
item.ParentId = groupItem.Id;
|
||||
groupItem.Resize();
|
||||
ClearSelectedItems();
|
||||
SelectionService.AddToSelection(groupItem);
|
||||
},
|
||||
() => {
|
||||
Remove(groupItem);
|
||||
foreach (DesignerItemViewModelBase item in items)
|
||||
{
|
||||
item.IsSelected = true;
|
||||
item.ParentId = Guid.Empty;
|
||||
}
|
||||
});
|
||||
|
||||
foreach (DesignerItemViewModelBase item in items)
|
||||
item.ParentId = groupItem.Id;
|
||||
|
||||
groupItem.Resize();
|
||||
|
||||
ClearSelectedItemsCommand.Execute(null);
|
||||
//groupItem.IsSelected = true;
|
||||
SelectionService.AddToSelection(groupItem);
|
||||
}
|
||||
|
||||
private void ExecuteUngroupCommand(object parameter)
|
||||
@@ -2728,22 +2736,45 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
List<DesignerItemViewModelBase> groups;
|
||||
if (parameter is IEnumerable<DesignerItemViewModelBase> para)
|
||||
{
|
||||
groups = para.ToList();
|
||||
groups = para.Where(p => p.IsGroup && p.ParentId == Guid.Empty).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
groups = SelectedItems?.OfType<DesignerItemViewModelBase>().Where(p => p.IsGroup && p.ParentId == Guid.Empty).ToList();
|
||||
}
|
||||
|
||||
Dictionary<DesignerItemViewModelBase, Tuple<Guid, int>> items = new Dictionary<DesignerItemViewModelBase, Tuple<Guid, int>>();
|
||||
foreach (DesignerItemViewModelBase groupRoot in groups)
|
||||
{
|
||||
var children = SelectedItems.OfType<DesignerItemViewModelBase>().Where(p => p.ParentId == groupRoot.Id);
|
||||
foreach (DesignerItemViewModelBase child in children)
|
||||
child.ParentId = Guid.Empty;
|
||||
|
||||
RemoveItemCommand.Execute(groupRoot);
|
||||
UpdateZIndex();
|
||||
items.Add(child, new Tuple<Guid, int>(child.ParentId, child.ZIndex));
|
||||
}
|
||||
|
||||
DoCommandManager.DoNewCommand(this.ToString(),
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase groupRoot in groups)
|
||||
{
|
||||
Remove(groupRoot);
|
||||
}
|
||||
foreach (var item in items)
|
||||
{
|
||||
item.Key.ParentId = Guid.Empty;
|
||||
}
|
||||
UpdateZIndex();
|
||||
},
|
||||
() => {
|
||||
foreach (DesignerItemViewModelBase groupRoot in groups)
|
||||
{
|
||||
Add(groupRoot);
|
||||
}
|
||||
foreach (var item in items)
|
||||
{
|
||||
item.Key.ParentId = item.Value.Item1;
|
||||
item.Key.ZIndex = item.Value.Item2;
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private bool BelongToSameGroup(IGroupable item1, IGroupable item2)
|
||||
@@ -2817,6 +2848,11 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
GroupCommand.Execute(null);
|
||||
return true;
|
||||
}
|
||||
else if (DiagramOption.ShortcutOption.Ungroup(e))
|
||||
{
|
||||
UngroupCommand.Execute(null);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -158,7 +158,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private bool _isSelected;
|
||||
[Browsable(false)]
|
||||
[CanDo]
|
||||
//[CanDo]
|
||||
public bool IsSelected
|
||||
{
|
||||
get
|
||||
|
||||
Reference in New Issue
Block a user