mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 03:48:56 +00:00
Nodes - Improved changing pin types without reconnecting pins
UI - Fixed possible lingering UI elements in node editor and several other places
This commit is contained in:
1 parent
eca8985fc4
commit
cdd814d920
8 files changed
+27
-47
No files matched your search
@@ -50,10 +50,10 @@ public class NodeScriptViewModel : ActivatableViewModelBase
|
||||
this.WhenActivated(d =>
|
||||
{
|
||||
Observable.FromEventPattern<SingleValueEventArgs<INode>>(x => NodeScript.NodeAdded += x, x => NodeScript.NodeAdded -= x)
|
||||
.Subscribe(e => HandleNodeAdded(e.EventArgs))
|
||||
.Subscribe(e => _nodeViewModels.Add(_nodeVmFactory.NodeViewModel(this, e.EventArgs.Value)))
|
||||
.DisposeWith(d);
|
||||
Observable.FromEventPattern<SingleValueEventArgs<INode>>(x => NodeScript.NodeRemoved += x, x => NodeScript.NodeRemoved -= x)
|
||||
.Subscribe(e => HandleNodeRemoved(e.EventArgs))
|
||||
.Subscribe(e => _nodeViewModels.RemoveMany(_nodeViewModels.Items.Where(n => n.Node == e.EventArgs.Value)))
|
||||
.DisposeWith(d);
|
||||
});
|
||||
|
||||
@@ -276,16 +276,4 @@ public class NodeScriptViewModel : ActivatableViewModelBase
|
||||
private void ExecutePasteSelected()
|
||||
{
|
||||
}
|
||||
|
||||
private void HandleNodeAdded(SingleValueEventArgs<INode> eventArgs)
|
||||
{
|
||||
_nodeViewModels.Add(_nodeVmFactory.NodeViewModel(this, eventArgs.Value));
|
||||
}
|
||||
|
||||
private void HandleNodeRemoved(SingleValueEventArgs<INode> eventArgs)
|
||||
{
|
||||
NodeViewModel? toRemove = NodeViewModels.FirstOrDefault(vm => ReferenceEquals(vm.Node, eventArgs.Value));
|
||||
if (toRemove != null)
|
||||
_nodeViewModels.Remove(toRemove);
|
||||
}
|
||||
}
|
||||
@@ -61,10 +61,10 @@ public class NodeViewModel : ActivatableViewModelBase
|
||||
nodePins.Connect().Merge(nodePinCollections.Connect().TransformMany(c => c.PinViewModels)).Bind(out ReadOnlyObservableCollection<PinViewModel> pins).Subscribe();
|
||||
|
||||
PinViewModels = pins;
|
||||
|
||||
|
||||
DeleteNode = ReactiveCommand.Create(ExecuteDeleteNode, this.WhenAnyValue(vm => vm.IsStaticNode).Select(v => !v));
|
||||
ShowBrokenState = ReactiveCommand.Create(ExecuteShowBrokenState);
|
||||
|
||||
|
||||
this.WhenActivated(d =>
|
||||
{
|
||||
_isStaticNode = Node.WhenAnyValue(n => n.IsDefaultNode, n => n.IsExitNode)
|
||||
@@ -93,7 +93,7 @@ public class NodeViewModel : ActivatableViewModelBase
|
||||
})
|
||||
.DisposeWith(d);
|
||||
Observable.FromEventPattern<SingleValueEventArgs<IPin>>(x => Node.PinRemoved += x, x => Node.PinRemoved -= x)
|
||||
.Subscribe(p => nodePins!.Remove(nodePins.Items.FirstOrDefault(vm => vm.Pin == p.EventArgs.Value)))
|
||||
.Subscribe(p => nodePins.RemoveMany(nodePins.Items.Where(vm => vm.Pin == p.EventArgs.Value)))
|
||||
.DisposeWith(d);
|
||||
nodePins.Edit(l =>
|
||||
{
|
||||
@@ -118,7 +118,7 @@ public class NodeViewModel : ActivatableViewModelBase
|
||||
})
|
||||
.DisposeWith(d);
|
||||
Observable.FromEventPattern<SingleValueEventArgs<IPinCollection>>(x => Node.PinCollectionRemoved += x, x => Node.PinCollectionRemoved -= x)
|
||||
.Subscribe(p => nodePinCollections!.Remove(nodePinCollections.Items.FirstOrDefault(vm => vm.PinCollection == p.EventArgs.Value)))
|
||||
.Subscribe(p => nodePinCollections.RemoveMany(nodePinCollections.Items.Where(vm => vm.PinCollection == p.EventArgs.Value)))
|
||||
.DisposeWith(d);
|
||||
nodePinCollections.Edit(l =>
|
||||
{
|
||||
@@ -160,8 +160,8 @@ public class NodeViewModel : ActivatableViewModelBase
|
||||
get => _isSelected;
|
||||
set => RaiseAndSetIfChanged(ref _isSelected, value);
|
||||
}
|
||||
|
||||
public ReactiveCommand<Unit,Unit> ShowBrokenState { get; }
|
||||
|
||||
public ReactiveCommand<Unit, Unit> ShowBrokenState { get; }
|
||||
public ReactiveCommand<Unit, Unit> DeleteNode { get; }
|
||||
|
||||
public void StartDrag(Point mouseStartPosition)
|
||||
@@ -195,7 +195,7 @@ public class NodeViewModel : ActivatableViewModelBase
|
||||
{
|
||||
_nodeEditorService.ExecuteCommand(NodeScriptViewModel.NodeScript, new DeleteNode(NodeScriptViewModel.NodeScript, Node));
|
||||
}
|
||||
|
||||
|
||||
private void ExecuteShowBrokenState()
|
||||
{
|
||||
if (Node.BrokenState != null && Node.BrokenStateException != null)
|
||||
|
||||
@@ -30,7 +30,7 @@ public abstract class PinCollectionViewModel : ActivatableViewModelBase
|
||||
.Subscribe(e => PinViewModels.Add(CreatePinViewModel(e.EventArgs.Value)))
|
||||
.DisposeWith(d);
|
||||
Observable.FromEventPattern<SingleValueEventArgs<IPin>>(x => PinCollection.PinRemoved += x, x => PinCollection.PinRemoved -= x)
|
||||
.Subscribe(e => PinViewModels.RemoveMany(PinViewModels.Where(p => p.Pin == e.EventArgs.Value).ToList()))
|
||||
.Subscribe(e => PinViewModels.RemoveMany(PinViewModels.Where(p => p.Pin == e.EventArgs.Value)))
|
||||
.DisposeWith(d);
|
||||
});
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Reactive;
|
||||
using System.Reactive.Linq;
|
||||
using Artemis.Core;
|
||||
@@ -38,7 +39,7 @@ public abstract class PinViewModel : ActivatableViewModelBase
|
||||
.Subscribe(e => connectedPins.Add(e.EventArgs.Value))
|
||||
.DisposeWith(d);
|
||||
Observable.FromEventPattern<SingleValueEventArgs<IPin>>(x => Pin.PinDisconnected += x, x => Pin.PinDisconnected -= x)
|
||||
.Subscribe(e => connectedPins.Remove(e.EventArgs.Value))
|
||||
.Subscribe(e => connectedPins.RemoveMany(connectedPins.Items.Where(p => p == e.EventArgs.Value)))
|
||||
.DisposeWith(d);
|
||||
Pin.WhenAnyValue(p => p.Type).Subscribe(_ => UpdatePinColor()).DisposeWith(d);
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user