选中状态代码整理

This commit is contained in:
艾竹
2023-05-14 18:02:59 +08:00
parent 58359c36d4
commit 40f81b7209
17 changed files with 663 additions and 62 deletions

View File

@@ -142,14 +142,16 @@ namespace AIStudio.Wpf.DiagramDesigner
if (rubberBand.Contains(itemBounds))
{
//item.IsSelected = true;
vm.SelectionService.AddToSelection(item);
//vm.SelectionService.AddToSelection(item);
item.AddToSelection(true, false);
}
else
{
if (!(Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)))
{
//item.IsSelected = false;
vm.SelectionService.RemoveFromSelection(item);
//vm.SelectionService.RemoveFromSelection(item);
item.RemoveFromSelection();
}
}
}

View File

@@ -7,7 +7,7 @@ using System.Windows.Input;
namespace AIStudio.Wpf.DiagramDesigner
{
public static class SelectionProps
public static class SelectionProps
{
#region EnabledForSelection
@@ -51,20 +51,23 @@ namespace AIStudio.Wpf.DiagramDesigner
{
if ((Keyboard.Modifiers & (ModifierKeys.Shift)) != ModifierKeys.None)
{
selectable.IsSelected = !selectable.IsSelected;
//selectable.IsSelected = !selectable.IsSelected;
selectable.AddToSelection(!selectable.IsSelected, false);
}
if ((Keyboard.Modifiers & (ModifierKeys.Control)) != ModifierKeys.None)
{
selectable.IsSelected = !selectable.IsSelected;
//selectable.IsSelected = !selectable.IsSelected;
selectable.AddToSelection(!selectable.IsSelected, false);
}
}
else if (!selectable.IsSelected)
{
selectable.AddToSelection(true);
selectable.AddToSelection(true, true);
}
}
}
}
}
}
}

View File

@@ -387,7 +387,8 @@ namespace AIStudio.Wpf.DiagramDesigner
SourceConnector = new Connector() { Content = new PartCreatedConnectorInfo(currentPoint.X, currentPoint.Y), Tag = "虚拟的连接点" };
}
}
else if (_service.DrawModeViewModel.SharpDrawModeSelected || _service.DrawModeViewModel.DrawingDrawModeSelected)
else if (_service.DrawModeViewModel.SharpDrawModeSelected ||
(_service.DrawModeViewModel.DrawingDrawModeSelected && _service.DrawModeViewModel.DrawingDrawMode != DrawMode.Select))
{
// create rubberband adorner
AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(this);

View File

@@ -484,6 +484,9 @@
<DataTrigger Binding="{Binding IsInnerConnector}" Value="True">
<Setter TargetName="PART_ConnectorDecorator" Property="Template" Value="{StaticResource InnerConnectorDecoratorTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding SelectedDisable}" Value="True">
<Setter TargetName="selectedGrid" Property="IsHitTestVisible" Value="False" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</Setter.Value>

View File

@@ -120,14 +120,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
base.OnPreviewKeyDown(e);
}
protected override void OnLostFocus(RoutedEventArgs e)
{
if (this.DataContext is ISelectable selectable)
{
selectable.IsSelected = false;
}
}
}
public class ControlAttachProperty

View File

@@ -523,7 +523,7 @@ namespace AIStudio.Wpf.DiagramDesigner
case nameof(IsSelected):
if (IsSelected == false)
{
Labels.FirstOrDefault()?.AddToSelection(false);
Labels.FirstOrDefault()?.AddToSelection(false, true);
}
break;
case nameof(RouterMode):

View File

@@ -169,15 +169,20 @@ namespace AIStudio.Wpf.DiagramDesigner
Offset += new VectorBase(0, newvalue - oldvalue);
}
public override void AddToSelection(bool selected)
public override void AddToSelection(bool selected, bool clearother)
{
foreach (var item in Connector.Labels.ToList())
item.IsSelected = false;
if (selected == true)
if (clearother)
{
IsSelected = true;
foreach (var item in Connector.Labels.ToList())
{
if (item != this)
{
item.IsSelected = false;
}
}
}
IsSelected = selected;
}
protected override void ClearText()

View File

@@ -1181,7 +1181,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{
foreach (var item in this.SelectedItems.ToList())
{
item.IsSelected = false;
item.RemoveFromSelection();
}
}
@@ -2498,7 +2498,7 @@ namespace AIStudio.Wpf.DiagramDesigner
item.ParentId = groupItem.Id;
groupItem.Resize();
ClearSelectedItems();
SelectionService.AddToSelection(groupItem);
groupItem.AddToSelection(true, true);
},
() => {
Remove(groupItem);

View File

@@ -153,23 +153,34 @@ namespace AIStudio.Wpf.DiagramDesigner
{
foreach (var designerItemViewModelBase in Root.SelectedItems.ToList())
{
designerItemViewModelBase.ClearSelected();
designerItemViewModelBase.RemoveFromSelection();
}
}
IsSelected = select;
}
public override void AddToSelection(bool selected)
public override void AddToSelection(bool selected, bool clearother)
{
foreach (SelectableDesignerItemViewModelBase item in Root.SelectedItems.ToList())
item.IsSelected = false;
if (clearother == true)
{
foreach (SelectableDesignerItemViewModelBase item in Root.SelectedItems.ToList())
{
if (item != this)
{
item.RemoveFromSelection();
}
}
}
Root.SelectedItems.Clear();
if (selected == true)
{
Root.SelectionService.AddToSelection(this);
}
else
{
Root.SelectionService.RemoveFromSelection(this);
}
}
protected virtual void ExecuteEditCommand(object param)

View File

@@ -72,7 +72,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
protected virtual void Init(IDiagramViewModel root, bool initNew)
{
{
Root = root;
if (Root?.ColorViewModel != null)
@@ -124,7 +124,7 @@ namespace AIStudio.Wpf.DiagramDesigner
protected virtual void InitNew()
{
}
protected virtual void LoadDesignerItemViewModel(SelectableItemBase designerbase)
@@ -144,7 +144,7 @@ namespace AIStudio.Wpf.DiagramDesigner
public bool IsLoaded
{
get;set;
get; set;
}
public bool IsInternalChanged
@@ -185,10 +185,18 @@ namespace AIStudio.Wpf.DiagramDesigner
get; set;
}
public bool DisableSelected
private bool _disableSelected;
public bool SelectedDisable
{
get;set;
}
get
{
return _disableSelected;
}
set
{
SetProperty(ref _disableSelected, value);
}
}
private bool _isSelected;
[Browsable(false)]
@@ -197,7 +205,7 @@ namespace AIStudio.Wpf.DiagramDesigner
{
get
{
if (DisableSelected == true)
if (SelectedDisable == true)
{
return false;
}
@@ -316,10 +324,6 @@ namespace AIStudio.Wpf.DiagramDesigner
{
return false;
}
if (DisableSelected == true)
{
return false;
}
return _isHitTestVisible;
}
@@ -424,7 +428,7 @@ namespace AIStudio.Wpf.DiagramDesigner
[Browsable(true)]
public string Name
{
get;set;
get; set;
}
private string _text;
@@ -462,12 +466,12 @@ namespace AIStudio.Wpf.DiagramDesigner
}
public virtual void ClearSelected()
public virtual void RemoveFromSelection()
{
_isSelected = false;
IsSelected = false;
}
public virtual void AddToSelection(bool selected)
public virtual void AddToSelection(bool selected, bool clearother)
{
}
@@ -496,7 +500,7 @@ namespace AIStudio.Wpf.DiagramDesigner
protected void ColorViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (IsLoaded == false || IsInternalChanged == true ) { return; }
if (IsLoaded == false || IsInternalChanged == true) { return; }
RaisePropertyChanged(sender, e);
}

View File

@@ -25,7 +25,6 @@ namespace AIStudio.Wpf.DiagramDesigner
DrawMode = drawMode;
Points = new List<Point> { startPoint };
Erasable = erasable;
DisableSelected = Erasable;
if (Erasable)
{
if (Root?.DrawModeViewModel != null)
@@ -75,7 +74,7 @@ namespace AIStudio.Wpf.DiagramDesigner
//this.Geometry.Transform = Transform.Parse(designer.Matrix.ToString());
this.Points = designer.Points;
this.DrawMode = designer.DrawMode;
this.DisableSelected = Erasable;
this.SelectedDisable = Erasable;
}
}
@@ -93,8 +92,6 @@ namespace AIStudio.Wpf.DiagramDesigner
{
if (IsFinish)
{
UpdateLocation();
if (Geometry != null)
{
if (Geometry.Transform is TransformGroup transformGroup)
@@ -104,14 +101,16 @@ namespace AIStudio.Wpf.DiagramDesigner
transformGroup.Children.Add(new TranslateTransform(0 - Geometry.Bounds.Left, 0 - Geometry.Bounds.Top));
}
else
Geometry.Transform = new TranslateTransform(0 - Left, 0 - Top);
Geometry.Transform = new TranslateTransform(0 - Geometry.Bounds.Left, 0 - Geometry.Bounds.Top);
if (Erasable)
{
var aPen = new Pen(ColorViewModel.LineColor.ToBrush(), ColorViewModel.LineWidth);
aPen.DashStyle = new DashStyle(StrokeDashArray.Dash[(int)ColorViewModel.LineDashStyle], 1);
Geometry = Geometry.GetWidenedPathGeometry(aPen); //可擦除需要把Geometry转成几何图像所以不能有填充色
}
UpdateLocation();
}
}
return true;
@@ -180,10 +179,38 @@ namespace AIStudio.Wpf.DiagramDesigner
public void UpdateLocation()
{
ItemWidth = Geometry.Bounds.Width + ColorViewModel.LineWidth * 2;
ItemHeight = Geometry.Bounds.Height + ColorViewModel.LineWidth * 2;
Left = Geometry.Bounds.Left;
Top = Geometry.Bounds.Top;
if (Erasable)
{
ItemWidth = Geometry.Bounds.Width - ColorViewModel.LineWidth * 0.5;
ItemHeight = Geometry.Bounds.Height - ColorViewModel.LineWidth * 0.5;
Left = Points[0].X;
Top = Points[0].Y;
}
else
{
ItemWidth = Geometry.Bounds.Width;
ItemHeight = Geometry.Bounds.Height;
Left = Points[0].X;
Top = Points[0].Y;
}
}
public override void RemoveFromSelection()
{
if (Erasable == true)
{
this.SelectedDisable = true;
}
base.RemoveFromSelection();
}
public override void AddToSelection(bool selected, bool clearother)
{
if (selected == true && _service.DrawModeViewModel.DrawingDrawMode == DrawMode.Select)
{
this.SelectedDisable = false;
}
base.AddToSelection(selected, clearother);
}
}

View File

@@ -34,7 +34,7 @@ namespace AIStudio.Wpf.DiagramDesigner
get; set;
}
void AddToSelection(bool selected);
void AddToSelection(bool selected, bool clearother);
event PropertyChangedEventHandler PropertyChanged;
}

View File

@@ -31,7 +31,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
internal void RemoveFromSelection(ISelectable item)
public void RemoveFromSelection(ISelectable item)
{
if (item is IGroupable)
{