diff --git a/src/Artemis.UI/Ninject/Factories/IVMFactory.cs b/src/Artemis.UI/Ninject/Factories/IVMFactory.cs
index 9f7cd85af..375efa7f4 100644
--- a/src/Artemis.UI/Ninject/Factories/IVMFactory.cs
+++ b/src/Artemis.UI/Ninject/Factories/IVMFactory.cs
@@ -5,6 +5,7 @@ using Artemis.Core.ScriptingProviders;
using Artemis.UI.Screens.Header;
using Artemis.UI.Screens.Plugins;
using Artemis.UI.Screens.ProfileEditor.Conditions;
+using Artemis.UI.Screens.ProfileEditor.DisplayConditions;
using Artemis.UI.Screens.ProfileEditor.LayerProperties;
using Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings;
using Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.ConditionalDataBinding;
@@ -17,6 +18,7 @@ using Artemis.UI.Screens.ProfileEditor.ProfileTree.Dialogs.AdaptionHints;
using Artemis.UI.Screens.ProfileEditor.ProfileTree.TreeItem;
using Artemis.UI.Screens.ProfileEditor.Visualization;
using Artemis.UI.Screens.ProfileEditor.Visualization.Tools;
+using Artemis.UI.Screens.ProfileEditor.Windows;
using Artemis.UI.Screens.Scripting;
using Artemis.UI.Screens.Settings.Device;
using Artemis.UI.Screens.Settings.Device.Tabs;
@@ -124,6 +126,11 @@ namespace Artemis.UI.Ninject.Factories
ModuleActivationRequirementViewModel ModuleActivationRequirementViewModel(IModuleActivationRequirement activationRequirement);
}
+ public interface INodeVmFactory : IVmFactory
+ {
+ NodeScriptWindowViewModel NodeScriptWindowViewModel(NodeScript nodeScript);
+ }
+
// TODO: Move these two
public interface IDataBindingsVmFactory
{
diff --git a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsView.xaml b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsView.xaml
index 1905c82e0..a9f8b3867 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsView.xaml
+++ b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsView.xaml
@@ -9,6 +9,7 @@
xmlns:displayConditions="clr-namespace:Artemis.UI.Screens.ProfileEditor.DisplayConditions"
xmlns:core="clr-namespace:Artemis.Core;assembly=Artemis.Core"
xmlns:controls="clr-namespace:Artemis.VisualScripting.Editor.Controls;assembly=Artemis.VisualScripting"
+ xmlns:shared="clr-namespace:Artemis.UI.Shared;assembly=Artemis.UI.Shared"
x:Class="Artemis.UI.Screens.ProfileEditor.DisplayConditions.DisplayConditionsView"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
@@ -16,6 +17,7 @@
+
@@ -40,35 +42,36 @@
-
-
-
-
+
+
+
+
+
+
+ Click to edit script
+
diff --git a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsViewModel.cs
index 871609421..ae26c1933 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsViewModel.cs
+++ b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsViewModel.cs
@@ -1,8 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
+using System.ComponentModel;
+using System.Windows.Input;
using Artemis.Core;
-using Artemis.Core.Services;
using Artemis.UI.Ninject.Factories;
using Artemis.UI.Screens.ProfileEditor.Conditions;
using Artemis.UI.Shared;
@@ -13,33 +11,17 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions
{
public class DisplayConditionsViewModel : Conductor, IProfileEditorPanelViewModel
{
- private readonly IDataModelConditionsVmFactory _dataModelConditionsVmFactory;
+ private readonly INodeVmFactory _nodeVmFactory;
private readonly IProfileEditorService _profileEditorService;
- private readonly INodeService _nodeService;
- private RenderProfileElement _renderProfileElement;
- private bool _displayStartHint;
+ private readonly IWindowManager _windowManager;
private bool _isEventCondition;
+ private RenderProfileElement _renderProfileElement;
- public DisplayConditionsViewModel(IProfileEditorService profileEditorService, INodeService nodeService, IDataModelConditionsVmFactory dataModelConditionsVmFactory)
+ public DisplayConditionsViewModel(IProfileEditorService profileEditorService, IWindowManager windowManager, INodeVmFactory nodeVmFactory)
{
_profileEditorService = profileEditorService;
- _nodeService = nodeService;
- _dataModelConditionsVmFactory = dataModelConditionsVmFactory;
-
- AvailableNodes = _nodeService.AvailableNodes;
- }
-
- private IEnumerable _availableNodes;
- public IEnumerable AvailableNodes
- {
- get => _availableNodes;
- set => SetAndNotify(ref _availableNodes, value);
- }
-
- public bool DisplayStartHint
- {
- get => _displayStartHint;
- set => SetAndNotify(ref _displayStartHint, value);
+ _windowManager = windowManager;
+ _nodeVmFactory = nodeVmFactory;
}
public bool IsEventCondition
@@ -111,19 +93,9 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions
base.OnClose();
}
- private void SelectedProfileEditorServiceOnSelectedProfileElementChanged(object sender, RenderProfileElementEventArgs e)
- {
- Update(e.RenderProfileElement);
- }
-
private void Update(RenderProfileElement renderProfileElement)
{
- if (RenderProfileElement != null)
- {
- //RenderProfileElement.DisplayCondition.ChildAdded -= DisplayConditionOnChildrenModified;
- //RenderProfileElement.DisplayCondition.ChildRemoved -= DisplayConditionOnChildrenModified;
- RenderProfileElement.Timeline.PropertyChanged -= TimelineOnPropertyChanged;
- }
+ if (RenderProfileElement != null) RenderProfileElement.Timeline.PropertyChanged -= TimelineOnPropertyChanged;
RenderProfileElement = renderProfileElement;
@@ -137,27 +109,32 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions
return;
}
- // Ensure the layer has a root display condition group
- //if (renderProfileElement.DisplayCondition == null)
- // renderProfileElement.DisplayCondition = new DataModelConditionGroup(null);
-
- if (renderProfileElement.DisplayCondition == null)
- renderProfileElement.DisplayCondition = new NodeScript("Display Condition (TODO)", "-");
-
- //List modules = new();
- //if (_profileEditorService.SelectedProfileConfiguration?.Module != null)
- // modules.Add(_profileEditorService.SelectedProfileConfiguration.Module);
- //ActiveItem = _dataModelConditionsVmFactory.DataModelConditionGroupViewModel(renderProfileElement.DisplayCondition, ConditionGroupType.General, modules);
- //ActiveItem.IsRootGroup = true;
-
- //DisplayStartHint = !RenderProfileElement.DisplayCondition.Children.Any();
- //IsEventCondition = RenderProfileElement.DisplayCondition.Children.Any(c => c is DataModelConditionEvent);
-
- //RenderProfileElement.DisplayCondition.ChildAdded += DisplayConditionOnChildrenModified;
- //RenderProfileElement.DisplayCondition.ChildRemoved += DisplayConditionOnChildrenModified;
RenderProfileElement.Timeline.PropertyChanged += TimelineOnPropertyChanged;
}
+ #region Event handlers
+
+ public void ScriptGridMouseUp(object sender, MouseButtonEventArgs e)
+ {
+ if (e.ChangedButton != MouseButton.Left)
+ return;
+
+ RenderProfileElement.DisplayCondition ??= new NodeScript("End Result", "");
+
+ _windowManager.ShowDialog(_nodeVmFactory.NodeScriptWindowViewModel(RenderProfileElement.DisplayCondition));
+ _profileEditorService.SaveSelectedProfileElement();
+ }
+
+ public void EventTriggerModeSelected()
+ {
+ _profileEditorService.SaveSelectedProfileElement();
+ }
+
+ private void SelectedProfileEditorServiceOnSelectedProfileElementChanged(object sender, RenderProfileElementEventArgs e)
+ {
+ Update(e.RenderProfileElement);
+ }
+
private void TimelineOnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
NotifyOfPropertyChange(nameof(DisplayContinuously));
@@ -165,15 +142,6 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions
NotifyOfPropertyChange(nameof(EventOverlapMode));
}
- private void DisplayConditionOnChildrenModified(object sender, EventArgs e)
- {
- //DisplayStartHint = !RenderProfileElement.DisplayCondition.Children.Any();
- //IsEventCondition = RenderProfileElement.DisplayCondition.Children.Any(c => c is DataModelConditionEvent);
- }
-
- public void EventTriggerModeSelected()
- {
- _profileEditorService.SaveSelectedProfileElement();
- }
+ #endregion
}
}
\ No newline at end of file
diff --git a/src/Artemis.UI/Screens/ProfileEditor/Windows/NodeScriptWindowView.xaml b/src/Artemis.UI/Screens/ProfileEditor/Windows/NodeScriptWindowView.xaml
new file mode 100644
index 000000000..5076ff482
--- /dev/null
+++ b/src/Artemis.UI/Screens/ProfileEditor/Windows/NodeScriptWindowView.xaml
@@ -0,0 +1,26 @@
+
+
+
+
+
diff --git a/src/Artemis.UI/Screens/ProfileEditor/Windows/NodeScriptWindowViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/Windows/NodeScriptWindowViewModel.cs
new file mode 100644
index 000000000..e0b6185dc
--- /dev/null
+++ b/src/Artemis.UI/Screens/ProfileEditor/Windows/NodeScriptWindowViewModel.cs
@@ -0,0 +1,18 @@
+using Artemis.Core;
+using Artemis.Core.Services;
+using Stylet;
+
+namespace Artemis.UI.Screens.ProfileEditor.Windows
+{
+ public class NodeScriptWindowViewModel : Screen
+ {
+ public NodeScriptWindowViewModel(NodeScript nodeScript, INodeService nodeService)
+ {
+ NodeScript = nodeScript;
+ AvailableNodes = new BindableCollection(nodeService.AvailableNodes);
+ }
+
+ public NodeScript NodeScript { get; }
+ public BindableCollection AvailableNodes { get; }
+ }
+}