This commit is contained in:
艾竹
2023-03-25 11:59:31 +08:00
parent 8a2c742ec4
commit b36bd4b228
35 changed files with 344 additions and 296 deletions

View File

@@ -76,6 +76,11 @@ namespace AIStudio.Wpf.DiagramDesigner
AddLabelCommand = new SimpleCommand(Command_Enable, para => AddLabel());
}
protected override void InitNew()
{
base.InitNew();
}
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(designerbase);

View File

@@ -36,10 +36,13 @@ namespace AIStudio.Wpf.DiagramDesigner
return new ConnectorInfoItemBase(this);
}
protected override void Init(IDiagramViewModel root)
protected override void Init(IDiagramViewModel root, bool initNew)
{
base.Init(root, initNew);
}
protected override void InitNew()
{
base.Init(root);
ColorViewModel = new ColorViewModel()
{
LineColor = new ColorObject() { Color = Color.FromArgb(0xAA, 0x00, 0x00, 0x80) },

View File

@@ -36,17 +36,20 @@ namespace AIStudio.Wpf.DiagramDesigner
return new ConnectorLabelItem(this);
}
protected override void Init(IDiagramViewModel root)
protected override void Init(IDiagramViewModel root, bool initNew)
{
base.Init(root);
ConnectorWidth = 30;
ConnectorHeight = 30;
base.Init(root, initNew);
DeleteLabelCommand = new SimpleCommand(Command_Enable, DeleteLabel);
EditCommand = new SimpleCommand(Command_Enable, ExecuteEditCommand);
}
protected override void InitNew()
{
ConnectorWidth = 30;
ConnectorHeight = 30;
}
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(designerbase);

View File

@@ -48,9 +48,13 @@ namespace AIStudio.Wpf.DiagramDesigner
return new ConnectorPointItem(this);
}
protected override void Init(IDiagramViewModel root)
protected override void Init(IDiagramViewModel root, bool initNew)
{
base.Init(root, initNew);
}
protected override void InitNew()
{
base.Init(root);
ColorViewModel = new ColorViewModel()
{
LineColor = new ColorObject() { Color = Color.FromArgb(0xAA, 0x00, 0x00, 0x80) },

View File

@@ -33,9 +33,9 @@ namespace AIStudio.Wpf.DiagramDesigner
return new ConnectorVertexItem(this);
}
protected override void Init(IDiagramViewModel root)
protected override void Init(IDiagramViewModel root, bool initNew)
{
base.Init(root);
base.Init(root, initNew);
DeleteVertexCommand = new SimpleCommand(Command_Enable, DeleteVertex);
}

View File

@@ -52,9 +52,9 @@ namespace AIStudio.Wpf.DiagramDesigner
return new FullyCreatedConnectorInfoItem(this);
}
protected override void Init(IDiagramViewModel root)
protected override void Init(IDiagramViewModel root, bool initNew)
{
base.Init(root);
base.Init(root, initNew);
menuOptions = new List<CinchMenuItem>();
MenuItemCommand = new SimpleCommand(Command_Enable, ExecuteMenuItemCommand);
@@ -62,6 +62,11 @@ namespace AIStudio.Wpf.DiagramDesigner
}
protected override void InitNew()
{
base.InitNew();
}
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(designerbase);

View File

@@ -38,11 +38,12 @@ namespace AIStudio.Wpf.DiagramDesigner
return new DesignerItemBase(this);
}
protected override void Init(IDiagramViewModel root)
protected override void InitNew()
{
base.Init(root);
InitConnector();
connectors.Add(new FullyCreatedConnectorInfo(this.Root, this, ConnectorOrientation.Top));
connectors.Add(new FullyCreatedConnectorInfo(this.Root, this, ConnectorOrientation.Bottom));
connectors.Add(new FullyCreatedConnectorInfo(this.Root, this, ConnectorOrientation.Left));
connectors.Add(new FullyCreatedConnectorInfo(this.Root, this, ConnectorOrientation.Right));
}
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
@@ -61,17 +62,13 @@ namespace AIStudio.Wpf.DiagramDesigner
this.Icon = designer.Icon;
this.CornerRadius = designer.CornerRadius;
this.BorderThickness = designer.BorderThickness;
foreach (var connector in designer.Connectors)
{
FullyCreatedConnectorInfo fullyCreatedConnectorInfo = new FullyCreatedConnectorInfo(this.Root, this, connector);
AddConnector(fullyCreatedConnectorInfo);
}
}
}
protected virtual void InitConnector()
{
connectors.Add(new FullyCreatedConnectorInfo(this.Root, this, ConnectorOrientation.Top));
connectors.Add(new FullyCreatedConnectorInfo(this.Root, this, ConnectorOrientation.Bottom));
connectors.Add(new FullyCreatedConnectorInfo(this.Root, this, ConnectorOrientation.Left));
connectors.Add(new FullyCreatedConnectorInfo(this.Root, this, ConnectorOrientation.Right));
}
#region
public FullyCreatedConnectorInfo FirstConnector

View File

@@ -1493,17 +1493,9 @@ namespace AIStudio.Wpf.DiagramDesigner
{
if (!selectedConnections.Contains(connection))
{
DesignerItemViewModelBase sourceItem = (from item in selectedDesignerItems
where item.Id == connection.SourceConnectorInfo.DataItem.Id
select item).FirstOrDefault();
DesignerItemViewModelBase sinkItem = (from item in selectedDesignerItems
where item.Id == connection.SinkConnectorInfoFully?.DataItem?.Id
select item).FirstOrDefault();
if (sourceItem != null &&
sinkItem != null &&
BelongToSameGroup(sourceItem, sinkItem))
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);
}
@@ -1600,11 +1592,11 @@ namespace AIStudio.Wpf.DiagramDesigner
if (mappingOldToNewIDs.ContainsKey(item.ParentId))
item.ParentId = mappingOldToNewIDs[item.ParentId];
}
}
items.AddRange(connectors);
FixConnection(items);
}
items.AddRange(connectors);
DirectAddItemCommand.Execute(items);
FixOtherInfo(items);
}
catch (Exception e)
{
@@ -1618,7 +1610,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
protected virtual void FixConnection(List<SelectableDesignerItemViewModelBase> items)
protected virtual void FixOtherInfo(List<SelectableDesignerItemViewModelBase> items)
{
}
@@ -2521,10 +2513,7 @@ namespace AIStudio.Wpf.DiagramDesigner
foreach (DesignerItemViewModelBase groupRoot in groups)
{
var children = from child in SelectedItems.OfType<DesignerItemViewModelBase>()
where child.ParentId == groupRoot.Id
select child;
var children = SelectedItems.OfType<DesignerItemViewModelBase>().Where(p => p.ParentId == groupRoot.Id);
foreach (DesignerItemViewModelBase child in children)
child.ParentId = Guid.Empty;

View File

@@ -36,17 +36,17 @@ namespace AIStudio.Wpf.DiagramDesigner
}
protected override void Init(IDiagramViewModel root)
protected override void Init(IDiagramViewModel root, bool initNew)
{
base.Init(root);
base.Init(root, initNew);
this.IsGroup = true;
this.IsHitTestVisible = true;
}
protected override void InitConnector()
protected override void InitNew()
{
this.ClearConnectors();
}
protected override void ExecuteEditCommand(object param)

View File

@@ -42,14 +42,19 @@ namespace AIStudio.Wpf.DiagramDesigner
}
protected override void Init(IDiagramViewModel root)
protected override void Init(IDiagramViewModel root, bool initNew)
{
base.Init(root);
base.Init(root, initNew);
SelectItemCommand = new SimpleCommand(Command_Enable, ExecuteSelectItemCommand);
EditCommand = new SimpleCommand(Command_Enable, ExecuteEditCommand);
}
protected override void InitNew()
{
base.InitNew();
}
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(designerbase);

View File

@@ -29,20 +29,20 @@ namespace AIStudio.Wpf.DiagramDesigner
public SelectableViewModelBase(IDiagramViewModel root)
{
Init(root);
Init(root, true);
(FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged;
}
public SelectableViewModelBase(IDiagramViewModel root, SelectableItemBase designer)
{
Init(root);
Init(root, false);
LoadDesignerItemViewModel(designer);
(FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged;
}
public SelectableViewModelBase(IDiagramViewModel root, SerializableItem serializableItem, string serializableType)
{
Init(root);
Init(root, false);
SelectableItemBase obj = SerializeHelper.DeserializeObject(serializableItem.SerializableTypeName, serializableItem.SerializableString, serializableType);
LoadDesignerItemViewModel(obj);
(FontViewModel as FontViewModel).PropertyChanged += FontViewModel_PropertyChanged;
@@ -66,7 +66,7 @@ namespace AIStudio.Wpf.DiagramDesigner
return null;
}
protected virtual void Init(IDiagramViewModel root)
protected virtual void Init(IDiagramViewModel root, bool initNew)
{
Root = root;
@@ -98,6 +98,16 @@ namespace AIStudio.Wpf.DiagramDesigner
}
LockObjectViewModel = new LockObjectViewModel();
if (initNew)
{
InitNew();
}
}
protected virtual void InitNew()
{
}
protected virtual void LoadDesignerItemViewModel(SelectableItemBase designerbase)
@@ -158,7 +168,7 @@ namespace AIStudio.Wpf.DiagramDesigner
set
{
if (SetProperty(ref _isSelected, value))
{
{
//如果没有文字,失去焦点自动清除
if (_isSelected == false && string.IsNullOrEmpty(Text))
{
@@ -336,7 +346,7 @@ namespace AIStudio.Wpf.DiagramDesigner
protected virtual void ClearText()
{
}
public virtual void ClearSelected()
@@ -362,6 +372,11 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
public override string ToString()
{
return $"{Id}-{Text}";
}
public virtual void Dispose()
{
}

View File

@@ -42,11 +42,10 @@ namespace AIStudio.Wpf.DiagramDesigner
return new MediaDesignerItem(this);
}
protected override void Init(IDiagramViewModel root)
protected override void Init(IDiagramViewModel root, bool initNew)
{
base.Init(root);
base.Init(root, initNew);
ClearConnectors();
//propertyChangedSubscription = WhenPropertyChanged.Where(o => o.ToString() == "Left" || o.ToString() == "Top" || o.ToString() == "ItemWidth" || o.ToString() == "ItemHeight").Subscribe(ChangeImageElement);
//connectorsChangedSubscription = WhenConnectorsChanged.Subscribe(OnConnectorsChanged);
@@ -55,6 +54,10 @@ namespace AIStudio.Wpf.DiagramDesigner
BuildMenuOptions();
}
protected override void InitNew()
{
this.ClearConnectors();
}
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
@@ -62,12 +65,7 @@ namespace AIStudio.Wpf.DiagramDesigner
if (designerbase is MediaDesignerItem designer)
{
this.Icon = designer.Icon;
foreach (var connector in designer.Connectors)
{
FullyCreatedConnectorInfo fullyCreatedConnectorInfo = new FullyCreatedConnectorInfo(this.Root, this, connector);
AddConnector(fullyCreatedConnectorInfo);
}
this.Icon = designer.Icon;
}
}

View File

@@ -41,15 +41,31 @@ namespace AIStudio.Wpf.DiagramDesigner
return new ImageDesignerItem(this);
}
protected override void Init(IDiagramViewModel root)
protected override void Init(IDiagramViewModel root, bool initNew)
{
base.Init(root);
base.Init(root, initNew);
this.PropertyChanged += ImageItemViewModel_PropertyChanged;
BuildMenuOptions();
}
protected override void InitNew()
{
base.InitNew();
}
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is ImageDesignerItem designer)
{
this.Icon = designer.Icon;
Suffix = Path.GetExtension(this.Icon).ToLower();
}
}
private void ImageItemViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(ItemWidth) || e.PropertyName == nameof(ItemHeight) || e.PropertyName == nameof(ResizeMargin) || e.PropertyName == nameof(ClipMode))
@@ -65,6 +81,7 @@ namespace AIStudio.Wpf.DiagramDesigner
}
}
#region
private string _suffix;
public string Suffix
{
@@ -113,24 +130,9 @@ namespace AIStudio.Wpf.DiagramDesigner
SetProperty(ref _clipMode, value);
}
}
#endregion
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
base.LoadDesignerItemViewModel(designerbase);
if (designerbase is ImageDesignerItem designer)
{
this.Icon = designer.Icon;
Suffix = Path.GetExtension(this.Icon).ToLower();
foreach (var connector in designer.Connectors)
{
FullyCreatedConnectorInfo fullyCreatedConnectorInfo = new FullyCreatedConnectorInfo(this.Root, this, connector);
AddConnector(fullyCreatedConnectorInfo);
}
}
}
private void BuildMenuOptions()
{
menuOptions = new ObservableCollection<CinchMenuItem>();

View File

@@ -16,10 +16,13 @@ namespace AIStudio.Wpf.DiagramDesigner
Top = Math.Max(0, location.Y - ItemHeight / 2);
}
protected override void Init(IDiagramViewModel root)
protected override void Init(IDiagramViewModel root, bool initNew)
{
base.Init(root);
base.Init(root, initNew);
}
protected override void InitNew()
{
this.ClearConnectors();
this.AddConnector(new FullyCreatedConnectorInfo(this, ConnectorOrientation.None, true));

View File

@@ -95,14 +95,19 @@ namespace AIStudio.Wpf.DiagramDesigner
return new LogicalGateDesignerItemBase(this);
}
protected override void Init(IDiagramViewModel root)
{
protected override void Init(IDiagramViewModel root, bool initNew)
{
ShowRotate = false;
ShowArrow = false;
AddInputCommand = new SimpleCommand(Command_Enable, para => ExecuteAddInput(para));
AddOutputCommand = new SimpleCommand(Command_Enable, para => ExecuteAddOutput(para));
base.Init(root);
base.Init(root, initNew);
}
protected override void InitNew()
{
base.InitNew();
}
private void BuildMenuOptions()

View File

@@ -36,13 +36,17 @@ namespace AIStudio.Wpf.DiagramDesigner
return new MediaDesignerItem(this);
}
protected override void Init(IDiagramViewModel root)
protected override void Init(IDiagramViewModel root, bool initNew)
{
base.Init(root);
base.Init(root, initNew);
BuildMenuOptions();
}
}
protected override void InitNew()
{
base.InitNew();
}
protected override void LoadDesignerItemViewModel(SelectableItemBase designerbase)
{
@@ -51,12 +55,6 @@ namespace AIStudio.Wpf.DiagramDesigner
if (designerbase is MediaDesignerItem designer)
{
this.Icon = designer.Icon;
foreach (var connector in designer.Connectors)
{
FullyCreatedConnectorInfo fullyCreatedConnectorInfo = new FullyCreatedConnectorInfo(this.Root, this, connector);
AddConnector(fullyCreatedConnectorInfo);
}
}
}

View File

@@ -16,15 +16,17 @@ namespace AIStudio.Wpf.DiagramDesigner
Top = Math.Max(0, location.Y - ItemHeight / 2);
}
protected override void Init(IDiagramViewModel root)
protected override void Init(IDiagramViewModel root, bool initNew)
{
base.Init(root);
this.ClearConnectors();
this.AddConnector(new FullyCreatedConnectorInfo(this, ConnectorOrientation.None, true));
base.Init(root, initNew);
}
protected override void InitNew()
{
ItemWidth = 5;
ItemHeight = 5;
this.ClearConnectors();
this.AddConnector(new FullyCreatedConnectorInfo(this, ConnectorOrientation.None, true));
}
private bool _showConnectors = false;

View File

@@ -98,16 +98,19 @@ namespace AIStudio.Wpf.DiagramDesigner
Top = ConnectionPoints.Min(p => p.Y);
}
protected override void Init(IDiagramViewModel root)
{
protected override void Init(IDiagramViewModel root, bool initNew)
{
MenuItemCommand = new SimpleCommand(Command_Enable, ExecuteMenuItemCommand);
base.Init(root);
this.ClearConnectors();
base.Init(root, initNew);
BuildMenuOptions();
}
protected override void InitNew()
{
this.ClearConnectors();
}
private void ExecuteMenuItemCommand(object obj)
{
ShowConnectors = (obj as CinchMenuItem).IsChecked;

View File

@@ -35,12 +35,15 @@ namespace AIStudio.Wpf.DiagramDesigner
return new TextDesignerItem(this);
}
protected override void Init(IDiagramViewModel root)
protected override void Init(IDiagramViewModel root, bool initNew)
{
base.Init(root);
base.Init(root, initNew);
CustomText = true;
CustomText = true;
}
protected override void InitNew()
{
this.ItemWidth = 150;
this.ClearConnectors();
}