Visual scripting - Added pin disconnect with MMB

Visual scripting - Added min and max node
This commit is contained in:
Robert committed 2022-08-01 22:26:11 +02:00
1 parent b6e0c0fb66
commit dc17253518
15 files changed
+164 -21

No files matched your search

@@ -6,19 +6,21 @@ namespace Artemis.UI.Screens.VisualScripting.Pins;
public class InputPinCollectionViewModel : PinCollectionViewModel
{
private readonly NodeScriptViewModel _nodeScriptViewModel;
private readonly INodeVmFactory _nodeVmFactory;
public IPinCollection InputPinCollection { get; }
public InputPinCollectionViewModel(IPinCollection inputPinCollection, NodeScriptViewModel nodeScriptViewModel, INodeVmFactory nodeVmFactory, INodeEditorService nodeEditorService)
: base(inputPinCollection, nodeScriptViewModel, nodeEditorService)
{
_nodeScriptViewModel = nodeScriptViewModel;
_nodeVmFactory = nodeVmFactory;
InputPinCollection = inputPinCollection;
}
protected override PinViewModel CreatePinViewModel(IPin pin)
{
PinViewModel vm = _nodeVmFactory.InputPinViewModel(pin);
PinViewModel vm = _nodeVmFactory.InputPinViewModel(pin, _nodeScriptViewModel);
vm.RemovePin = RemovePin;
return vm;
}
@@ -14,7 +14,7 @@
<UserControl.Styles>
<StyleInclude Source="/Screens/VisualScripting/VisualScripting.axaml" />
</UserControl.Styles>
<StackPanel Name="PinContainer" Orientation="Horizontal" Spacing="6">
<StackPanel Name="PinContainer" Orientation="Horizontal" Spacing="6" PointerReleased="PinContainer_OnPointerReleased">
<Border Name="PinPoint">
<Border Name="VisualPinPoint"
BorderBrush="{CompiledBinding PinColor, Converter={StaticResource ColorToSolidColorBrushConverter}}"
@@ -1,4 +1,6 @@
using System;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Markup.Xaml;
namespace Artemis.UI.Screens.VisualScripting.Pins;
@@ -15,4 +17,10 @@ public class InputPinView : PinView
{
AvaloniaXamlLoader.Load(this);
}
private void PinContainer_OnPointerReleased(object? sender, PointerReleasedEventArgs e)
{
if (e.InitialPressMouseButton == MouseButton.Middle)
ViewModel?.DisconnectPin.Execute().Subscribe();
}
}
@@ -1,11 +1,13 @@
using Artemis.Core;
using Artemis.Core.Services;
using Artemis.UI.Shared.Services.NodeEditor;
namespace Artemis.UI.Screens.VisualScripting.Pins;
public class InputPinViewModel : PinViewModel
{
public InputPinViewModel(IPin inputPin, INodeService nodeService) : base(inputPin, nodeService)
public InputPinViewModel(IPin inputPin, NodeScriptViewModel nodeScriptViewModel, INodeService nodeService, INodeEditorService nodeEditorService)
: base(inputPin, nodeScriptViewModel, nodeService, nodeEditorService)
{
}
}
@@ -6,19 +6,21 @@ namespace Artemis.UI.Screens.VisualScripting.Pins;
public class OutputPinCollectionViewModel : PinCollectionViewModel
{
private readonly NodeScriptViewModel _nodeScriptViewModel;
private readonly INodeVmFactory _nodeVmFactory;
public IPinCollection OutputPinCollection { get; }
public OutputPinCollectionViewModel(IPinCollection outputPinCollection, NodeScriptViewModel nodeScriptViewModel, INodeVmFactory nodeVmFactory, INodeEditorService nodeEditorService)
: base(outputPinCollection, nodeScriptViewModel, nodeEditorService)
{
_nodeScriptViewModel = nodeScriptViewModel;
_nodeVmFactory = nodeVmFactory;
OutputPinCollection = outputPinCollection;
}
protected override PinViewModel CreatePinViewModel(IPin pin)
{
PinViewModel vm = _nodeVmFactory.OutputPinViewModel(pin);
PinViewModel vm = _nodeVmFactory.OutputPinViewModel(pin, _nodeScriptViewModel);
vm.RemovePin = RemovePin;
return vm;
}
@@ -14,7 +14,7 @@
<UserControl.Styles>
<StyleInclude Source="/Screens/VisualScripting/VisualScripting.axaml" />
</UserControl.Styles>
<StackPanel Name="PinContainer" Orientation="Horizontal" Spacing="6">
<StackPanel Name="PinContainer" Orientation="Horizontal" Spacing="6" PointerReleased="PinContainer_OnPointerReleased">
<TextBlock Name="PinName" VerticalAlignment="Center" Text="{CompiledBinding Pin.Name}" />
<Border Name="PinPoint">
<Border Name="VisualPinPoint"
@@ -1,4 +1,6 @@
using System;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Markup.Xaml;
namespace Artemis.UI.Screens.VisualScripting.Pins;
@@ -15,4 +17,10 @@ public class OutputPinView : PinView
{
AvaloniaXamlLoader.Load(this);
}
private void PinContainer_OnPointerReleased(object? sender, PointerReleasedEventArgs e)
{
if (e.InitialPressMouseButton == MouseButton.Middle)
ViewModel?.DisconnectPin.Execute().Subscribe();
}
}
@@ -1,11 +1,13 @@
using Artemis.Core;
using Artemis.Core.Services;
using Artemis.UI.Shared.Services.NodeEditor;
namespace Artemis.UI.Screens.VisualScripting.Pins;
public class OutputPinViewModel : PinViewModel
{
public OutputPinViewModel(IPin outputPin, INodeService nodeService) : base(outputPin, nodeService)
public OutputPinViewModel(IPin outputPin, NodeScriptViewModel nodeScriptViewModel, INodeService nodeService, INodeEditorService nodeEditorService)
: base(outputPin, nodeScriptViewModel, nodeService, nodeEditorService)
{
}
}
@@ -6,6 +6,8 @@ using Artemis.Core.Events;
using Artemis.Core.Services;
using Artemis.UI.Shared;
using Artemis.UI.Shared.Extensions;
using Artemis.UI.Shared.Services.NodeEditor;
using Artemis.UI.Shared.Services.NodeEditor.Commands;
using Avalonia;
using Avalonia.Controls.Mixins;
using Avalonia.Media;
@@ -22,11 +24,13 @@ public abstract class PinViewModel : ActivatableViewModelBase
private Color _pinColor;
private Color _darkenedPinColor;
protected PinViewModel(IPin pin, INodeService nodeService)
protected PinViewModel(IPin pin, NodeScriptViewModel nodeScriptViewModel, INodeService nodeService, INodeEditorService nodeEditorService)
{
_nodeService = nodeService;
Pin = pin;
DisconnectPin = ReactiveCommand.Create(() => nodeEditorService.ExecuteCommand(nodeScriptViewModel.NodeScript, new DisconnectPins(Pin)));
SourceList<IPin> connectedPins = new();
this.WhenActivated(d =>
{
@@ -78,6 +82,8 @@ public abstract class PinViewModel : ActivatableViewModelBase
set => RaiseAndSetIfChanged(ref _removePin, value);
}
public ReactiveCommand<Unit, Unit> DisconnectPin { get; }
public bool IsCompatibleWith(PinViewModel pinViewModel)
{
if (pinViewModel.Pin.Direction == Pin.Direction || pinViewModel.Pin.Node == Pin.Node)