mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 03:48:56 +00:00
Darthified code
This commit is contained in:
1 parent
5b80c1e4fe
commit
ae64db8a13
198 files changed
+1339
-1305
No files matched your search
@@ -39,13 +39,13 @@ namespace Artemis.UI.Screens.Modules
|
||||
|
||||
if (Module.ModuleTabs != null)
|
||||
{
|
||||
var moduleTabs = new List<ModuleTab>(Module.ModuleTabs);
|
||||
foreach (var moduleTab in moduleTabs.Where(m => m != null))
|
||||
List<ModuleTab> moduleTabs = new List<ModuleTab>(Module.ModuleTabs);
|
||||
foreach (ModuleTab moduleTab in moduleTabs.Where(m => m != null))
|
||||
{
|
||||
var module = new ConstructorArgument("module", Module);
|
||||
var displayName = new ConstructorArgument("displayName", DisplayName);
|
||||
ConstructorArgument module = new ConstructorArgument("module", Module);
|
||||
ConstructorArgument displayName = new ConstructorArgument("displayName", DisplayName);
|
||||
|
||||
var viewModel = (ModuleViewModel) Module.PluginInfo.Kernel.Get(moduleTab.Type, module, displayName);
|
||||
ModuleViewModel viewModel = (ModuleViewModel) Module.PluginInfo.Kernel.Get(moduleTab.Type, module, displayName);
|
||||
Items.Add(viewModel);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Artemis.Core;
|
||||
@@ -63,7 +64,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
|
||||
public void SelectBooleanOperator(string type)
|
||||
{
|
||||
var enumValue = Enum.Parse<BooleanOperator>(type);
|
||||
BooleanOperator enumValue = Enum.Parse<BooleanOperator>(type);
|
||||
DataModelConditionGroup.BooleanOperator = enumValue;
|
||||
NotifyOfPropertyChange(nameof(SelectedBooleanOperator));
|
||||
|
||||
@@ -108,12 +109,12 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
NotifyOfPropertyChange(nameof(SelectedBooleanOperator));
|
||||
|
||||
// Remove VMs of effects no longer applied on the layer
|
||||
var toRemove = Items.Where(c => !DataModelConditionGroup.Children.Contains(c.Model)).ToList();
|
||||
List<DataModelConditionViewModel> toRemove = Items.Where(c => !DataModelConditionGroup.Children.Contains(c.Model)).ToList();
|
||||
// Using RemoveRange breaks our lovely animations
|
||||
foreach (var DataModelConditionViewModel in toRemove)
|
||||
foreach (DataModelConditionViewModel DataModelConditionViewModel in toRemove)
|
||||
Items.Remove(DataModelConditionViewModel);
|
||||
|
||||
foreach (var childModel in Model.Children)
|
||||
foreach (DataModelConditionPart childModel in Model.Children)
|
||||
{
|
||||
if (Items.Any(c => c.Model == childModel))
|
||||
continue;
|
||||
@@ -137,7 +138,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var childViewModel in Items)
|
||||
foreach (DataModelConditionViewModel childViewModel in Items)
|
||||
childViewModel.Update();
|
||||
|
||||
if (IsRootGroup && Parent is DisplayConditionsViewModel displayConditionsViewModel)
|
||||
|
||||
+6
-6
@@ -99,7 +99,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
var listDataModel = GetListDataModel();
|
||||
DataModelVisualizationViewModel listDataModel = GetListDataModel();
|
||||
if (listDataModel.Children.Count == 1 && listDataModel.Children.First() is DataModelListPropertyViewModel)
|
||||
_isPrimitiveList = true;
|
||||
else
|
||||
@@ -114,7 +114,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
}
|
||||
|
||||
// Determine which types are currently supported
|
||||
var editors = _dataModelUIService.RegisteredDataModelEditors;
|
||||
IReadOnlyCollection<DataModelVisualizationRegistration> editors = _dataModelUIService.RegisteredDataModelEditors;
|
||||
_supportedInputTypes = editors.Select(e => e.SupportedType).ToList();
|
||||
_supportedInputTypes.AddRange(editors.Where(e => e.CompatibleConversionTypes != null).SelectMany(e => e.CompatibleConversionTypes));
|
||||
|
||||
@@ -123,7 +123,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
|
||||
public override void Update()
|
||||
{
|
||||
var listDataModelGuid = DataModelConditionListPredicate.DataModelConditionList.ListDataModel.PluginInfo.Guid;
|
||||
Guid listDataModelGuid = DataModelConditionListPredicate.DataModelConditionList.ListDataModel.PluginInfo.Guid;
|
||||
if (!_isPrimitiveList)
|
||||
{
|
||||
LeftSideSelectionViewModel.FilterTypes = _supportedInputTypes.ToArray();
|
||||
@@ -133,7 +133,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
);
|
||||
}
|
||||
|
||||
var leftSideType = _isPrimitiveList
|
||||
Type leftSideType = _isPrimitiveList
|
||||
? DataModelConditionListPredicate.DataModelConditionList.ListType
|
||||
: LeftSideSelectionViewModel.SelectedPropertyViewModel?.DataModelPath?.GetPropertyType();
|
||||
|
||||
@@ -235,8 +235,8 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
|
||||
private DataModelVisualizationViewModel GetListDataModel()
|
||||
{
|
||||
var dataModel = _dataModelUIService.GetPluginDataModelVisualization(_profileEditorService.GetCurrentModule(), true);
|
||||
var listDataModel = (DataModelListViewModel) dataModel.GetChildByPath(
|
||||
DataModelPropertiesViewModel dataModel = _dataModelUIService.GetPluginDataModelVisualization(_profileEditorService.GetCurrentModule(), true);
|
||||
DataModelListViewModel listDataModel = (DataModelListViewModel) dataModel.GetChildByPath(
|
||||
DataModelConditionListPredicate.DataModelConditionList.ListDataModel.PluginInfo.Guid,
|
||||
DataModelConditionListPredicate.DataModelConditionList.ListPropertyPath
|
||||
);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows.Media;
|
||||
using Artemis.Core;
|
||||
@@ -50,7 +51,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
|
||||
public void SelectListOperator(string type)
|
||||
{
|
||||
var enumValue = Enum.Parse<ListOperator>(type);
|
||||
ListOperator enumValue = Enum.Parse<ListOperator>(type);
|
||||
DataModelConditionList.ListOperator = enumValue;
|
||||
NotifyOfPropertyChange(nameof(SelectedListOperator));
|
||||
|
||||
@@ -110,24 +111,24 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
NotifyOfPropertyChange(nameof(SelectedListOperator));
|
||||
|
||||
// Remove VMs of effects no longer applied on the layer
|
||||
var toRemove = Items.Where(c => !DataModelConditionList.Children.Contains(c.Model)).ToList();
|
||||
List<DataModelConditionViewModel> toRemove = Items.Where(c => !DataModelConditionList.Children.Contains(c.Model)).ToList();
|
||||
// Using RemoveRange breaks our lovely animations
|
||||
foreach (var conditionViewModel in toRemove)
|
||||
foreach (DataModelConditionViewModel conditionViewModel in toRemove)
|
||||
Items.Remove(conditionViewModel);
|
||||
|
||||
foreach (var childModel in Model.Children)
|
||||
foreach (DataModelConditionPart childModel in Model.Children)
|
||||
{
|
||||
if (Items.Any(c => c.Model == childModel))
|
||||
continue;
|
||||
if (!(childModel is DataModelConditionGroup dataModelConditionGroup))
|
||||
continue;
|
||||
|
||||
var viewModel = _dataModelConditionsVmFactory.DataModelConditionGroupViewModel(dataModelConditionGroup, true);
|
||||
DataModelConditionGroupViewModel viewModel = _dataModelConditionsVmFactory.DataModelConditionGroupViewModel(dataModelConditionGroup, true);
|
||||
viewModel.IsRootGroup = true;
|
||||
Items.Add(viewModel);
|
||||
}
|
||||
|
||||
foreach (var childViewModel in Items)
|
||||
foreach (DataModelConditionViewModel childViewModel in Items)
|
||||
childViewModel.Update();
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -106,7 +106,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
LeftSideSelectionViewModel = _dataModelUIService.GetDynamicSelectionViewModel(_profileEditorService.GetCurrentModule());
|
||||
LeftSideSelectionViewModel.PropertySelected += LeftSideOnPropertySelected;
|
||||
// Determine which types are currently supported
|
||||
var editors = _dataModelUIService.RegisteredDataModelEditors;
|
||||
IReadOnlyCollection<DataModelVisualizationRegistration> editors = _dataModelUIService.RegisteredDataModelEditors;
|
||||
_supportedInputTypes = editors.Select(e => e.SupportedType).ToList();
|
||||
_supportedInputTypes.AddRange(editors.Where(e => e.CompatibleConversionTypes != null).SelectMany(e => e.CompatibleConversionTypes));
|
||||
|
||||
@@ -120,7 +120,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
DataModelConditionPredicate.LeftDataModel,
|
||||
DataModelConditionPredicate.LeftPropertyPath
|
||||
);
|
||||
var leftSideType = LeftSideSelectionViewModel.SelectedPropertyViewModel?.DataModelPath?.GetPropertyType();
|
||||
Type leftSideType = LeftSideSelectionViewModel.SelectedPropertyViewModel?.DataModelPath?.GetPropertyType();
|
||||
|
||||
// Get the supported operators
|
||||
Operators.Clear();
|
||||
@@ -135,7 +135,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
|
||||
}
|
||||
|
||||
// Ensure the right side has the proper VM
|
||||
var targetType = LeftSideSelectionViewModel?.SelectedPropertyViewModel?.DataModelPath?.GetPropertyType();
|
||||
Type targetType = LeftSideSelectionViewModel?.SelectedPropertyViewModel?.DataModelPath?.GetPropertyType();
|
||||
if (DataModelConditionPredicate.PredicateType == ProfileRightSideType.Dynamic && SelectedOperator.SupportsRightSide)
|
||||
{
|
||||
DisposeRightSideStatic();
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Dialogs
|
||||
|
||||
public void Accept()
|
||||
{
|
||||
var encoded = _profileService.ExportProfile(ProfileDescriptor);
|
||||
string encoded = _profileService.ExportProfile(ProfileDescriptor);
|
||||
Clipboard.SetText(encoded);
|
||||
_mainMessageQueue.Enqueue("Profile contents exported to clipboard.");
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Artemis.Core.Modules;
|
||||
using Artemis.Core;
|
||||
using Artemis.Core.Modules;
|
||||
using Artemis.Core.Services;
|
||||
using Artemis.UI.Shared.Services;
|
||||
using ICSharpCode.AvalonEdit.Document;
|
||||
@@ -32,7 +33,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Dialogs
|
||||
|
||||
public void Accept()
|
||||
{
|
||||
var descriptor = _profileService.ImportProfile(Document.Text, ProfileModule);
|
||||
ProfileDescriptor descriptor = _profileService.ImportProfile(Document.Text, ProfileModule);
|
||||
_mainMessageQueue.Enqueue("Profile imported.");
|
||||
Session.Close(descriptor);
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Dialogs
|
||||
|
||||
private void FrameworkElement_OnLoaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var textBox = (TextBox) sender;
|
||||
TextBox textBox = (TextBox) sender;
|
||||
Keyboard.Focus(textBox);
|
||||
textBox.SelectAll();
|
||||
}
|
||||
|
||||
+9
-8
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
using Artemis.Core;
|
||||
@@ -48,7 +49,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.Conditio
|
||||
{
|
||||
ConditionalDataBinding.ConditionsUpdated -= ConditionalDataBindingOnConditionsUpdated;
|
||||
|
||||
foreach (var conditionViewModel in ConditionViewModels)
|
||||
foreach (DataBindingConditionViewModel<TLayerProperty, TProperty> conditionViewModel in ConditionViewModels)
|
||||
conditionViewModel.Dispose();
|
||||
ConditionViewModels.Clear();
|
||||
}
|
||||
@@ -57,10 +58,10 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.Conditio
|
||||
|
||||
public void AddCondition(string type)
|
||||
{
|
||||
var condition = ConditionalDataBinding.AddCondition();
|
||||
DataBindingCondition<TLayerProperty, TProperty> condition = ConditionalDataBinding.AddCondition();
|
||||
|
||||
// Find the VM of the new condition
|
||||
var viewModel = ConditionViewModels.First(c => c.DataBindingCondition == condition);
|
||||
DataBindingConditionViewModel<TLayerProperty, TProperty> viewModel = ConditionViewModels.First(c => c.DataBindingCondition == condition);
|
||||
viewModel.ActiveItem.AddCondition(type);
|
||||
|
||||
_profileEditorService.UpdateSelectedProfileElement();
|
||||
@@ -71,15 +72,15 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.Conditio
|
||||
_updating = true;
|
||||
|
||||
// Remove old VMs
|
||||
var toRemove = ConditionViewModels.Where(c => !ConditionalDataBinding.Conditions.Contains(c.DataBindingCondition)).ToList();
|
||||
foreach (var dataBindingConditionViewModel in toRemove)
|
||||
List<DataBindingConditionViewModel<TLayerProperty, TProperty>> toRemove = ConditionViewModels.Where(c => !ConditionalDataBinding.Conditions.Contains(c.DataBindingCondition)).ToList();
|
||||
foreach (DataBindingConditionViewModel<TLayerProperty, TProperty> dataBindingConditionViewModel in toRemove)
|
||||
{
|
||||
ConditionViewModels.Remove(dataBindingConditionViewModel);
|
||||
dataBindingConditionViewModel.Dispose();
|
||||
}
|
||||
|
||||
// Add missing VMs
|
||||
foreach (var condition in ConditionalDataBinding.Conditions)
|
||||
foreach (DataBindingCondition<TLayerProperty, TProperty> condition in ConditionalDataBinding.Conditions)
|
||||
{
|
||||
if (ConditionViewModels.All(c => c.DataBindingCondition != condition))
|
||||
ConditionViewModels.Add(_dataBindingsVmFactory.DataBindingConditionViewModel(condition));
|
||||
@@ -103,9 +104,9 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.Conditio
|
||||
if (_updating || e.Action != NotifyCollectionChangedAction.Add)
|
||||
return;
|
||||
|
||||
for (var index = 0; index < ConditionViewModels.Count; index++)
|
||||
for (int index = 0; index < ConditionViewModels.Count; index++)
|
||||
{
|
||||
var conditionViewModel = ConditionViewModels[index];
|
||||
DataBindingConditionViewModel<TLayerProperty, TProperty> conditionViewModel = ConditionViewModels[index];
|
||||
conditionViewModel.DataBindingCondition.Order = index + 1;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -226,7 +226,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings
|
||||
Registration.DataBinding.Update(0.04);
|
||||
if (ActiveItem.SupportsTestValue)
|
||||
{
|
||||
var currentValue = Registration.Converter.ConvertFromObject(ActiveItem?.GetTestValue() ?? default(TProperty));
|
||||
TProperty currentValue = Registration.Converter.ConvertFromObject(ActiveItem?.GetTestValue() ?? default(TProperty));
|
||||
TestInputValue.UpdateValue(currentValue);
|
||||
TestResultValue.UpdateValue(Registration.DataBinding != null ? Registration.DataBinding.GetValue(currentValue) : default);
|
||||
}
|
||||
|
||||
+5
-3
@@ -1,4 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Artemis.Core;
|
||||
using Artemis.UI.Ninject.Factories;
|
||||
using Artemis.UI.Shared.Services;
|
||||
using Stylet;
|
||||
@@ -36,15 +38,15 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings
|
||||
{
|
||||
Items.Clear();
|
||||
|
||||
var layerProperty = _profileEditorService.SelectedDataBinding;
|
||||
ILayerProperty layerProperty = _profileEditorService.SelectedDataBinding;
|
||||
if (layerProperty == null)
|
||||
return;
|
||||
|
||||
var registrations = layerProperty.GetAllDataBindingRegistrations();
|
||||
List<IDataBindingRegistration> registrations = layerProperty.GetAllDataBindingRegistrations();
|
||||
|
||||
// Create a data binding VM for each data bindable property. These VMs will be responsible for retrieving
|
||||
// and creating the actual data bindings
|
||||
foreach (var registration in registrations)
|
||||
foreach (IDataBindingRegistration registration in registrations)
|
||||
Items.Add(_dataBindingsVmFactory.DataBindingViewModel(registration));
|
||||
|
||||
SelectedItemIndex = 0;
|
||||
|
||||
+7
-6
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Artemis.Core;
|
||||
using Artemis.Core.Services;
|
||||
@@ -92,7 +93,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.DirectDa
|
||||
{
|
||||
if (Modifier.ParameterType == ProfileRightSideType.Dynamic)
|
||||
{
|
||||
var sourceType = Modifier.DirectDataBinding.GetSourceType();
|
||||
Type sourceType = Modifier.DirectDataBinding.GetSourceType();
|
||||
Modifier.UpdateParameter((Modifier.ModifierType.ParameterType ?? sourceType).GetDefault());
|
||||
}
|
||||
else
|
||||
@@ -116,7 +117,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.DirectDa
|
||||
|
||||
private void Update()
|
||||
{
|
||||
var sourceType = Modifier.DirectDataBinding.GetSourceType();
|
||||
Type sourceType = Modifier.DirectDataBinding.GetSourceType();
|
||||
if (sourceType == null)
|
||||
throw new ArtemisUIException("Cannot use a data binding modifier VM for a data binding without a source");
|
||||
|
||||
@@ -150,11 +151,11 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.DirectDa
|
||||
}
|
||||
|
||||
// Modifier type
|
||||
var root = new ModifierTypeCategoryViewModel(null, null);
|
||||
var modifierTypes = _dataBindingService.GetCompatibleModifierTypes(sourceType).GroupBy(t => t.Category);
|
||||
foreach (var dataBindingModifierTypes in modifierTypes)
|
||||
ModifierTypeCategoryViewModel root = new ModifierTypeCategoryViewModel(null, null);
|
||||
IEnumerable<IGrouping<string, DataBindingModifierType>> modifierTypes = _dataBindingService.GetCompatibleModifierTypes(sourceType).GroupBy(t => t.Category);
|
||||
foreach (IGrouping<string, DataBindingModifierType> dataBindingModifierTypes in modifierTypes)
|
||||
{
|
||||
var viewModels = dataBindingModifierTypes.Select(t => new ModifierTypeViewModel(t));
|
||||
IEnumerable<ModifierTypeViewModel> viewModels = dataBindingModifierTypes.Select(t => new ModifierTypeViewModel(t));
|
||||
if (dataBindingModifierTypes.Key == null)
|
||||
root.Children.AddRange(viewModels);
|
||||
else
|
||||
|
||||
+7
-6
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
using Artemis.Core;
|
||||
@@ -75,7 +76,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.DirectDa
|
||||
TargetSelectionViewModel.Dispose();
|
||||
DirectDataBinding.ModifiersUpdated -= DirectDataBindingOnModifiersUpdated;
|
||||
|
||||
foreach (var dataBindingModifierViewModel in ModifierViewModels)
|
||||
foreach (DataBindingModifierViewModel<TLayerProperty, TProperty> dataBindingModifierViewModel in ModifierViewModels)
|
||||
dataBindingModifierViewModel.Dispose();
|
||||
ModifierViewModels.Clear();
|
||||
}
|
||||
@@ -96,9 +97,9 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.DirectDa
|
||||
if (_updating || e.Action != NotifyCollectionChangedAction.Add)
|
||||
return;
|
||||
|
||||
for (var index = 0; index < ModifierViewModels.Count; index++)
|
||||
for (int index = 0; index < ModifierViewModels.Count; index++)
|
||||
{
|
||||
var dataBindingModifierViewModel = ModifierViewModels[index];
|
||||
DataBindingModifierViewModel<TLayerProperty, TProperty> dataBindingModifierViewModel = ModifierViewModels[index];
|
||||
dataBindingModifierViewModel.Modifier.Order = index + 1;
|
||||
}
|
||||
|
||||
@@ -132,15 +133,15 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings.DirectDa
|
||||
_updating = true;
|
||||
|
||||
// Remove old VMs
|
||||
var toRemove = ModifierViewModels.Where(m => !DirectDataBinding.Modifiers.Contains(m.Modifier)).ToList();
|
||||
foreach (var modifierViewModel in toRemove)
|
||||
List<DataBindingModifierViewModel<TLayerProperty, TProperty>> toRemove = ModifierViewModels.Where(m => !DirectDataBinding.Modifiers.Contains(m.Modifier)).ToList();
|
||||
foreach (DataBindingModifierViewModel<TLayerProperty, TProperty> modifierViewModel in toRemove)
|
||||
{
|
||||
ModifierViewModels.Remove(modifierViewModel);
|
||||
modifierViewModel.Dispose();
|
||||
}
|
||||
|
||||
// Add missing VMs
|
||||
foreach (var modifier in DirectDataBinding.Modifiers)
|
||||
foreach (DataBindingModifier<TLayerProperty, TProperty> modifier in DirectDataBinding.Modifiers)
|
||||
{
|
||||
if (ModifierViewModels.All(m => m.Modifier != modifier))
|
||||
ModifierViewModels.Add(_dataBindingsVmFactory.DataBindingModifierViewModel(modifier));
|
||||
|
||||
+6
-5
@@ -1,4 +1,5 @@
|
||||
using System.ComponentModel;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Artemis.Core;
|
||||
@@ -34,14 +35,14 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.LayerEffects
|
||||
|
||||
public void PopulateDescriptors()
|
||||
{
|
||||
var layerBrushProviders = _pluginService.GetPluginsOfType<LayerEffectProvider>();
|
||||
var descriptors = layerBrushProviders.SelectMany(l => l.LayerEffectDescriptors).ToList();
|
||||
List<LayerEffectProvider> layerBrushProviders = _pluginService.GetPluginsOfType<LayerEffectProvider>();
|
||||
List<LayerEffectDescriptor> descriptors = layerBrushProviders.SelectMany(l => l.LayerEffectDescriptors).ToList();
|
||||
Items.AddRange(descriptors.Except(Items));
|
||||
Items.RemoveRange(Items.Except(descriptors));
|
||||
|
||||
// Sort by display name
|
||||
var index = 0;
|
||||
foreach (var layerEffectDescriptor in Items.OrderBy(d => d.DisplayName).ToList())
|
||||
int index = 0;
|
||||
foreach (LayerEffectDescriptor layerEffectDescriptor in Items.OrderBy(d => d.DisplayName).ToList())
|
||||
{
|
||||
if (Items.IndexOf(layerEffectDescriptor) != index)
|
||||
((BindableCollection<LayerEffectDescriptor>) Items).Move(Items.IndexOf(layerEffectDescriptor), index);
|
||||
|
||||
@@ -7,6 +7,7 @@ using System.Windows;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using Artemis.Core;
|
||||
using Artemis.Core.LayerEffects;
|
||||
using Artemis.Core.Services;
|
||||
using Artemis.UI.Ninject.Factories;
|
||||
using Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings;
|
||||
@@ -230,8 +231,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
|
||||
public List<LayerPropertyGroupViewModel> GetAllLayerPropertyGroupViewModels()
|
||||
{
|
||||
var groups = LayerPropertyGroups.ToList();
|
||||
var toAdd = groups.SelectMany(g => g.Children).Where(g => g is LayerPropertyGroupViewModel).Cast<LayerPropertyGroupViewModel>().ToList();
|
||||
List<LayerPropertyGroupViewModel> groups = LayerPropertyGroups.ToList();
|
||||
List<LayerPropertyGroupViewModel> toAdd = groups.SelectMany(g => g.Children).Where(g => g is LayerPropertyGroupViewModel).Cast<LayerPropertyGroupViewModel>().ToList();
|
||||
groups.AddRange(toAdd);
|
||||
return groups;
|
||||
}
|
||||
@@ -245,7 +246,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
SelectedLayer.LayerBrushUpdated -= SelectedLayerOnLayerBrushUpdated;
|
||||
|
||||
// Clear old properties
|
||||
foreach (var layerPropertyGroupViewModel in LayerPropertyGroups)
|
||||
foreach (LayerPropertyGroupViewModel layerPropertyGroupViewModel in LayerPropertyGroups)
|
||||
layerPropertyGroupViewModel.Dispose();
|
||||
LayerPropertyGroups.Clear();
|
||||
_brushPropertyGroup = null;
|
||||
@@ -285,7 +286,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
if (SelectedLayer == null)
|
||||
return;
|
||||
|
||||
var hideRenderRelatedProperties = SelectedLayer?.LayerBrush != null && !SelectedLayer.LayerBrush.SupportsTransformation;
|
||||
bool hideRenderRelatedProperties = SelectedLayer?.LayerBrush != null && !SelectedLayer.LayerBrush.SupportsTransformation;
|
||||
|
||||
SelectedLayer.General.ShapeType.IsHidden = hideRenderRelatedProperties;
|
||||
SelectedLayer.General.ResizeMode.IsHidden = hideRenderRelatedProperties;
|
||||
@@ -313,14 +314,14 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
return;
|
||||
|
||||
// Remove VMs of effects no longer applied on the layer
|
||||
var toRemove = LayerPropertyGroups
|
||||
List<LayerPropertyGroupViewModel> toRemove = LayerPropertyGroups
|
||||
.Where(l => l.LayerPropertyGroup.LayerEffect != null && !SelectedProfileElement.LayerEffects.Contains(l.LayerPropertyGroup.LayerEffect))
|
||||
.ToList();
|
||||
LayerPropertyGroups.RemoveRange(toRemove);
|
||||
foreach (var layerPropertyGroupViewModel in toRemove)
|
||||
foreach (LayerPropertyGroupViewModel layerPropertyGroupViewModel in toRemove)
|
||||
layerPropertyGroupViewModel.Dispose();
|
||||
|
||||
foreach (var layerEffect in SelectedProfileElement.LayerEffects)
|
||||
foreach (BaseLayerEffect layerEffect in SelectedProfileElement.LayerEffects)
|
||||
{
|
||||
if (LayerPropertyGroups.Any(l => l.LayerPropertyGroup.LayerEffect == layerEffect) || layerEffect.BaseProperties == null)
|
||||
continue;
|
||||
@@ -334,26 +335,26 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
private void SortProperties()
|
||||
{
|
||||
// Get all non-effect properties
|
||||
var nonEffectProperties = LayerPropertyGroups
|
||||
List<LayerPropertyGroupViewModel> nonEffectProperties = LayerPropertyGroups
|
||||
.Where(l => l.TreeGroupViewModel.GroupType != LayerEffectRoot)
|
||||
.ToList();
|
||||
// Order the effects
|
||||
var effectProperties = LayerPropertyGroups
|
||||
List<LayerPropertyGroupViewModel> effectProperties = LayerPropertyGroups
|
||||
.Where(l => l.TreeGroupViewModel.GroupType == LayerEffectRoot)
|
||||
.OrderBy(l => l.LayerPropertyGroup.LayerEffect.Order)
|
||||
.ToList();
|
||||
|
||||
// Put the non-effect properties in front
|
||||
for (var index = 0; index < nonEffectProperties.Count; index++)
|
||||
for (int index = 0; index < nonEffectProperties.Count; index++)
|
||||
{
|
||||
var layerPropertyGroupViewModel = nonEffectProperties[index];
|
||||
LayerPropertyGroupViewModel layerPropertyGroupViewModel = nonEffectProperties[index];
|
||||
LayerPropertyGroups.Move(LayerPropertyGroups.IndexOf(layerPropertyGroupViewModel), index);
|
||||
}
|
||||
|
||||
// Put the effect properties after, sorted by their order
|
||||
for (var index = 0; index < effectProperties.Count; index++)
|
||||
for (int index = 0; index < effectProperties.Count; index++)
|
||||
{
|
||||
var layerPropertyGroupViewModel = effectProperties[index];
|
||||
LayerPropertyGroupViewModel layerPropertyGroupViewModel = effectProperties[index];
|
||||
LayerPropertyGroups.Move(LayerPropertyGroups.IndexOf(layerPropertyGroupViewModel), index + nonEffectProperties.Count);
|
||||
}
|
||||
}
|
||||
@@ -378,8 +379,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
if (dropInfo.InsertIndex == 1)
|
||||
return;
|
||||
|
||||
var source = dropInfo.Data as LayerPropertyGroupViewModel;
|
||||
var target = dropInfo.TargetItem as LayerPropertyGroupViewModel;
|
||||
LayerPropertyGroupViewModel source = dropInfo.Data as LayerPropertyGroupViewModel;
|
||||
LayerPropertyGroupViewModel target = dropInfo.TargetItem as LayerPropertyGroupViewModel;
|
||||
|
||||
if (source == target ||
|
||||
target?.TreeGroupViewModel.GroupType != LayerEffectRoot ||
|
||||
@@ -397,8 +398,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
if (dropInfo.InsertIndex == 1)
|
||||
return;
|
||||
|
||||
var source = dropInfo.Data as LayerPropertyGroupViewModel;
|
||||
var target = dropInfo.TargetItem as LayerPropertyGroupViewModel;
|
||||
LayerPropertyGroupViewModel source = dropInfo.Data as LayerPropertyGroupViewModel;
|
||||
LayerPropertyGroupViewModel target = dropInfo.TargetItem as LayerPropertyGroupViewModel;
|
||||
|
||||
if (source == target ||
|
||||
target?.TreeGroupViewModel.GroupType != LayerEffectRoot ||
|
||||
@@ -430,8 +431,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
|
||||
private void ApplyCurrentEffectsOrder()
|
||||
{
|
||||
var order = 1;
|
||||
foreach (var groupViewModel in LayerPropertyGroups.Where(p => p.TreeGroupViewModel.GroupType == LayerEffectRoot))
|
||||
int order = 1;
|
||||
foreach (LayerPropertyGroupViewModel groupViewModel in LayerPropertyGroups.Where(p => p.TreeGroupViewModel.GroupType == LayerEffectRoot))
|
||||
{
|
||||
groupViewModel.UpdateOrder(order);
|
||||
order++;
|
||||
@@ -486,15 +487,15 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
|
||||
public void GoToPreviousFrame()
|
||||
{
|
||||
var frameTime = 1000.0 / SettingsService.GetSetting("Core.TargetFrameRate", 25).Value;
|
||||
var newTime = Math.Max(0, Math.Round((ProfileEditorService.CurrentTime.TotalMilliseconds - frameTime) / frameTime) * frameTime);
|
||||
double frameTime = 1000.0 / SettingsService.GetSetting("Core.TargetFrameRate", 25).Value;
|
||||
double newTime = Math.Max(0, Math.Round((ProfileEditorService.CurrentTime.TotalMilliseconds - frameTime) / frameTime) * frameTime);
|
||||
ProfileEditorService.CurrentTime = TimeSpan.FromMilliseconds(newTime);
|
||||
}
|
||||
|
||||
public void GoToNextFrame()
|
||||
{
|
||||
var frameTime = 1000.0 / SettingsService.GetSetting("Core.TargetFrameRate", 25).Value;
|
||||
var newTime = Math.Round((ProfileEditorService.CurrentTime.TotalMilliseconds + frameTime) / frameTime) * frameTime;
|
||||
double frameTime = 1000.0 / SettingsService.GetSetting("Core.TargetFrameRate", 25).Value;
|
||||
double newTime = Math.Round((ProfileEditorService.CurrentTime.TotalMilliseconds + frameTime) / frameTime) * frameTime;
|
||||
newTime = Math.Min(newTime, CalculateEndTime().TotalMilliseconds);
|
||||
ProfileEditorService.CurrentTime = TimeSpan.FromMilliseconds(newTime);
|
||||
}
|
||||
@@ -522,7 +523,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
|
||||
private TimeSpan CalculateEndTime()
|
||||
{
|
||||
var keyframeViewModels = LayerPropertyGroups.SelectMany(g => g.GetAllKeyframeViewModels(false)).ToList();
|
||||
List<ITimelineKeyframeViewModel> keyframeViewModels = LayerPropertyGroups.SelectMany(g => g.GetAllKeyframeViewModels(false)).ToList();
|
||||
|
||||
// If there are no keyframes, don't stop at all
|
||||
if (!keyframeViewModels.Any())
|
||||
@@ -533,7 +534,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
|
||||
private TimeSpan GetCurrentSegmentStart()
|
||||
{
|
||||
var current = ProfileEditorService.CurrentTime;
|
||||
TimeSpan current = ProfileEditorService.CurrentTime;
|
||||
if (current < StartTimelineSegmentViewModel.SegmentEnd)
|
||||
return StartTimelineSegmentViewModel.SegmentStart;
|
||||
if (current < MainTimelineSegmentViewModel.SegmentEnd)
|
||||
@@ -546,7 +547,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
|
||||
private TimeSpan GetCurrentSegmentEnd()
|
||||
{
|
||||
var current = ProfileEditorService.CurrentTime;
|
||||
TimeSpan current = ProfileEditorService.CurrentTime;
|
||||
if (current < StartTimelineSegmentViewModel.SegmentEnd)
|
||||
return StartTimelineSegmentViewModel.SegmentEnd;
|
||||
if (current < MainTimelineSegmentViewModel.SegmentEnd)
|
||||
@@ -561,7 +562,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
{
|
||||
Execute.PostToUIThread(() =>
|
||||
{
|
||||
var newTime = ProfileEditorService.CurrentTime.Add(TimeSpan.FromSeconds(e.DeltaTime));
|
||||
TimeSpan newTime = ProfileEditorService.CurrentTime.Add(TimeSpan.FromSeconds(e.DeltaTime));
|
||||
if (SelectedProfileElement != null)
|
||||
{
|
||||
if (Repeating && RepeatTimeline)
|
||||
@@ -604,9 +605,9 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
if (e.LeftButton == MouseButtonState.Pressed)
|
||||
{
|
||||
// Get the parent grid, need that for our position
|
||||
var parent = (IInputElement) VisualTreeHelper.GetParent((DependencyObject) sender);
|
||||
var x = Math.Max(0, e.GetPosition(parent).X);
|
||||
var newTime = TimeSpan.FromSeconds(x / ProfileEditorService.PixelsPerSecond);
|
||||
IInputElement parent = (IInputElement) VisualTreeHelper.GetParent((DependencyObject) sender);
|
||||
double x = Math.Max(0, e.GetPosition(parent).X);
|
||||
TimeSpan newTime = TimeSpan.FromSeconds(x / ProfileEditorService.PixelsPerSecond);
|
||||
|
||||
// Round the time to something that fits the current zoom level
|
||||
if (ProfileEditorService.PixelsPerSecond < 200)
|
||||
@@ -619,8 +620,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
// If holding down shift, snap to the closest segment or keyframe
|
||||
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
|
||||
{
|
||||
var snapTimes = LayerPropertyGroups.SelectMany(g => g.GetAllKeyframeViewModels(true)).Select(k => k.Position).ToList();
|
||||
var snappedTime = ProfileEditorService.SnapToTimeline(newTime, TimeSpan.FromMilliseconds(1000f / ProfileEditorService.PixelsPerSecond * 5), true, false, snapTimes);
|
||||
List<TimeSpan> snapTimes = LayerPropertyGroups.SelectMany(g => g.GetAllKeyframeViewModels(true)).Select(k => k.Position).ToList();
|
||||
TimeSpan snappedTime = ProfileEditorService.SnapToTimeline(newTime, TimeSpan.FromMilliseconds(1000f / ProfileEditorService.PixelsPerSecond * 5), true, false, snapTimes);
|
||||
ProfileEditorService.CurrentTime = snappedTime;
|
||||
return;
|
||||
}
|
||||
@@ -628,7 +629,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
// If holding down control, round to the closest 50ms
|
||||
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
|
||||
{
|
||||
var roundedTime = TimeSpan.FromMilliseconds(Math.Round(newTime.TotalMilliseconds / 50.0) * 50.0);
|
||||
TimeSpan roundedTime = TimeSpan.FromMilliseconds(Math.Round(newTime.TotalMilliseconds / 50.0) * 50.0);
|
||||
ProfileEditorService.CurrentTime = roundedTime;
|
||||
return;
|
||||
}
|
||||
|
||||
+11
-10
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using Artemis.Core;
|
||||
using Artemis.UI.Ninject.Factories;
|
||||
using Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline;
|
||||
@@ -56,7 +57,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
{
|
||||
TimelineGroupViewModel.Dispose();
|
||||
LayerPropertyGroup.VisibilityChanged -= LayerPropertyGroupOnVisibilityChanged;
|
||||
foreach (var child in Children)
|
||||
foreach (PropertyChangedBase child in Children)
|
||||
{
|
||||
if (child is IDisposable disposableChild)
|
||||
disposableChild.Dispose();
|
||||
@@ -71,11 +72,11 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
|
||||
public List<ITimelineKeyframeViewModel> GetAllKeyframeViewModels(bool expandedOnly)
|
||||
{
|
||||
var result = new List<ITimelineKeyframeViewModel>();
|
||||
List<ITimelineKeyframeViewModel> result = new List<ITimelineKeyframeViewModel>();
|
||||
if (expandedOnly && !IsExpanded)
|
||||
return result;
|
||||
|
||||
foreach (var child in Children)
|
||||
foreach (PropertyChangedBase child in Children)
|
||||
{
|
||||
if (child is LayerPropertyViewModel layerPropertyViewModel)
|
||||
result.AddRange(layerPropertyViewModel.TimelinePropertyViewModel.GetAllKeyframeViewModels());
|
||||
@@ -94,7 +95,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
/// <param name="end">The position at which to start removing keyframes, if null this will end at the last keyframe</param>
|
||||
public virtual void WipeKeyframes(TimeSpan? start, TimeSpan? end)
|
||||
{
|
||||
foreach (var child in Children)
|
||||
foreach (PropertyChangedBase child in Children)
|
||||
{
|
||||
if (child is LayerPropertyViewModel layerPropertyViewModel)
|
||||
layerPropertyViewModel.TimelinePropertyViewModel.WipeKeyframes(start, end);
|
||||
@@ -114,7 +115,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
/// <param name="amount">The amount to shift the keyframes for</param>
|
||||
public void ShiftKeyframes(TimeSpan? start, TimeSpan? end, TimeSpan amount)
|
||||
{
|
||||
foreach (var child in Children)
|
||||
foreach (PropertyChangedBase child in Children)
|
||||
{
|
||||
if (child is LayerPropertyViewModel layerPropertyViewModel)
|
||||
layerPropertyViewModel.TimelinePropertyViewModel.ShiftKeyframes(start, end, amount);
|
||||
@@ -134,16 +135,16 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties
|
||||
{
|
||||
// Get all properties and property groups and create VMs for them
|
||||
// The group has methods for getting this without reflection but then we lose the order of the properties as they are defined on the group
|
||||
foreach (var propertyInfo in LayerPropertyGroup.GetType().GetProperties())
|
||||
foreach (PropertyInfo propertyInfo in LayerPropertyGroup.GetType().GetProperties())
|
||||
{
|
||||
var propertyAttribute = (PropertyDescriptionAttribute) Attribute.GetCustomAttribute(propertyInfo, typeof(PropertyDescriptionAttribute));
|
||||
var groupAttribute = (PropertyGroupDescriptionAttribute) Attribute.GetCustomAttribute(propertyInfo, typeof(PropertyGroupDescriptionAttribute));
|
||||
var value = propertyInfo.GetValue(LayerPropertyGroup);
|
||||
PropertyDescriptionAttribute propertyAttribute = (PropertyDescriptionAttribute) Attribute.GetCustomAttribute(propertyInfo, typeof(PropertyDescriptionAttribute));
|
||||
PropertyGroupDescriptionAttribute groupAttribute = (PropertyGroupDescriptionAttribute) Attribute.GetCustomAttribute(propertyInfo, typeof(PropertyGroupDescriptionAttribute));
|
||||
object? value = propertyInfo.GetValue(LayerPropertyGroup);
|
||||
|
||||
// Create VMs for properties on the group
|
||||
if (propertyAttribute != null && value is ILayerProperty layerProperty)
|
||||
{
|
||||
var layerPropertyViewModel = _layerPropertyVmFactory.LayerPropertyViewModel(layerProperty);
|
||||
LayerPropertyViewModel layerPropertyViewModel = _layerPropertyVmFactory.LayerPropertyViewModel(layerProperty);
|
||||
// After creation ensure a supported input VM was found, if not, discard the VM
|
||||
if (!layerPropertyViewModel.TreePropertyViewModel.HasPropertyInputViewModel)
|
||||
layerPropertyViewModel.Dispose();
|
||||
|
||||
+16
-16
@@ -71,23 +71,23 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline.Controls
|
||||
base.OnRender(drawingContext);
|
||||
UpdateTimeScale();
|
||||
|
||||
var linePen = new Pen(Fill, 1);
|
||||
var width = HorizontalOffset + VisibleWidth;
|
||||
var frameStart = 0;
|
||||
Pen linePen = new Pen(Fill, 1);
|
||||
double width = HorizontalOffset + VisibleWidth;
|
||||
int frameStart = 0;
|
||||
|
||||
var units = PixelsPerSecond / _subd1;
|
||||
var offsetUnits = frameStart * PixelsPerSecond % units;
|
||||
double units = PixelsPerSecond / _subd1;
|
||||
double offsetUnits = frameStart * PixelsPerSecond % units;
|
||||
|
||||
// Labels
|
||||
var count = (width + offsetUnits) / units;
|
||||
for (var i = 0; i < count; i++)
|
||||
double count = (width + offsetUnits) / units;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
var x = i * units - offsetUnits;
|
||||
double x = i * units - offsetUnits;
|
||||
// Add a 100px margin to allow the text to partially render when needed
|
||||
if (x < HorizontalOffset - 100 || x > HorizontalOffset + width)
|
||||
continue;
|
||||
|
||||
var t = TimeSpan.FromSeconds((i * units - offsetUnits) / PixelsPerSecond + frameStart);
|
||||
TimeSpan t = TimeSpan.FromSeconds((i * units - offsetUnits) / PixelsPerSecond + frameStart);
|
||||
// 0.00 is always formatted as 0.00
|
||||
if (t == TimeSpan.Zero)
|
||||
RenderLabel(drawingContext, "0.00", x);
|
||||
@@ -102,9 +102,9 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline.Controls
|
||||
// Large ticks
|
||||
units = PixelsPerSecond / _subd2;
|
||||
count = (width + offsetUnits) / units;
|
||||
for (var i = 0; i < count; i++)
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
var x = i * units - offsetUnits;
|
||||
double x = i * units - offsetUnits;
|
||||
if (x == 0 && OffsetFirstValue)
|
||||
drawingContext.DrawLine(linePen, new Point(1, 20), new Point(1, 30));
|
||||
else if (x > HorizontalOffset && x < HorizontalOffset + width)
|
||||
@@ -112,13 +112,13 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline.Controls
|
||||
}
|
||||
|
||||
// Small ticks
|
||||
var mul = _subd3 / _subd2;
|
||||
double mul = _subd3 / _subd2;
|
||||
units = PixelsPerSecond / _subd3;
|
||||
count = (width + offsetUnits) / units;
|
||||
for (var i = 0; i < count; i++)
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
if (Math.Abs(i % mul) < 0.001) continue;
|
||||
var x = i * units - offsetUnits;
|
||||
double x = i * units - offsetUnits;
|
||||
if (x > HorizontalOffset && x < HorizontalOffset + width)
|
||||
drawingContext.DrawLine(linePen, new Point(x, 25), new Point(x, 30));
|
||||
}
|
||||
@@ -126,8 +126,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline.Controls
|
||||
|
||||
private void RenderLabel(DrawingContext drawingContext, string text, double x)
|
||||
{
|
||||
var typeFace = new Typeface(FontFamily, new FontStyle(), new FontWeight(), new FontStretch());
|
||||
var formattedText = new FormattedText(text, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, typeFace, 9, Fill, null, VisualTreeHelper.GetDpi(this).PixelsPerDip);
|
||||
Typeface typeFace = new Typeface(FontFamily, new FontStyle(), new FontWeight(), new FontStretch());
|
||||
FormattedText formattedText = new FormattedText(text, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, typeFace, 9, Fill, null, VisualTreeHelper.GetDpi(this).PixelsPerDip);
|
||||
if (x == 0 && OffsetFirstValue)
|
||||
drawingContext.DrawText(formattedText, new Point(2, 5));
|
||||
else
|
||||
|
||||
+1
-1
@@ -71,7 +71,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline.Dialogs
|
||||
|
||||
public static TimeSpan CreateTime(string s)
|
||||
{
|
||||
var parts = s.Split(".");
|
||||
string[] parts = s.Split(".");
|
||||
|
||||
// Only seconds provided
|
||||
if (parts.Length == 1)
|
||||
|
||||
+3
-3
@@ -19,10 +19,10 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
Description = easingFunction.Humanize();
|
||||
|
||||
EasingPoints = new PointCollection();
|
||||
for (var i = 1; i <= 10; i++)
|
||||
for (int i = 1; i <= 10; i++)
|
||||
{
|
||||
var x = i;
|
||||
var y = Easings.Interpolate(i / 10.0, EasingFunction) * 10;
|
||||
int x = i;
|
||||
double y = Easings.Interpolate(i / 10.0, EasingFunction) * 10;
|
||||
EasingPoints.Add(new Point(x, y));
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -55,7 +55,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
_profileEditorService.PixelsPerSecondChanged -= ProfileEditorServiceOnPixelsPerSecondChanged;
|
||||
LayerPropertyKeyframe.PropertyChanged -= LayerPropertyKeyframeOnPropertyChanged;
|
||||
|
||||
foreach (var timelineEasingViewModel in EasingViewModels)
|
||||
foreach (TimelineEasingViewModel timelineEasingViewModel in EasingViewModels)
|
||||
timelineEasingViewModel.EasingModeSelected -= TimelineEasingViewModelOnEasingModeSelected;
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
.Cast<Easings.Functions>()
|
||||
.Select(e => new TimelineEasingViewModel(e, e == LayerPropertyKeyframe.EasingFunction)));
|
||||
|
||||
foreach (var timelineEasingViewModel in EasingViewModels)
|
||||
foreach (TimelineEasingViewModel timelineEasingViewModel in EasingViewModels)
|
||||
timelineEasingViewModel.EasingModeSelected += TimelineEasingViewModelOnEasingModeSelected;
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
{
|
||||
LayerPropertyKeyframe.EasingFunction = easingViewModel.EasingFunction;
|
||||
// Set every selection to false except on the VM that made the change
|
||||
foreach (var propertyTrackEasingViewModel in EasingViewModels.Where(vm => vm != easingViewModel))
|
||||
foreach (TimelineEasingViewModel propertyTrackEasingViewModel in EasingViewModels.Where(vm => vm != easingViewModel))
|
||||
propertyTrackEasingViewModel.IsEasingModeSelected = false;
|
||||
|
||||
_profileEditorService.UpdateSelectedProfileElement();
|
||||
@@ -162,14 +162,14 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
|
||||
public void Copy()
|
||||
{
|
||||
var newKeyframe = new LayerPropertyKeyframe<T>(
|
||||
LayerPropertyKeyframe<T> newKeyframe = new LayerPropertyKeyframe<T>(
|
||||
LayerPropertyKeyframe.Value,
|
||||
LayerPropertyKeyframe.Position,
|
||||
LayerPropertyKeyframe.EasingFunction,
|
||||
LayerPropertyKeyframe.LayerProperty
|
||||
);
|
||||
// If possible, shift the keyframe to the right by 11 pixels
|
||||
var desiredPosition = newKeyframe.Position + TimeSpan.FromMilliseconds(1000f / _profileEditorService.PixelsPerSecond * 11);
|
||||
TimeSpan desiredPosition = newKeyframe.Position + TimeSpan.FromMilliseconds(1000f / _profileEditorService.PixelsPerSecond * 11);
|
||||
if (desiredPosition <= newKeyframe.LayerProperty.ProfileElement.TimelineLength)
|
||||
newKeyframe.Position = desiredPosition;
|
||||
// Otherwise if possible shift it to the left by 11 pixels
|
||||
|
||||
+8
-8
@@ -44,8 +44,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
start ??= TimeSpan.Zero;
|
||||
end ??= TimeSpan.MaxValue;
|
||||
|
||||
var toShift = LayerProperty.Keyframes.Where(k => k.Position >= start && k.Position < end).ToList();
|
||||
foreach (var keyframe in toShift)
|
||||
List<LayerPropertyKeyframe<T>> toShift = LayerProperty.Keyframes.Where(k => k.Position >= start && k.Position < end).ToList();
|
||||
foreach (LayerPropertyKeyframe<T> keyframe in toShift)
|
||||
LayerProperty.RemoveKeyframe(keyframe);
|
||||
|
||||
UpdateKeyframes();
|
||||
@@ -56,8 +56,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
start ??= TimeSpan.Zero;
|
||||
end ??= TimeSpan.MaxValue;
|
||||
|
||||
var toShift = LayerProperty.Keyframes.Where(k => k.Position >= start && k.Position < end).ToList();
|
||||
foreach (var keyframe in toShift)
|
||||
List<LayerPropertyKeyframe<T>> toShift = LayerProperty.Keyframes.Where(k => k.Position >= start && k.Position < end).ToList();
|
||||
foreach (LayerPropertyKeyframe<T> keyframe in toShift)
|
||||
keyframe.Position += amount;
|
||||
|
||||
UpdateKeyframes();
|
||||
@@ -90,9 +90,9 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
// Only show keyframes if they are enabled
|
||||
if (LayerProperty.KeyframesEnabled)
|
||||
{
|
||||
var keyframes = LayerProperty.Keyframes.ToList();
|
||||
var toRemove = Items.Where(t => !keyframes.Contains(t.LayerPropertyKeyframe)).ToList();
|
||||
foreach (var timelineKeyframeViewModel in toRemove)
|
||||
List<LayerPropertyKeyframe<T>> keyframes = LayerProperty.Keyframes.ToList();
|
||||
List<TimelineKeyframeViewModel<T>> toRemove = Items.Where(t => !keyframes.Contains(t.LayerPropertyKeyframe)).ToList();
|
||||
foreach (TimelineKeyframeViewModel<T> timelineKeyframeViewModel in toRemove)
|
||||
timelineKeyframeViewModel.Dispose();
|
||||
|
||||
Items.RemoveRange(toRemove);
|
||||
@@ -104,7 +104,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
else
|
||||
Items.Clear();
|
||||
|
||||
foreach (var timelineKeyframeViewModel in Items)
|
||||
foreach (TimelineKeyframeViewModel<T> timelineKeyframeViewModel in Items)
|
||||
timelineKeyframeViewModel.Update();
|
||||
}
|
||||
}
|
||||
|
||||
+11
-11
@@ -197,10 +197,10 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
|
||||
public void DisableSegment()
|
||||
{
|
||||
var startSegmentEnd = SelectedProfileElement.StartSegmentLength;
|
||||
var mainSegmentEnd = SelectedProfileElement.StartSegmentLength + SelectedProfileElement.MainSegmentLength;
|
||||
TimeSpan startSegmentEnd = SelectedProfileElement.StartSegmentLength;
|
||||
TimeSpan mainSegmentEnd = SelectedProfileElement.StartSegmentLength + SelectedProfileElement.MainSegmentLength;
|
||||
|
||||
var oldSegmentLength = SegmentLength;
|
||||
TimeSpan oldSegmentLength = SegmentLength;
|
||||
|
||||
if (Segment == SegmentViewModelType.Start)
|
||||
{
|
||||
@@ -264,10 +264,10 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
return;
|
||||
|
||||
// Get the parent scroll viewer, need that for our position
|
||||
var parent = VisualTreeUtilities.FindParent<ScrollViewer>((DependencyObject) sender, "TimelineHeaderScrollViewer");
|
||||
ScrollViewer parent = VisualTreeUtilities.FindParent<ScrollViewer>((DependencyObject) sender, "TimelineHeaderScrollViewer");
|
||||
|
||||
var x = Math.Max(0, e.GetPosition(parent).X);
|
||||
var newTime = TimeSpan.FromSeconds(x / ProfileEditorService.PixelsPerSecond);
|
||||
double x = Math.Max(0, e.GetPosition(parent).X);
|
||||
TimeSpan newTime = TimeSpan.FromSeconds(x / ProfileEditorService.PixelsPerSecond);
|
||||
|
||||
// Round the time to something that fits the current zoom level
|
||||
if (ProfileEditorService.PixelsPerSecond < 200)
|
||||
@@ -280,7 +280,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
// If holding down shift, snap to the closest element on the timeline
|
||||
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
|
||||
{
|
||||
var keyframeTimes = LayerPropertyGroups.SelectMany(g => g.GetAllKeyframeViewModels(true)).Select(k => k.Position).ToList();
|
||||
List<TimeSpan> keyframeTimes = LayerPropertyGroups.SelectMany(g => g.GetAllKeyframeViewModels(true)).Select(k => k.Position).ToList();
|
||||
newTime = ProfileEditorService.SnapToTimeline(newTime, TimeSpan.FromMilliseconds(1000f / ProfileEditorService.PixelsPerSecond * 5), false, true, keyframeTimes);
|
||||
}
|
||||
// If holding down control, round to the closest 50ms
|
||||
@@ -292,7 +292,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
|
||||
public void UpdateLength(TimeSpan newTime)
|
||||
{
|
||||
var oldSegmentLength = SegmentLength;
|
||||
TimeSpan oldSegmentLength = SegmentLength;
|
||||
if (Segment == SegmentViewModelType.Start)
|
||||
{
|
||||
if (newTime < TimeSpan.FromMilliseconds(100))
|
||||
@@ -361,7 +361,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
|
||||
public void ShiftNextSegment(TimeSpan amount)
|
||||
{
|
||||
var segmentEnd = TimeSpan.Zero;
|
||||
TimeSpan segmentEnd = TimeSpan.Zero;
|
||||
if (Segment == SegmentViewModelType.Start)
|
||||
segmentEnd = SelectedProfileElement.StartSegmentLength;
|
||||
else if (Segment == SegmentViewModelType.Main)
|
||||
@@ -374,13 +374,13 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
|
||||
private void WipeKeyframes(TimeSpan? start, TimeSpan? end)
|
||||
{
|
||||
foreach (var layerPropertyGroupViewModel in LayerPropertyGroups)
|
||||
foreach (LayerPropertyGroupViewModel layerPropertyGroupViewModel in LayerPropertyGroups)
|
||||
layerPropertyGroupViewModel.WipeKeyframes(start, end);
|
||||
}
|
||||
|
||||
private void ShiftKeyframes(TimeSpan? start, TimeSpan? end, TimeSpan amount)
|
||||
{
|
||||
foreach (var layerPropertyGroupViewModel in LayerPropertyGroups)
|
||||
foreach (LayerPropertyGroupViewModel layerPropertyGroupViewModel in LayerPropertyGroups)
|
||||
layerPropertyGroupViewModel.ShiftKeyframes(start, end, amount);
|
||||
}
|
||||
}
|
||||
|
||||
+29
-29
@@ -102,7 +102,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
// if (e.LeftButton == MouseButtonState.Released)
|
||||
// return;
|
||||
|
||||
var viewModel = (sender as Ellipse)?.DataContext as ITimelineKeyframeViewModel;
|
||||
ITimelineKeyframeViewModel viewModel = (sender as Ellipse)?.DataContext as ITimelineKeyframeViewModel;
|
||||
if (viewModel == null)
|
||||
return;
|
||||
|
||||
@@ -153,15 +153,15 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
public void Copy(ITimelineKeyframeViewModel viewModel)
|
||||
{
|
||||
// viewModel.Copy();
|
||||
var keyframeViewModels = GetAllKeyframeViewModels();
|
||||
foreach (var keyframeViewModel in keyframeViewModels.Where(k => k.IsSelected))
|
||||
List<ITimelineKeyframeViewModel> keyframeViewModels = GetAllKeyframeViewModels();
|
||||
foreach (ITimelineKeyframeViewModel keyframeViewModel in keyframeViewModels.Where(k => k.IsSelected))
|
||||
keyframeViewModel.Copy();
|
||||
}
|
||||
|
||||
public void Delete(ITimelineKeyframeViewModel viewModel)
|
||||
{
|
||||
var keyframeViewModels = GetAllKeyframeViewModels();
|
||||
foreach (var keyframeViewModel in keyframeViewModels.Where(k => k.IsSelected))
|
||||
List<ITimelineKeyframeViewModel> keyframeViewModels = GetAllKeyframeViewModels();
|
||||
foreach (ITimelineKeyframeViewModel keyframeViewModel in keyframeViewModels.Where(k => k.IsSelected))
|
||||
keyframeViewModel.Delete();
|
||||
}
|
||||
|
||||
@@ -170,8 +170,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
private TimeSpan GetCursorTime(Point position)
|
||||
{
|
||||
// Get the parent grid, need that for our position
|
||||
var x = Math.Max(0, position.X);
|
||||
var time = TimeSpan.FromSeconds(x / _profileEditorService.PixelsPerSecond);
|
||||
double x = Math.Max(0, position.X);
|
||||
TimeSpan time = TimeSpan.FromSeconds(x / _profileEditorService.PixelsPerSecond);
|
||||
|
||||
// Round the time to something that fits the current zoom level
|
||||
if (_profileEditorService.PixelsPerSecond < 200)
|
||||
@@ -185,7 +185,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
// Take a tolerance of 5 pixels (half a keyframe width)
|
||||
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
|
||||
{
|
||||
var tolerance = 1000f / _profileEditorService.PixelsPerSecond * 5;
|
||||
float tolerance = 1000f / _profileEditorService.PixelsPerSecond * 5;
|
||||
if (Math.Abs(_profileEditorService.CurrentTime.TotalMilliseconds - time.TotalMilliseconds) < tolerance)
|
||||
time = _profileEditorService.CurrentTime;
|
||||
else if (Math.Abs(_profileEditorService.SelectedProfileElement.StartSegmentLength.TotalMilliseconds - time.TotalMilliseconds) < tolerance)
|
||||
@@ -204,8 +204,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
// Ensure the selection rectangle doesn't show, the view isn't aware of different types of dragging
|
||||
SelectionRectangle.Rect = new Rect();
|
||||
|
||||
var keyframeViewModels = GetAllKeyframeViewModels();
|
||||
foreach (var keyframeViewModel in keyframeViewModels.Where(k => k.IsSelected))
|
||||
List<ITimelineKeyframeViewModel> keyframeViewModels = GetAllKeyframeViewModels();
|
||||
foreach (ITimelineKeyframeViewModel keyframeViewModel in keyframeViewModels.Where(k => k.IsSelected))
|
||||
keyframeViewModel.SaveOffsetToKeyframe(sourceKeyframeViewModel);
|
||||
|
||||
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
|
||||
@@ -221,7 +221,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
|
||||
sourceKeyframeViewModel.UpdatePosition(cursorTime);
|
||||
|
||||
foreach (var keyframeViewModel in keyframeViewModels.Where(k => k.IsSelected))
|
||||
foreach (ITimelineKeyframeViewModel keyframeViewModel in keyframeViewModels.Where(k => k.IsSelected))
|
||||
keyframeViewModel.ApplyOffsetToKeyframe(sourceKeyframeViewModel);
|
||||
|
||||
_profileEditorService.UpdateProfilePreview();
|
||||
@@ -230,8 +230,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
|
||||
public void ReleaseSelectedKeyframes()
|
||||
{
|
||||
var keyframeViewModels = GetAllKeyframeViewModels();
|
||||
foreach (var keyframeViewModel in keyframeViewModels.Where(k => k.IsSelected))
|
||||
List<ITimelineKeyframeViewModel> keyframeViewModels = GetAllKeyframeViewModels();
|
||||
foreach (ITimelineKeyframeViewModel keyframeViewModel in keyframeViewModels.Where(k => k.IsSelected))
|
||||
keyframeViewModel.ReleaseMovement();
|
||||
}
|
||||
|
||||
@@ -266,13 +266,13 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
if (!_mouseDragging)
|
||||
return;
|
||||
|
||||
var position = e.GetPosition((IInputElement) sender);
|
||||
var selectedRect = new Rect(_mouseDragStartPoint, position);
|
||||
Point position = e.GetPosition((IInputElement) sender);
|
||||
Rect selectedRect = new Rect(_mouseDragStartPoint, position);
|
||||
SelectionRectangle.Rect = selectedRect;
|
||||
|
||||
var keyframeViewModels = GetAllKeyframeViewModels();
|
||||
var selectedKeyframes = HitTestUtilities.GetHitViewModels<ITimelineKeyframeViewModel>((Visual) sender, SelectionRectangle);
|
||||
foreach (var keyframeViewModel in keyframeViewModels)
|
||||
List<ITimelineKeyframeViewModel> keyframeViewModels = GetAllKeyframeViewModels();
|
||||
List<ITimelineKeyframeViewModel> selectedKeyframes = HitTestUtilities.GetHitViewModels<ITimelineKeyframeViewModel>((Visual) sender, SelectionRectangle);
|
||||
foreach (ITimelineKeyframeViewModel keyframeViewModel in keyframeViewModels)
|
||||
keyframeViewModel.IsSelected = selectedKeyframes.Contains(keyframeViewModel);
|
||||
|
||||
_mouseDragging = false;
|
||||
@@ -284,8 +284,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
{
|
||||
if (_mouseDragging && e.LeftButton == MouseButtonState.Pressed)
|
||||
{
|
||||
var position = e.GetPosition((IInputElement) sender);
|
||||
var selectedRect = new Rect(_mouseDragStartPoint, position);
|
||||
Point position = e.GetPosition((IInputElement) sender);
|
||||
Rect selectedRect = new Rect(_mouseDragStartPoint, position);
|
||||
SelectionRectangle.Rect = selectedRect;
|
||||
e.Handled = true;
|
||||
}
|
||||
@@ -293,10 +293,10 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
|
||||
public void SelectKeyframe(ITimelineKeyframeViewModel clicked, bool selectBetween, bool toggle)
|
||||
{
|
||||
var keyframeViewModels = GetAllKeyframeViewModels();
|
||||
List<ITimelineKeyframeViewModel> keyframeViewModels = GetAllKeyframeViewModels();
|
||||
if (selectBetween)
|
||||
{
|
||||
var selectedIndex = keyframeViewModels.FindIndex(k => k.IsSelected);
|
||||
int selectedIndex = keyframeViewModels.FindIndex(k => k.IsSelected);
|
||||
// If nothing is selected, select only the clicked
|
||||
if (selectedIndex == -1)
|
||||
{
|
||||
@@ -304,18 +304,18 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var keyframeViewModel in keyframeViewModels)
|
||||
foreach (ITimelineKeyframeViewModel keyframeViewModel in keyframeViewModels)
|
||||
keyframeViewModel.IsSelected = false;
|
||||
|
||||
var clickedIndex = keyframeViewModels.IndexOf(clicked);
|
||||
int clickedIndex = keyframeViewModels.IndexOf(clicked);
|
||||
if (clickedIndex < selectedIndex)
|
||||
{
|
||||
foreach (var keyframeViewModel in keyframeViewModels.Skip(clickedIndex).Take(selectedIndex - clickedIndex + 1))
|
||||
foreach (ITimelineKeyframeViewModel keyframeViewModel in keyframeViewModels.Skip(clickedIndex).Take(selectedIndex - clickedIndex + 1))
|
||||
keyframeViewModel.IsSelected = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var keyframeViewModel in keyframeViewModels.Skip(selectedIndex).Take(clickedIndex - selectedIndex + 1))
|
||||
foreach (ITimelineKeyframeViewModel keyframeViewModel in keyframeViewModels.Skip(selectedIndex).Take(clickedIndex - selectedIndex + 1))
|
||||
keyframeViewModel.IsSelected = true;
|
||||
}
|
||||
}
|
||||
@@ -327,7 +327,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
else
|
||||
{
|
||||
// Only select the clicked keyframe
|
||||
foreach (var keyframeViewModel in keyframeViewModels)
|
||||
foreach (ITimelineKeyframeViewModel keyframeViewModel in keyframeViewModels)
|
||||
keyframeViewModel.IsSelected = false;
|
||||
clicked.IsSelected = true;
|
||||
}
|
||||
@@ -335,8 +335,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Timeline
|
||||
|
||||
private List<ITimelineKeyframeViewModel> GetAllKeyframeViewModels()
|
||||
{
|
||||
var viewModels = new List<ITimelineKeyframeViewModel>();
|
||||
foreach (var layerPropertyGroupViewModel in LayerPropertyGroups)
|
||||
List<ITimelineKeyframeViewModel> viewModels = new List<ITimelineKeyframeViewModel>();
|
||||
foreach (LayerPropertyGroupViewModel layerPropertyGroupViewModel in LayerPropertyGroups)
|
||||
viewModels.AddRange(layerPropertyGroupViewModel.GetAllKeyframeViewModels(false));
|
||||
|
||||
return viewModels;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Artemis.Core;
|
||||
using Artemis.Core.LayerBrushes;
|
||||
using Artemis.Core.LayerEffects;
|
||||
@@ -53,22 +54,22 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Tree
|
||||
|
||||
public void OpenBrushSettings()
|
||||
{
|
||||
var layerBrush = LayerPropertyGroup.LayerBrush;
|
||||
var configurationViewModel = layerBrush.ConfigurationDialog;
|
||||
BaseLayerBrush layerBrush = LayerPropertyGroup.LayerBrush;
|
||||
LayerBrushConfigurationDialog configurationViewModel = layerBrush.ConfigurationDialog;
|
||||
if (configurationViewModel == null)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
// Limit to one constructor, there's no need to have more and it complicates things anyway
|
||||
var constructors = configurationViewModel.Type.GetConstructors();
|
||||
ConstructorInfo[] constructors = configurationViewModel.Type.GetConstructors();
|
||||
if (constructors.Length != 1)
|
||||
throw new ArtemisUIException("Brush configuration dialogs must have exactly one constructor");
|
||||
|
||||
// Find the BaseLayerBrush parameter, it is required by the base constructor so its there for sure
|
||||
var brushParameter = constructors.First().GetParameters().First(p => typeof(BaseLayerBrush).IsAssignableFrom(p.ParameterType));
|
||||
var argument = new ConstructorArgument(brushParameter.Name, layerBrush);
|
||||
var viewModel = (BrushConfigurationViewModel) layerBrush.PluginInfo.Kernel.Get(configurationViewModel.Type, argument);
|
||||
ParameterInfo brushParameter = constructors.First().GetParameters().First(p => typeof(BaseLayerBrush).IsAssignableFrom(p.ParameterType));
|
||||
ConstructorArgument argument = new ConstructorArgument(brushParameter.Name, layerBrush);
|
||||
BrushConfigurationViewModel viewModel = (BrushConfigurationViewModel) layerBrush.PluginInfo.Kernel.Get(configurationViewModel.Type, argument);
|
||||
|
||||
_windowManager.ShowDialog(new LayerBrushSettingsWindowViewModel(viewModel));
|
||||
}
|
||||
@@ -80,21 +81,21 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Tree
|
||||
|
||||
public void OpenEffectSettings()
|
||||
{
|
||||
var layerEffect = LayerPropertyGroup.LayerEffect;
|
||||
var configurationViewModel = layerEffect.ConfigurationDialog;
|
||||
BaseLayerEffect layerEffect = LayerPropertyGroup.LayerEffect;
|
||||
LayerEffectConfigurationDialog configurationViewModel = layerEffect.ConfigurationDialog;
|
||||
if (configurationViewModel == null)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
// Limit to one constructor, there's no need to have more and it complicates things anyway
|
||||
var constructors = configurationViewModel.Type.GetConstructors();
|
||||
ConstructorInfo[] constructors = configurationViewModel.Type.GetConstructors();
|
||||
if (constructors.Length != 1)
|
||||
throw new ArtemisUIException("Effect configuration dialogs must have exactly one constructor");
|
||||
|
||||
var effectParameter = constructors.First().GetParameters().First(p => typeof(BaseLayerEffect).IsAssignableFrom(p.ParameterType));
|
||||
var argument = new ConstructorArgument(effectParameter.Name, layerEffect);
|
||||
var viewModel = (EffectConfigurationViewModel) layerEffect.PluginInfo.Kernel.Get(configurationViewModel.Type, argument);
|
||||
ParameterInfo effectParameter = constructors.First().GetParameters().First(p => typeof(BaseLayerEffect).IsAssignableFrom(p.ParameterType));
|
||||
ConstructorArgument argument = new ConstructorArgument(effectParameter.Name, layerEffect);
|
||||
EffectConfigurationViewModel viewModel = (EffectConfigurationViewModel) layerEffect.PluginInfo.Kernel.Get(configurationViewModel.Type, argument);
|
||||
_windowManager.ShowDialog(new LayerEffectSettingsWindowViewModel(viewModel));
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -106,7 +107,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Tree
|
||||
|
||||
public async void RenameEffect()
|
||||
{
|
||||
var result = await _dialogService.ShowDialogAt<RenameViewModel>(
|
||||
object result = await _dialogService.ShowDialogAt<RenameViewModel>(
|
||||
"PropertyTreeDialogHost",
|
||||
new Dictionary<string, object>
|
||||
{
|
||||
@@ -138,8 +139,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Tree
|
||||
|
||||
public double GetDepth()
|
||||
{
|
||||
var depth = 0;
|
||||
var current = LayerPropertyGroup.Parent;
|
||||
int depth = 0;
|
||||
LayerPropertyGroup current = LayerPropertyGroup.Parent;
|
||||
while (current != null)
|
||||
{
|
||||
depth++;
|
||||
|
||||
@@ -39,8 +39,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Tree
|
||||
public bool HasDataBinding => LayerProperty.HasDataBinding;
|
||||
public double GetDepth()
|
||||
{
|
||||
var depth = 0;
|
||||
var current = LayerProperty.LayerPropertyGroup;
|
||||
int depth = 0;
|
||||
LayerPropertyGroup current = LayerProperty.LayerPropertyGroup;
|
||||
while (current != null)
|
||||
{
|
||||
depth++;
|
||||
|
||||
@@ -27,12 +27,12 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.Tree
|
||||
return;
|
||||
|
||||
e.Handled = true;
|
||||
var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)
|
||||
MouseWheelEventArgs eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)
|
||||
{
|
||||
RoutedEvent = UIElement.MouseWheelEvent,
|
||||
Source = sender
|
||||
};
|
||||
var parent = ((Control) sender).Parent as UIElement;
|
||||
UIElement parent = ((Control) sender).Parent as UIElement;
|
||||
parent?.RaiseEvent(eventArg);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -144,24 +144,24 @@ namespace Artemis.UI.Screens.ProfileEditor
|
||||
|
||||
public ProfileDescriptor CreateProfile(string name)
|
||||
{
|
||||
var profile = _profileService.CreateProfileDescriptor(Module, name);
|
||||
ProfileDescriptor profile = _profileService.CreateProfileDescriptor(Module, name);
|
||||
Profiles.Add(profile);
|
||||
return profile;
|
||||
}
|
||||
|
||||
public async Task AddProfile()
|
||||
{
|
||||
var result = await DialogService.ShowDialog<ProfileCreateViewModel>();
|
||||
object result = await DialogService.ShowDialog<ProfileCreateViewModel>();
|
||||
if (result is string name)
|
||||
{
|
||||
var newProfile = CreateProfile(name);
|
||||
ProfileDescriptor newProfile = CreateProfile(name);
|
||||
SelectedProfile = newProfile;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task DeleteProfile(ProfileDescriptor profileDescriptor)
|
||||
{
|
||||
var result = await DialogService.ShowConfirmDialog(
|
||||
bool result = await DialogService.ShowConfirmDialog(
|
||||
"Delete profile",
|
||||
$"Are you sure you want to delete '{profileDescriptor.Name}'? This cannot be undone."
|
||||
);
|
||||
@@ -172,7 +172,7 @@ namespace Artemis.UI.Screens.ProfileEditor
|
||||
|
||||
public async Task DeleteActiveProfile()
|
||||
{
|
||||
var result = await DialogService.ShowConfirmDialog(
|
||||
bool result = await DialogService.ShowConfirmDialog(
|
||||
"Delete active profile",
|
||||
"Are you sure you want to delete your currently active profile? This cannot be undone."
|
||||
);
|
||||
@@ -191,7 +191,7 @@ namespace Artemis.UI.Screens.ProfileEditor
|
||||
|
||||
public async Task ImportProfile()
|
||||
{
|
||||
var result = await DialogService.ShowDialog<ProfileImportViewModel>(new Dictionary<string, object>
|
||||
object result = await DialogService.ShowDialog<ProfileImportViewModel>(new Dictionary<string, object>
|
||||
{
|
||||
{"profileModule", Module}
|
||||
});
|
||||
@@ -207,8 +207,8 @@ namespace Artemis.UI.Screens.ProfileEditor
|
||||
public void Undo()
|
||||
{
|
||||
// Expanded status is also undone because undoing works a bit crude, that's annoying
|
||||
var beforeGroups = LayerPropertiesViewModel.GetAllLayerPropertyGroupViewModels();
|
||||
var expandedPaths = beforeGroups.Where(g => g.IsExpanded).Select(g => g.LayerPropertyGroup.Path).ToList();
|
||||
List<LayerPropertyGroupViewModel> beforeGroups = LayerPropertiesViewModel.GetAllLayerPropertyGroupViewModels();
|
||||
List<string> expandedPaths = beforeGroups.Where(g => g.IsExpanded).Select(g => g.LayerPropertyGroup.Path).ToList();
|
||||
|
||||
if (!_profileEditorService.UndoUpdateProfile())
|
||||
{
|
||||
@@ -217,7 +217,7 @@ namespace Artemis.UI.Screens.ProfileEditor
|
||||
}
|
||||
|
||||
// Restore the expanded status
|
||||
foreach (var allLayerPropertyGroupViewModel in LayerPropertiesViewModel.GetAllLayerPropertyGroupViewModels())
|
||||
foreach (LayerPropertyGroupViewModel allLayerPropertyGroupViewModel in LayerPropertiesViewModel.GetAllLayerPropertyGroupViewModels())
|
||||
allLayerPropertyGroupViewModel.IsExpanded = expandedPaths.Contains(allLayerPropertyGroupViewModel.LayerPropertyGroup.Path);
|
||||
|
||||
_snackbarMessageQueue.Enqueue("Undid profile update", "REDO", Redo);
|
||||
@@ -226,8 +226,8 @@ namespace Artemis.UI.Screens.ProfileEditor
|
||||
public void Redo()
|
||||
{
|
||||
// Expanded status is also undone because undoing works a bit crude, that's annoying
|
||||
var beforeGroups = LayerPropertiesViewModel.GetAllLayerPropertyGroupViewModels();
|
||||
var expandedPaths = beforeGroups.Where(g => g.IsExpanded).Select(g => g.LayerPropertyGroup.Path).ToList();
|
||||
List<LayerPropertyGroupViewModel> beforeGroups = LayerPropertiesViewModel.GetAllLayerPropertyGroupViewModels();
|
||||
List<string> expandedPaths = beforeGroups.Where(g => g.IsExpanded).Select(g => g.LayerPropertyGroup.Path).ToList();
|
||||
|
||||
if (!_profileEditorService.RedoUpdateProfile())
|
||||
{
|
||||
@@ -236,7 +236,7 @@ namespace Artemis.UI.Screens.ProfileEditor
|
||||
}
|
||||
|
||||
// Restore the expanded status
|
||||
foreach (var allLayerPropertyGroupViewModel in LayerPropertiesViewModel.GetAllLayerPropertyGroupViewModels())
|
||||
foreach (LayerPropertyGroupViewModel allLayerPropertyGroupViewModel in LayerPropertiesViewModel.GetAllLayerPropertyGroupViewModels())
|
||||
allLayerPropertyGroupViewModel.IsExpanded = expandedPaths.Contains(allLayerPropertyGroupViewModel.LayerPropertyGroup.Path);
|
||||
|
||||
_snackbarMessageQueue.Enqueue("Redid profile update", "UNDO", Undo);
|
||||
@@ -273,10 +273,10 @@ namespace Artemis.UI.Screens.ProfileEditor
|
||||
if (SelectedProfile == profileDescriptor && !CanDeleteActiveProfile)
|
||||
return;
|
||||
|
||||
var index = Profiles.IndexOf(profileDescriptor);
|
||||
int index = Profiles.IndexOf(profileDescriptor);
|
||||
|
||||
// Get a new active profile
|
||||
var newActiveProfile = index - 1 > -1 ? Profiles[index - 1] : Profiles[index + 1];
|
||||
ProfileDescriptor newActiveProfile = index - 1 > -1 ? Profiles[index - 1] : Profiles[index + 1];
|
||||
|
||||
// Activate the new active profile
|
||||
SelectedProfile = newActiveProfile;
|
||||
@@ -293,9 +293,9 @@ namespace Artemis.UI.Screens.ProfileEditor
|
||||
if (SelectedProfile == null)
|
||||
return;
|
||||
|
||||
var changeTask = _profileService.ActivateProfileAnimated(SelectedProfile);
|
||||
Task<Profile> changeTask = _profileService.ActivateProfileAnimated(SelectedProfile);
|
||||
_profileEditorService.ChangeSelectedProfile(null);
|
||||
var profile = await changeTask;
|
||||
Profile profile = await changeTask;
|
||||
_profileEditorService.ChangeSelectedProfile(profile);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree
|
||||
|
||||
public void DragOver(IDropInfo dropInfo)
|
||||
{
|
||||
var dragDropType = GetDragDropType(dropInfo);
|
||||
DragDropType dragDropType = GetDragDropType(dropInfo);
|
||||
|
||||
switch (dragDropType)
|
||||
{
|
||||
@@ -61,10 +61,10 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree
|
||||
|
||||
public void Drop(IDropInfo dropInfo)
|
||||
{
|
||||
var source = (TreeItemViewModel) dropInfo.Data;
|
||||
var target = (TreeItemViewModel) dropInfo.TargetItem;
|
||||
TreeItemViewModel source = (TreeItemViewModel) dropInfo.Data;
|
||||
TreeItemViewModel target = (TreeItemViewModel) dropInfo.TargetItem;
|
||||
|
||||
var dragDropType = GetDragDropType(dropInfo);
|
||||
DragDropType dragDropType = GetDragDropType(dropInfo);
|
||||
switch (dragDropType)
|
||||
{
|
||||
case DragDropType.Add:
|
||||
@@ -111,7 +111,7 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree
|
||||
private void CreateRootFolderViewModel()
|
||||
{
|
||||
_updatingTree = true;
|
||||
var firstChild = _profileEditorService.SelectedProfile?.Children?.FirstOrDefault();
|
||||
ProfileElement firstChild = _profileEditorService.SelectedProfile?.Children?.FirstOrDefault();
|
||||
if (!(firstChild is Folder folder))
|
||||
{
|
||||
ActivateItem(null);
|
||||
@@ -131,12 +131,12 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree
|
||||
|
||||
private static DragDropType GetDragDropType(IDropInfo dropInfo)
|
||||
{
|
||||
var source = (TreeItemViewModel) dropInfo.Data;
|
||||
var target = (TreeItemViewModel) dropInfo.TargetItem;
|
||||
TreeItemViewModel source = (TreeItemViewModel) dropInfo.Data;
|
||||
TreeItemViewModel target = (TreeItemViewModel) dropInfo.TargetItem;
|
||||
if (source == target)
|
||||
return DragDropType.None;
|
||||
|
||||
var parent = target;
|
||||
TreeItemViewModel parent = target;
|
||||
while (parent != null)
|
||||
{
|
||||
if (parent == source)
|
||||
@@ -190,7 +190,7 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree
|
||||
SelectedTreeItem = null;
|
||||
else
|
||||
{
|
||||
var match = ActiveItem.GetAllChildren().FirstOrDefault(vm => vm.ProfileElement == e.RenderProfileElement);
|
||||
TreeItemViewModel match = ActiveItem.GetAllChildren().FirstOrDefault(vm => vm.ProfileElement == e.RenderProfileElement);
|
||||
if (match != null)
|
||||
SelectedTreeItem = match;
|
||||
}
|
||||
|
||||
@@ -55,8 +55,8 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree.TreeItem
|
||||
|
||||
public List<TreeItemViewModel> GetAllChildren()
|
||||
{
|
||||
var children = new List<TreeItemViewModel>();
|
||||
foreach (var childFolder in Items)
|
||||
List<TreeItemViewModel> children = new List<TreeItemViewModel>();
|
||||
foreach (TreeItemViewModel childFolder in Items)
|
||||
{
|
||||
// Add all children in this element
|
||||
children.Add(childFolder);
|
||||
@@ -69,8 +69,8 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree.TreeItem
|
||||
|
||||
public void SetElementInFront(TreeItemViewModel source)
|
||||
{
|
||||
var sourceParent = (TreeItemViewModel) source.Parent;
|
||||
var parent = (TreeItemViewModel) Parent;
|
||||
TreeItemViewModel sourceParent = (TreeItemViewModel) source.Parent;
|
||||
TreeItemViewModel parent = (TreeItemViewModel) Parent;
|
||||
|
||||
// If the parents are different, remove the element from the old parent and add it to the new parent
|
||||
if (source.Parent != Parent)
|
||||
@@ -89,8 +89,8 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree.TreeItem
|
||||
|
||||
public void SetElementBehind(TreeItemViewModel source)
|
||||
{
|
||||
var sourceParent = (TreeItemViewModel) source.Parent;
|
||||
var parent = (TreeItemViewModel) Parent;
|
||||
TreeItemViewModel sourceParent = (TreeItemViewModel) source.Parent;
|
||||
TreeItemViewModel parent = (TreeItemViewModel) Parent;
|
||||
if (source.Parent != Parent)
|
||||
{
|
||||
sourceParent.RemoveExistingElement(source);
|
||||
@@ -129,7 +129,7 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree.TreeItem
|
||||
if (!SupportsChildren)
|
||||
throw new ArtemisUIException("Cannot add a folder to a profile element of type " + ProfileElement.GetType().Name);
|
||||
|
||||
var _ = new Folder(ProfileElement, "New folder");
|
||||
Folder _ = new Folder(ProfileElement, "New folder");
|
||||
_profileEditorService.UpdateSelectedProfile();
|
||||
}
|
||||
|
||||
@@ -138,7 +138,7 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree.TreeItem
|
||||
if (!SupportsChildren)
|
||||
throw new ArtemisUIException("Cannot add a layer to a profile element of type " + ProfileElement.GetType().Name);
|
||||
|
||||
var layer = new Layer(ProfileElement, "New layer");
|
||||
Layer layer = new Layer(ProfileElement, "New layer");
|
||||
layer.ChangeLayerBrush(_layerBrushService.GetDefaultLayerBrush());
|
||||
layer.AddLeds(_surfaceService.ActiveSurface.Devices.SelectMany(d => d.Leds));
|
||||
_profileEditorService.UpdateSelectedProfile();
|
||||
@@ -148,7 +148,7 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree.TreeItem
|
||||
// ReSharper disable once UnusedMember.Global - Called from view
|
||||
public async Task RenameElement()
|
||||
{
|
||||
var result = await _dialogService.ShowDialogAt<RenameViewModel>(
|
||||
object result = await _dialogService.ShowDialogAt<RenameViewModel>(
|
||||
"ProfileTreeDialog",
|
||||
new Dictionary<string, object>
|
||||
{
|
||||
@@ -166,7 +166,7 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree.TreeItem
|
||||
// ReSharper disable once UnusedMember.Global - Called from view
|
||||
public async Task DeleteElement()
|
||||
{
|
||||
var result = await _dialogService.ShowConfirmDialogAt(
|
||||
bool result = await _dialogService.ShowConfirmDialogAt(
|
||||
"ProfileTreeDialog",
|
||||
"Delete profile element",
|
||||
"Are you sure?"
|
||||
@@ -176,7 +176,7 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree.TreeItem
|
||||
return;
|
||||
|
||||
// Farewell, cruel world
|
||||
var parent = (TreeItemViewModel) Parent;
|
||||
TreeItemViewModel parent = (TreeItemViewModel) Parent;
|
||||
ProfileElement.Parent?.RemoveChild(ProfileElement);
|
||||
parent.RemoveExistingElement(this);
|
||||
|
||||
@@ -187,15 +187,15 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree.TreeItem
|
||||
public void UpdateProfileElements()
|
||||
{
|
||||
// Remove VMs that are no longer a child
|
||||
var toRemove = Items.Where(c => c.ProfileElement.Parent != ProfileElement).ToList();
|
||||
foreach (var treeItemViewModel in toRemove)
|
||||
List<TreeItemViewModel> toRemove = Items.Where(c => c.ProfileElement.Parent != ProfileElement).ToList();
|
||||
foreach (TreeItemViewModel treeItemViewModel in toRemove)
|
||||
Items.Remove(treeItemViewModel);
|
||||
|
||||
// Order the children
|
||||
var vmsList = Items.OrderBy(v => v.ProfileElement.Order).ToList();
|
||||
for (var index = 0; index < vmsList.Count; index++)
|
||||
List<TreeItemViewModel> vmsList = Items.OrderBy(v => v.ProfileElement.Order).ToList();
|
||||
for (int index = 0; index < vmsList.Count; index++)
|
||||
{
|
||||
var profileElementViewModel = vmsList[index];
|
||||
TreeItemViewModel profileElementViewModel = vmsList[index];
|
||||
if (Items.IndexOf(profileElementViewModel) != index)
|
||||
((BindableCollection<TreeItemViewModel>) Items).Move(Items.IndexOf(profileElementViewModel), index);
|
||||
}
|
||||
@@ -204,8 +204,8 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree.TreeItem
|
||||
if (ProfileElement.Children == null)
|
||||
return;
|
||||
|
||||
var newChildren = new List<TreeItemViewModel>();
|
||||
foreach (var profileElement in ProfileElement.Children.OrderBy(c => c.Order))
|
||||
List<TreeItemViewModel> newChildren = new List<TreeItemViewModel>();
|
||||
foreach (ProfileElement profileElement in ProfileElement.Children.OrderBy(c => c.Order))
|
||||
{
|
||||
if (profileElement is Folder folder)
|
||||
{
|
||||
@@ -223,7 +223,7 @@ namespace Artemis.UI.Screens.ProfileEditor.ProfileTree.TreeItem
|
||||
return;
|
||||
|
||||
// Add the new children in one call, prevent extra UI events
|
||||
foreach (var treeItemViewModel in newChildren)
|
||||
foreach (TreeItemViewModel treeItemViewModel in newChildren)
|
||||
{
|
||||
treeItemViewModel.UpdateProfileElements();
|
||||
Items.Add(treeItemViewModel);
|
||||
|
||||
@@ -127,8 +127,8 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization
|
||||
|
||||
Execute.PostToUIThread(() =>
|
||||
{
|
||||
var bounds = _layerEditorService.GetLayerBounds(Layer);
|
||||
var shapeGeometry = Geometry.Empty;
|
||||
Rect bounds = _layerEditorService.GetLayerBounds(Layer);
|
||||
Geometry shapeGeometry = Geometry.Empty;
|
||||
switch (Layer.LayerShape)
|
||||
{
|
||||
case EllipseShape _:
|
||||
@@ -159,22 +159,22 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization
|
||||
|
||||
private Geometry CreateRectangleGeometry(ArtemisLed led)
|
||||
{
|
||||
var rect = led.RgbLed.AbsoluteLedRectangle.ToWindowsRect(1);
|
||||
Rect rect = led.RgbLed.AbsoluteLedRectangle.ToWindowsRect(1);
|
||||
return new RectangleGeometry(rect);
|
||||
}
|
||||
|
||||
private Geometry CreateCircleGeometry(ArtemisLed led)
|
||||
{
|
||||
var rect = led.RgbLed.AbsoluteLedRectangle.ToWindowsRect(1);
|
||||
Rect rect = led.RgbLed.AbsoluteLedRectangle.ToWindowsRect(1);
|
||||
return new EllipseGeometry(rect);
|
||||
}
|
||||
|
||||
private Geometry CreateCustomGeometry(ArtemisLed led, double deflateAmount)
|
||||
{
|
||||
var rect = led.RgbLed.AbsoluteLedRectangle.ToWindowsRect(1);
|
||||
Rect rect = led.RgbLed.AbsoluteLedRectangle.ToWindowsRect(1);
|
||||
try
|
||||
{
|
||||
var geometry = Geometry.Combine(
|
||||
PathGeometry geometry = Geometry.Combine(
|
||||
Geometry.Empty,
|
||||
Geometry.Parse(led.RgbLed.ShapeData),
|
||||
GeometryCombineMode.Union,
|
||||
|
||||
@@ -195,7 +195,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization
|
||||
OnlyShowSelectedShape.Save();
|
||||
HighlightSelectedLayer.Save();
|
||||
|
||||
foreach (var canvasViewModel in CanvasViewModels)
|
||||
foreach (CanvasViewModel canvasViewModel in CanvasViewModels)
|
||||
canvasViewModel.Dispose();
|
||||
CanvasViewModels.Clear();
|
||||
|
||||
@@ -209,19 +209,19 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization
|
||||
|
||||
private void ApplyActiveProfile()
|
||||
{
|
||||
var layerViewModels = CanvasViewModels.Where(vm => vm is ProfileLayerViewModel).Cast<ProfileLayerViewModel>().ToList();
|
||||
var layers = _profileEditorService.SelectedProfile?.GetAllLayers() ?? new List<Layer>();
|
||||
List<ProfileLayerViewModel> layerViewModels = CanvasViewModels.Where(vm => vm is ProfileLayerViewModel).Cast<ProfileLayerViewModel>().ToList();
|
||||
List<Layer> layers = _profileEditorService.SelectedProfile?.GetAllLayers() ?? new List<Layer>();
|
||||
|
||||
// Add new layers missing a VM
|
||||
foreach (var layer in layers)
|
||||
foreach (Layer layer in layers)
|
||||
{
|
||||
if (layerViewModels.All(vm => vm.Layer != layer))
|
||||
CanvasViewModels.Add(_profileLayerVmFactory.Create(layer, this));
|
||||
}
|
||||
|
||||
// Remove layers that no longer exist
|
||||
var toRemove = layerViewModels.Where(vm => !layers.Contains(vm.Layer));
|
||||
foreach (var profileLayerViewModel in toRemove)
|
||||
IEnumerable<ProfileLayerViewModel> toRemove = layerViewModels.Where(vm => !layers.Contains(vm.Layer));
|
||||
foreach (ProfileLayerViewModel profileLayerViewModel in toRemove)
|
||||
{
|
||||
profileLayerViewModel.Dispose();
|
||||
CanvasViewModels.Remove(profileLayerViewModel);
|
||||
@@ -341,7 +341,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization
|
||||
|
||||
public void InverseSelection()
|
||||
{
|
||||
var current = SelectedLeds.ToList();
|
||||
List<ArtemisLed> current = SelectedLeds.ToList();
|
||||
SelectedLeds.Clear();
|
||||
SelectedLeds.AddRange(Devices.SelectMany(d => d.Leds).Except(current));
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
ShapeAnchor = _layerEditorService.GetLayerAnchorPosition(layer).ToSKPoint();
|
||||
Execute.PostToUIThread(() =>
|
||||
{
|
||||
var shapeGeometry = new RectangleGeometry(_layerEditorService.GetLayerBounds(layer))
|
||||
RectangleGeometry shapeGeometry = new RectangleGeometry(_layerEditorService.GetLayerBounds(layer))
|
||||
{
|
||||
Transform = _layerEditorService.GetLayerTransformGroup(layer)
|
||||
};
|
||||
@@ -99,15 +99,15 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
if (!_rotating || !(ProfileEditorService.SelectedProfileElement is Layer layer))
|
||||
return;
|
||||
|
||||
var previousDragAngle = _previousDragAngle;
|
||||
var newRotation = CalculateAngle(layer, sender, e.MouseEventArgs);
|
||||
float previousDragAngle = _previousDragAngle;
|
||||
float newRotation = CalculateAngle(layer, sender, e.MouseEventArgs);
|
||||
_previousDragAngle = newRotation;
|
||||
|
||||
// Allow the user to rotate the shape in increments of 5
|
||||
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
|
||||
newRotation = (float) Math.Round(newRotation / 5f) * 5f;
|
||||
|
||||
var difference = newRotation - previousDragAngle;
|
||||
float difference = newRotation - previousDragAngle;
|
||||
if (difference < -350)
|
||||
difference += 360;
|
||||
else if (difference > 350)
|
||||
@@ -136,7 +136,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
if (_isResizing || !(ProfileEditorService.SelectedProfileElement is Layer layer))
|
||||
return;
|
||||
|
||||
var dragStart = GetRelativePosition(sender, e.MouseEventArgs).ToSKPoint();
|
||||
SKPoint dragStart = GetRelativePosition(sender, e.MouseEventArgs).ToSKPoint();
|
||||
_dragOffset = _layerEditorService.GetDragOffset(layer, dragStart);
|
||||
_dragStart = dragStart + _dragOffset;
|
||||
_dragStartScale = layer.Transform.Scale.CurrentValue;
|
||||
@@ -156,7 +156,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
return;
|
||||
|
||||
float width, height;
|
||||
var position = GetRelativePosition(sender, e.MouseEventArgs).ToSKPoint() + _dragOffset;
|
||||
SKPoint position = GetRelativePosition(sender, e.MouseEventArgs).ToSKPoint() + _dragOffset;
|
||||
switch (e.ShapeControlPoint)
|
||||
{
|
||||
case ShapeControlPoint.TopLeft:
|
||||
@@ -198,8 +198,8 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
// Make the sides even if shift is held down
|
||||
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift) && e.ShapeControlPoint < ShapeControlPoint.TopCenter)
|
||||
{
|
||||
var bounds = _layerEditorService.GetLayerBounds(layer);
|
||||
var smallestSide = Math.Min(bounds.Width * width, bounds.Height * height);
|
||||
Rect bounds = _layerEditorService.GetLayerBounds(layer);
|
||||
double smallestSide = Math.Min(bounds.Width * width, bounds.Height * height);
|
||||
width = (float) Math.Round(1.0 / bounds.Width * smallestSide, 2, MidpointRounding.AwayFromZero);
|
||||
height = (float) Math.Round(1.0 / bounds.Height * smallestSide, 2, MidpointRounding.AwayFromZero);
|
||||
}
|
||||
@@ -211,13 +211,13 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
private float HorizontalResize(Layer layer, SKPoint position, ResizeOrigin origin)
|
||||
{
|
||||
// Apply rotation to the mouse
|
||||
var points = UnTransformPoints(new[] {position, _dragStart}, layer, ShapeAnchor, false);
|
||||
SKPoint[] points = UnTransformPoints(new[] {position, _dragStart}, layer, ShapeAnchor, false);
|
||||
position = points[0];
|
||||
var dragStart = points[1];
|
||||
SKPoint dragStart = points[1];
|
||||
|
||||
var shapePath = _layerEditorService.GetLayerPath(layer, true, false, false);
|
||||
var scalePerPixel = 1f / shapePath.Bounds.Width;
|
||||
var anchorDistance = origin == ResizeOrigin.Left
|
||||
SKPath shapePath = _layerEditorService.GetLayerPath(layer, true, false, false);
|
||||
float scalePerPixel = 1f / shapePath.Bounds.Width;
|
||||
float anchorDistance = origin == ResizeOrigin.Left
|
||||
? shapePath.Bounds.Left - ShapeAnchor.X
|
||||
: shapePath.Bounds.Right - ShapeAnchor.X;
|
||||
|
||||
@@ -226,10 +226,10 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
if (Math.Abs(anchorDistance) < 0.001)
|
||||
return _dragStartScale.Width;
|
||||
|
||||
var anchorOffset = anchorDistance / shapePath.Bounds.Width;
|
||||
float anchorOffset = anchorDistance / shapePath.Bounds.Width;
|
||||
|
||||
var pixelsToAdd = (position - dragStart).X / anchorOffset;
|
||||
var scaleToAdd = scalePerPixel * pixelsToAdd * 100f;
|
||||
float pixelsToAdd = (position - dragStart).X / anchorOffset;
|
||||
float scaleToAdd = scalePerPixel * pixelsToAdd * 100f;
|
||||
|
||||
return (float) Math.Round(Math.Max(0, _dragStartScale.Width + scaleToAdd), 2, MidpointRounding.AwayFromZero);
|
||||
}
|
||||
@@ -237,13 +237,13 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
private float VerticalResize(Layer layer, SKPoint position, ResizeOrigin origin)
|
||||
{
|
||||
// Apply rotation to the mouse
|
||||
var points = UnTransformPoints(new[] {position, _dragStart}, layer, ShapeAnchor, false);
|
||||
SKPoint[] points = UnTransformPoints(new[] {position, _dragStart}, layer, ShapeAnchor, false);
|
||||
position = points[0];
|
||||
var dragStart = points[1];
|
||||
SKPoint dragStart = points[1];
|
||||
|
||||
var shapePath = _layerEditorService.GetLayerPath(layer, true, false, false);
|
||||
var scalePerPixel = 1f / shapePath.Bounds.Height;
|
||||
var anchorDistance = origin == ResizeOrigin.Top
|
||||
SKPath shapePath = _layerEditorService.GetLayerPath(layer, true, false, false);
|
||||
float scalePerPixel = 1f / shapePath.Bounds.Height;
|
||||
float anchorDistance = origin == ResizeOrigin.Top
|
||||
? shapePath.Bounds.Top - ShapeAnchor.Y
|
||||
: shapePath.Bounds.Bottom - ShapeAnchor.Y;
|
||||
|
||||
@@ -252,10 +252,10 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
if (Math.Abs(anchorDistance) < 0.001)
|
||||
return _dragStartScale.Width;
|
||||
|
||||
var anchorOffset = anchorDistance / shapePath.Bounds.Height;
|
||||
float anchorOffset = anchorDistance / shapePath.Bounds.Height;
|
||||
|
||||
var pixelsToAdd = (position - dragStart).Y / anchorOffset;
|
||||
var scaleToAdd = scalePerPixel * pixelsToAdd * 100f;
|
||||
float pixelsToAdd = (position - dragStart).Y / anchorOffset;
|
||||
float scaleToAdd = scalePerPixel * pixelsToAdd * 100f;
|
||||
|
||||
return (float) Math.Round(Math.Max(0, _dragStartScale.Height + scaleToAdd), 2, MidpointRounding.AwayFromZero);
|
||||
}
|
||||
@@ -277,18 +277,18 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
|
||||
if (e.ShapeControlPoint == ShapeControlPoint.LayerShape)
|
||||
{
|
||||
var dragStart = GetRelativePosition(sender, e.MouseEventArgs).ToSKPoint();
|
||||
SKPoint dragStart = GetRelativePosition(sender, e.MouseEventArgs).ToSKPoint();
|
||||
_dragOffset = _layerEditorService.GetDragOffset(layer, dragStart);
|
||||
_dragStart = dragStart + _dragOffset;
|
||||
_movingShape = true;
|
||||
}
|
||||
else if (e.ShapeControlPoint == ShapeControlPoint.Anchor)
|
||||
{
|
||||
var dragStartPosition = GetRelativePosition(sender, e.MouseEventArgs).ToSKPoint();
|
||||
SKPoint dragStartPosition = GetRelativePosition(sender, e.MouseEventArgs).ToSKPoint();
|
||||
|
||||
// Mouse doesn't care about rotation so get the layer path without rotation
|
||||
var path = _layerEditorService.GetLayerPath(layer, true, true, false);
|
||||
var topLeft = path.Points[0];
|
||||
SKPath path = _layerEditorService.GetLayerPath(layer, true, true, false);
|
||||
SKPoint topLeft = path.Points[0];
|
||||
// Measure from the top-left of the shape (without rotation)
|
||||
_dragOffset = topLeft + (dragStartPosition - topLeft);
|
||||
// Get the absolute layer anchor and make it relative to the unrotated shape
|
||||
@@ -320,7 +320,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
if (!(ProfileEditorService.SelectedProfileElement is Layer layer))
|
||||
return;
|
||||
|
||||
var position = GetRelativePosition(sender, e).ToSKPoint() + _dragOffset;
|
||||
SKPoint position = GetRelativePosition(sender, e).ToSKPoint() + _dragOffset;
|
||||
// Allow the user to move the shape only horizontally or vertically when holding down shift
|
||||
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
|
||||
{
|
||||
@@ -347,7 +347,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
}
|
||||
|
||||
// Scale down the resulting position and make it relative
|
||||
var scaled = _layerEditorService.GetScaledPoint(layer, position, true);
|
||||
SKPoint scaled = _layerEditorService.GetScaledPoint(layer, position, true);
|
||||
// Round and update the position property
|
||||
layer.Transform.Position.SetCurrentValue(RoundPoint(scaled, 3), ProfileEditorService.CurrentTime);
|
||||
|
||||
@@ -360,22 +360,22 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
return;
|
||||
|
||||
// The start anchor is relative to an unrotated version of the shape
|
||||
var start = _dragStartAnchor;
|
||||
SKPoint start = _dragStartAnchor;
|
||||
// Add the current position to the start anchor to determine the new position
|
||||
var current = start + (GetRelativePosition(sender, e).ToSKPoint() - _dragOffset);
|
||||
SKPoint current = start + (GetRelativePosition(sender, e).ToSKPoint() - _dragOffset);
|
||||
// In order to keep the mouse movement unrotated, counter-act the active rotation
|
||||
var countered = UnTransformPoints(new[] {start, current}, layer, start, true);
|
||||
SKPoint[] countered = UnTransformPoints(new[] {start, current}, layer, start, true);
|
||||
|
||||
// If shift is held down, round down to 1 decimal to allow moving the anchor in big increments
|
||||
var decimals = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift) ? 1 : 3;
|
||||
var scaled = RoundPoint(_layerEditorService.GetScaledPoint(layer, countered[1], false), decimals);
|
||||
int decimals = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift) ? 1 : 3;
|
||||
SKPoint scaled = RoundPoint(_layerEditorService.GetScaledPoint(layer, countered[1], false), decimals);
|
||||
|
||||
// Update the anchor point, this causes the shape to move
|
||||
layer.Transform.AnchorPoint.SetCurrentValue(scaled, ProfileEditorService.CurrentTime);
|
||||
// TopLeft is not updated yet and acts as a snapshot of the top-left before changing the anchor
|
||||
var path = _layerEditorService.GetLayerPath(layer, true, true, true);
|
||||
SKPath path = _layerEditorService.GetLayerPath(layer, true, true, true);
|
||||
// Calculate the (scaled) difference between the old and now position
|
||||
var difference = _layerEditorService.GetScaledPoint(layer, _topLeft - path.Points[0], false);
|
||||
SKPoint difference = _layerEditorService.GetScaledPoint(layer, _topLeft - path.Points[0], false);
|
||||
// Apply the difference so that the shape effectively stays in place
|
||||
layer.Transform.Position.SetCurrentValue(layer.Transform.Position.CurrentValue + difference, ProfileEditorService.CurrentTime);
|
||||
|
||||
@@ -393,7 +393,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
|
||||
private SKPoint[] UnTransformPoints(SKPoint[] skPoints, Layer layer, SKPoint pivot, bool includeScale)
|
||||
{
|
||||
using var counterRotatePath = new SKPath();
|
||||
using SKPath counterRotatePath = new SKPath();
|
||||
counterRotatePath.AddPoly(skPoints, false);
|
||||
counterRotatePath.Transform(SKMatrix.MakeRotationDegrees(layer.Transform.Rotation.CurrentValue * -1, pivot.X, pivot.Y));
|
||||
if (includeScale)
|
||||
@@ -404,18 +404,18 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
|
||||
private Point GetRelativePosition(object sender, MouseEventArgs mouseEventArgs)
|
||||
{
|
||||
var parent = VisualTreeHelper.GetParent((DependencyObject) sender);
|
||||
DependencyObject parent = VisualTreeHelper.GetParent((DependencyObject) sender);
|
||||
return mouseEventArgs.GetPosition((IInputElement) parent);
|
||||
}
|
||||
|
||||
private float CalculateAngle(Layer layer, object mouseEventSender, MouseEventArgs mouseEvent)
|
||||
{
|
||||
var layerBounds = _layerEditorService.GetLayerBounds(layer);
|
||||
var start = _layerEditorService.GetLayerAnchorPosition(layer);
|
||||
var arrival = GetRelativePosition(mouseEventSender, mouseEvent);
|
||||
Rect layerBounds = _layerEditorService.GetLayerBounds(layer);
|
||||
Point start = _layerEditorService.GetLayerAnchorPosition(layer);
|
||||
Point arrival = GetRelativePosition(mouseEventSender, mouseEvent);
|
||||
|
||||
var radian = (float) Math.Atan2(start.Y - arrival.Y, start.X - arrival.X);
|
||||
var angle = radian * (180f / (float) Math.PI);
|
||||
float radian = (float) Math.Atan2(start.Y - arrival.Y, start.X - arrival.X);
|
||||
float angle = radian * (180f / (float) Math.PI);
|
||||
if (angle < 0f)
|
||||
angle += 360f;
|
||||
|
||||
|
||||
+10
-9
@@ -1,4 +1,5 @@
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Input;
|
||||
@@ -14,7 +15,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
|
||||
public SelectionRemoveToolViewModel(ProfileViewModel profileViewModel, IProfileEditorService profileEditorService) : base(profileViewModel, profileEditorService)
|
||||
{
|
||||
using (var stream = new MemoryStream(Resources.aero_pen_min))
|
||||
using (MemoryStream stream = new MemoryStream(Resources.aero_pen_min))
|
||||
{
|
||||
Cursor = new Cursor(stream);
|
||||
}
|
||||
@@ -30,18 +31,18 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
{
|
||||
base.MouseUp(sender, e);
|
||||
|
||||
var position = ProfileViewModel.PanZoomViewModel.GetRelativeMousePosition(sender, e);
|
||||
var selectedRect = new Rect(MouseDownStartPosition, position);
|
||||
Point position = ProfileViewModel.PanZoomViewModel.GetRelativeMousePosition(sender, e);
|
||||
Rect selectedRect = new Rect(MouseDownStartPosition, position);
|
||||
|
||||
// Get selected LEDs
|
||||
var selectedLeds = ProfileViewModel.GetLedsInRectangle(selectedRect);
|
||||
List<ArtemisLed> selectedLeds = ProfileViewModel.GetLedsInRectangle(selectedRect);
|
||||
ProfileViewModel.SelectedLeds.Clear();
|
||||
ProfileViewModel.SelectedLeds.AddRange(selectedLeds);
|
||||
|
||||
// Apply the selection to the selected layer layer
|
||||
if (ProfileEditorService.SelectedProfileElement is Layer layer)
|
||||
{
|
||||
var remainingLeds = layer.Leds.Except(selectedLeds).ToList();
|
||||
List<ArtemisLed> remainingLeds = layer.Leds.Except(selectedLeds).ToList();
|
||||
layer.ClearLeds();
|
||||
layer.AddLeds(remainingLeds);
|
||||
|
||||
@@ -58,9 +59,9 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
return;
|
||||
}
|
||||
|
||||
var position = ProfileViewModel.PanZoomViewModel.GetRelativeMousePosition(sender, e);
|
||||
var selectedRect = new Rect(MouseDownStartPosition, position);
|
||||
var selectedLeds = ProfileViewModel.GetLedsInRectangle(selectedRect);
|
||||
Point position = ProfileViewModel.PanZoomViewModel.GetRelativeMousePosition(sender, e);
|
||||
Rect selectedRect = new Rect(MouseDownStartPosition, position);
|
||||
List<ArtemisLed> selectedLeds = ProfileViewModel.GetLedsInRectangle(selectedRect);
|
||||
|
||||
// Unless shift is held down, clear the current selection
|
||||
if (!Keyboard.IsKeyDown(Key.LeftShift) && !Keyboard.IsKeyDown(Key.RightShift))
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
ILayerBrushService layerBrushService) : base(profileViewModel, profileEditorService)
|
||||
{
|
||||
_layerBrushService = layerBrushService;
|
||||
using (var stream = new MemoryStream(Resources.aero_crosshair))
|
||||
using (MemoryStream stream = new MemoryStream(Resources.aero_crosshair))
|
||||
{
|
||||
Cursor = new Cursor(stream);
|
||||
}
|
||||
@@ -36,11 +36,11 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
{
|
||||
base.MouseUp(sender, e);
|
||||
|
||||
var position = ProfileViewModel.PanZoomViewModel.GetRelativeMousePosition(sender, e);
|
||||
var selectedRect = new Rect(MouseDownStartPosition, position);
|
||||
Point position = ProfileViewModel.PanZoomViewModel.GetRelativeMousePosition(sender, e);
|
||||
Rect selectedRect = new Rect(MouseDownStartPosition, position);
|
||||
|
||||
// Get selected LEDs
|
||||
var selectedLeds = ProfileViewModel.GetLedsInRectangle(selectedRect);
|
||||
List<ArtemisLed> selectedLeds = ProfileViewModel.GetLedsInRectangle(selectedRect);
|
||||
|
||||
// Apply the selection to the selected layer layer
|
||||
if (ProfileEditorService.SelectedProfileElement is Layer layer)
|
||||
@@ -62,7 +62,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
// If no folder selected, apply it to a new layer in the root folder
|
||||
else
|
||||
{
|
||||
var rootFolder = ProfileEditorService.SelectedProfile.GetRootFolder();
|
||||
Folder rootFolder = ProfileEditorService.SelectedProfile.GetRootFolder();
|
||||
CreateLayer(rootFolder, selectedLeds);
|
||||
}
|
||||
}
|
||||
@@ -76,9 +76,9 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
return;
|
||||
}
|
||||
|
||||
var position = ProfileViewModel.PanZoomViewModel.GetRelativeMousePosition(sender, e);
|
||||
var selectedRect = new Rect(MouseDownStartPosition, position);
|
||||
var selectedLeds = ProfileViewModel.GetLedsInRectangle(selectedRect);
|
||||
Point position = ProfileViewModel.PanZoomViewModel.GetRelativeMousePosition(sender, e);
|
||||
Rect selectedRect = new Rect(MouseDownStartPosition, position);
|
||||
List<ArtemisLed> selectedLeds = ProfileViewModel.GetLedsInRectangle(selectedRect);
|
||||
|
||||
// Unless shift is held down, clear the current selection
|
||||
if (!Keyboard.IsKeyDown(Key.LeftShift) && !Keyboard.IsKeyDown(Key.RightShift))
|
||||
@@ -90,7 +90,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
|
||||
private void CreateLayer(Folder folder, List<ArtemisLed> selectedLeds)
|
||||
{
|
||||
var newLayer = new Layer(folder, "New layer");
|
||||
Layer newLayer = new Layer(folder, "New layer");
|
||||
newLayer.ChangeLayerBrush(_layerBrushService.GetDefaultLayerBrush());
|
||||
newLayer.AddLeds(selectedLeds);
|
||||
ProfileEditorService.ChangeSelectedProfileElement(newLayer);
|
||||
|
||||
+1
-1
@@ -73,7 +73,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.Tools
|
||||
protected Rect GetSquareRectBetweenPoints(Point start, Point end)
|
||||
{
|
||||
// Find the shortest side
|
||||
var size = Math.Min(Math.Abs(start.X - end.X), Math.Abs(start.Y - end.Y));
|
||||
double size = Math.Min(Math.Abs(start.X - end.X), Math.Abs(start.Y - end.Y));
|
||||
|
||||
// There's probably a very elegant way to do this, and this is not it
|
||||
if (end.X < start.X && end.Y < start.Y)
|
||||
|
||||
+8
-8
@@ -87,7 +87,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.UserControls
|
||||
|
||||
private static void ZoomChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
var layerShapeControl = (LayerShapeControl) d;
|
||||
LayerShapeControl layerShapeControl = (LayerShapeControl) d;
|
||||
|
||||
layerShapeControl.SetCurrentValue(ZoomProperty, e.NewValue);
|
||||
layerShapeControl.UpdateDimensions();
|
||||
@@ -95,7 +95,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.UserControls
|
||||
|
||||
private static void ShapePathChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
var layerShapeControl = (LayerShapeControl) d;
|
||||
LayerShapeControl layerShapeControl = (LayerShapeControl) d;
|
||||
|
||||
layerShapeControl.SetCurrentValue(ShapePathProperty, e.NewValue);
|
||||
layerShapeControl.UpdatePositions();
|
||||
@@ -103,7 +103,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.UserControls
|
||||
|
||||
private static void ShapeAnchorChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
var layerShapeControl = (LayerShapeControl) d;
|
||||
LayerShapeControl layerShapeControl = (LayerShapeControl) d;
|
||||
|
||||
layerShapeControl.SetCurrentValue(ShapeAnchorProperty, e.NewValue);
|
||||
layerShapeControl.UpdateShapeAnchor();
|
||||
@@ -111,7 +111,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.UserControls
|
||||
|
||||
private static void ShapeGeometryChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
var layerShapeControl = (LayerShapeControl) d;
|
||||
LayerShapeControl layerShapeControl = (LayerShapeControl) d;
|
||||
|
||||
layerShapeControl.SetCurrentValue(ShapeGeometryProperty, e.NewValue);
|
||||
layerShapeControl.UpdateShapeGeometry();
|
||||
@@ -161,14 +161,14 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.UserControls
|
||||
|
||||
private void UpdateControlPosition(UIElement control, SKPoint point1, SKPoint point2)
|
||||
{
|
||||
var point = new SKPoint((point1.X + point2.X) / 2, (point1.Y + point2.Y) / 2);
|
||||
SKPoint point = new SKPoint((point1.X + point2.X) / 2, (point1.Y + point2.Y) / 2);
|
||||
UpdateControlPosition(control, point);
|
||||
}
|
||||
|
||||
private void UpdateRotateDimensions(Shape rotateControl)
|
||||
{
|
||||
var controlSize = Math.Max(10 / Zoom, 4);
|
||||
var rotateSize = controlSize * 8;
|
||||
double controlSize = Math.Max(10 / Zoom, 4);
|
||||
double rotateSize = controlSize * 8;
|
||||
|
||||
rotateControl.Width = rotateSize;
|
||||
rotateControl.Height = rotateSize;
|
||||
@@ -177,7 +177,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Visualization.UserControls
|
||||
|
||||
private void UpdateResizeDimensions(Shape resizeControl)
|
||||
{
|
||||
var controlSize = Math.Max(10 / Zoom, 4);
|
||||
double controlSize = Math.Max(10 / Zoom, 4);
|
||||
|
||||
resizeControl.Width = controlSize;
|
||||
resizeControl.Height = controlSize;
|
||||
|
||||
@@ -64,7 +64,7 @@ namespace Artemis.UI.Screens
|
||||
ActiveItem = SidebarViewModel.SelectedItem;
|
||||
ActiveItemReady = true;
|
||||
|
||||
var versionAttribute = typeof(RootViewModel).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();
|
||||
AssemblyInformationalVersionAttribute? versionAttribute = typeof(RootViewModel).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();
|
||||
WindowTitle = $"Artemis {versionAttribute?.InformationalVersion}";
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ namespace Artemis.UI.Screens
|
||||
|
||||
public void WindowDeactivated()
|
||||
{
|
||||
var windowState = ((Window) View).WindowState;
|
||||
WindowState windowState = ((Window) View).WindowState;
|
||||
if (windowState == WindowState.Minimized)
|
||||
return;
|
||||
|
||||
@@ -185,12 +185,12 @@ namespace Artemis.UI.Screens
|
||||
|
||||
private void ChangeMaterialColors(ApplicationColorScheme colorScheme)
|
||||
{
|
||||
var paletteHelper = new PaletteHelper();
|
||||
var theme = paletteHelper.GetTheme();
|
||||
PaletteHelper paletteHelper = new PaletteHelper();
|
||||
ITheme theme = paletteHelper.GetTheme();
|
||||
theme.SetBaseTheme(colorScheme == ApplicationColorScheme.Dark ? Theme.Dark : Theme.Light);
|
||||
paletteHelper.SetTheme(theme);
|
||||
|
||||
var extensionsPaletteHelper = new MaterialDesignExtensions.Themes.PaletteHelper();
|
||||
MaterialDesignExtensions.Themes.PaletteHelper extensionsPaletteHelper = new MaterialDesignExtensions.Themes.PaletteHelper();
|
||||
extensionsPaletteHelper.SetLightDark(colorScheme == ApplicationColorScheme.Dark);
|
||||
}
|
||||
|
||||
@@ -213,7 +213,7 @@ namespace Artemis.UI.Screens
|
||||
|
||||
protected override void OnViewLoaded()
|
||||
{
|
||||
var window = (MaterialWindow) View;
|
||||
MaterialWindow window = (MaterialWindow) View;
|
||||
if (_windowSize.Value != null)
|
||||
_windowSize.Value.ApplyToWindow(window);
|
||||
else
|
||||
@@ -253,7 +253,7 @@ namespace Artemis.UI.Screens
|
||||
MainMessageQueue = null;
|
||||
_frameTimeUpdateTimer.Stop();
|
||||
|
||||
var window = (MaterialWindow) View;
|
||||
MaterialWindow window = (MaterialWindow) View;
|
||||
_windowSize.Value ??= new WindowSize();
|
||||
_windowSize.Value.ApplyFromWindow(window);
|
||||
_windowSize.Save();
|
||||
|
||||
@@ -63,11 +63,11 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs
|
||||
|
||||
try
|
||||
{
|
||||
using (var skiaImage = SKImage.FromPixels(e.BitmapBrush.Bitmap.PeekPixels()))
|
||||
using (SKImage skiaImage = SKImage.FromPixels(e.BitmapBrush.Bitmap.PeekPixels()))
|
||||
{
|
||||
var info = new SKImageInfo(skiaImage.Width, skiaImage.Height);
|
||||
SKImageInfo info = new SKImageInfo(skiaImage.Width, skiaImage.Height);
|
||||
writeableBitmap.Lock();
|
||||
using (var pixmap = new SKPixmap(info, writeableBitmap.BackBuffer, writeableBitmap.BackBufferStride))
|
||||
using (SKPixmap pixmap = new SKPixmap(info, writeableBitmap.BackBuffer, writeableBitmap.BackBufferStride))
|
||||
{
|
||||
skiaImage.ReadPixels(pixmap, 0, 0);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Artemis.Core.Services;
|
||||
using Artemis.UI.Ninject.Factories;
|
||||
@@ -28,8 +29,8 @@ namespace Artemis.UI.Screens.Settings.Tabs.Devices
|
||||
Items.Clear();
|
||||
await Task.Delay(200);
|
||||
|
||||
var instances = _surfaceService.ActiveSurface.Devices.Select(d => _settingsVmFactory.CreateDeviceSettingsViewModel(d)).ToList();
|
||||
foreach (var deviceSettingsViewModel in instances)
|
||||
List<DeviceSettingsViewModel> instances = _surfaceService.ActiveSurface.Devices.Select(d => _settingsVmFactory.CreateDeviceSettingsViewModel(d)).ToList();
|
||||
foreach (DeviceSettingsViewModel deviceSettingsViewModel in instances)
|
||||
Items.Add(deviceSettingsViewModel);
|
||||
});
|
||||
|
||||
|
||||
@@ -36,17 +36,17 @@ namespace Artemis.UI.Screens.Settings.Tabs.General
|
||||
LogLevels = new BindableCollection<ValueDescription>(EnumUtilities.GetAllValuesAndDescriptions(typeof(LogEventLevel)));
|
||||
ColorSchemes = new BindableCollection<ValueDescription>(EnumUtilities.GetAllValuesAndDescriptions(typeof(ApplicationColorScheme)));
|
||||
RenderScales = new List<Tuple<string, double>> {new Tuple<string, double>("10%", 0.1)};
|
||||
for (var i = 25; i <= 100; i += 25)
|
||||
for (int i = 25; i <= 100; i += 25)
|
||||
RenderScales.Add(new Tuple<string, double>(i + "%", i / 100.0));
|
||||
|
||||
TargetFrameRates = new List<Tuple<string, int>>();
|
||||
for (var i = 10; i <= 30; i += 5)
|
||||
for (int i = 10; i <= 30; i += 5)
|
||||
TargetFrameRates.Add(new Tuple<string, int>(i + " FPS", i));
|
||||
|
||||
// Anything else is kinda broken right now
|
||||
SampleSizes = new List<int> {1, 9};
|
||||
|
||||
var layerBrushProviders = pluginService.GetPluginsOfType<LayerBrushProvider>();
|
||||
List<LayerBrushProvider> layerBrushProviders = pluginService.GetPluginsOfType<LayerBrushProvider>();
|
||||
|
||||
LayerBrushDescriptors = new BindableCollection<LayerBrushDescriptor>(layerBrushProviders.SelectMany(l => l.LayerBrushDescriptors));
|
||||
_defaultLayerBrushDescriptor = _settingsService.GetSetting("ProfileEditor.DefaultLayerBrushDescriptor", new LayerBrushReference
|
||||
@@ -221,8 +221,8 @@ namespace Artemis.UI.Screens.Settings.Tabs.General
|
||||
{
|
||||
try
|
||||
{
|
||||
var autoRunFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), "Artemis.lnk");
|
||||
var executableFile = Constants.ExecutablePath;
|
||||
string autoRunFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), "Artemis.lnk");
|
||||
string executableFile = Constants.ExecutablePath;
|
||||
|
||||
if (File.Exists(autoRunFile))
|
||||
File.Delete(autoRunFile);
|
||||
|
||||
@@ -44,9 +44,9 @@ namespace Artemis.UI.Screens.Settings.Tabs.Modules
|
||||
if (dropInfo.TargetItem == dropInfo.Data)
|
||||
return;
|
||||
|
||||
var viewModel = (ModuleOrderModuleViewModel) dropInfo.Data;
|
||||
var targetCollection = (BindableCollection<ModuleOrderModuleViewModel>) dropInfo.TargetCollection;
|
||||
var insertIndex = dropInfo.InsertIndex;
|
||||
ModuleOrderModuleViewModel viewModel = (ModuleOrderModuleViewModel) dropInfo.Data;
|
||||
BindableCollection<ModuleOrderModuleViewModel> targetCollection = (BindableCollection<ModuleOrderModuleViewModel>) dropInfo.TargetCollection;
|
||||
int insertIndex = dropInfo.InsertIndex;
|
||||
|
||||
ModulePriorityCategory category;
|
||||
if (targetCollection == NormalModules)
|
||||
@@ -76,7 +76,7 @@ namespace Artemis.UI.Screens.Settings.Tabs.Modules
|
||||
OverlayModules.Clear();
|
||||
OverlayModules.AddRange(_modules.Where(m => m.Module.PriorityCategory == ModulePriorityCategory.Overlay).OrderBy(m => m.Module.Priority));
|
||||
|
||||
foreach (var moduleOrderModuleViewModel in _modules)
|
||||
foreach (ModuleOrderModuleViewModel moduleOrderModuleViewModel in _modules)
|
||||
moduleOrderModuleViewModel.Update();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Artemis.Core.Services;
|
||||
using Artemis.UI.Ninject.Factories;
|
||||
@@ -28,8 +29,8 @@ namespace Artemis.UI.Screens.Settings.Tabs.Plugins
|
||||
Items.Clear();
|
||||
await Task.Delay(200);
|
||||
|
||||
var instances = _pluginService.GetAllPluginInfo().Select(p => _settingsVmFactory.CreatePluginSettingsViewModel(p.Instance)).ToList();
|
||||
foreach (var pluginSettingsViewModel in instances)
|
||||
List<PluginSettingsViewModel> instances = _pluginService.GetAllPluginInfo().Select(p => _settingsVmFactory.CreatePluginSettingsViewModel(p.Instance)).ToList();
|
||||
foreach (PluginSettingsViewModel pluginSettingsViewModel in instances)
|
||||
Items.Add(pluginSettingsViewModel);
|
||||
});
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
using Artemis.Core;
|
||||
using Artemis.Core.DataModelExpansions;
|
||||
@@ -17,6 +18,7 @@ using Ninject;
|
||||
using Ninject.Parameters;
|
||||
using Serilog;
|
||||
using Stylet;
|
||||
using Module = Artemis.Core.Modules.Module;
|
||||
|
||||
namespace Artemis.UI.Screens.Settings.Tabs.Plugins
|
||||
{
|
||||
@@ -80,20 +82,20 @@ namespace Artemis.UI.Screens.Settings.Tabs.Plugins
|
||||
|
||||
public void OpenSettings()
|
||||
{
|
||||
var configurationViewModel = Plugin.ConfigurationDialog;
|
||||
PluginConfigurationDialog configurationViewModel = Plugin.ConfigurationDialog;
|
||||
if (configurationViewModel == null)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
// Limit to one constructor, there's no need to have more and it complicates things anyway
|
||||
var constructors = configurationViewModel.Type.GetConstructors();
|
||||
ConstructorInfo[] constructors = configurationViewModel.Type.GetConstructors();
|
||||
if (constructors.Length != 1)
|
||||
throw new ArtemisUIException("Plugin configuration dialogs must have exactly one constructor");
|
||||
|
||||
var pluginParameter = constructors.First().GetParameters().First(p => typeof(Plugin).IsAssignableFrom(p.ParameterType));
|
||||
var plugin = new ConstructorArgument(pluginParameter.Name, Plugin);
|
||||
var viewModel = (PluginConfigurationViewModel) PluginInfo.Kernel.Get(configurationViewModel.Type, plugin);
|
||||
ParameterInfo pluginParameter = constructors.First().GetParameters().First(p => typeof(Plugin).IsAssignableFrom(p.ParameterType));
|
||||
ConstructorArgument plugin = new ConstructorArgument(pluginParameter.Name, Plugin);
|
||||
PluginConfigurationViewModel viewModel = (PluginConfigurationViewModel) PluginInfo.Kernel.Get(configurationViewModel.Type, plugin);
|
||||
_windowManager.ShowDialog(new PluginSettingsWindowViewModel(viewModel, Icon));
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -136,7 +138,7 @@ namespace Artemis.UI.Screens.Settings.Tabs.Plugins
|
||||
{
|
||||
if (PluginInfo.Icon != null)
|
||||
{
|
||||
var parsedIcon = Enum.TryParse<PackIconKind>(PluginInfo.Icon, true, out var iconEnum);
|
||||
bool parsedIcon = Enum.TryParse<PackIconKind>(PluginInfo.Icon, true, out PackIconKind iconEnum);
|
||||
if (parsedIcon)
|
||||
return iconEnum;
|
||||
}
|
||||
@@ -203,10 +205,10 @@ namespace Artemis.UI.Screens.Settings.Tabs.Plugins
|
||||
|
||||
private async Task DisableDeviceProvider()
|
||||
{
|
||||
var restart = false;
|
||||
bool restart = false;
|
||||
|
||||
// If any plugin already requires a restart, don't ask the user again
|
||||
var restartQueued = _pluginService.GetAllPluginInfo().Any(p => p.Instance != null && !p.Enabled && p.Instance.Enabled);
|
||||
bool restartQueued = _pluginService.GetAllPluginInfo().Any(p => p.Instance != null && !p.Enabled && p.Instance.Enabled);
|
||||
// If the plugin isn't enabled (load failed), it can be disabled without a restart
|
||||
if (!restartQueued && Plugin.Enabled)
|
||||
{
|
||||
|
||||
@@ -84,9 +84,9 @@ namespace Artemis.UI.Screens.Shared
|
||||
|
||||
public void ProcessMouseScroll(object sender, MouseWheelEventArgs e)
|
||||
{
|
||||
var relative = GetRelativeMousePosition(sender, e);
|
||||
var absoluteX = relative.X * Zoom + PanX;
|
||||
var absoluteY = relative.Y * Zoom + PanY;
|
||||
Point relative = GetRelativeMousePosition(sender, e);
|
||||
double absoluteX = relative.X * Zoom + PanX;
|
||||
double absoluteY = relative.Y * Zoom + PanY;
|
||||
|
||||
if (e.Delta > 0)
|
||||
Zoom *= 1.1;
|
||||
@@ -120,8 +120,8 @@ namespace Artemis.UI.Screens.Shared
|
||||
if (LastPanPosition == null)
|
||||
LastPanPosition = e.GetPosition((IInputElement) sender);
|
||||
|
||||
var position = e.GetPosition((IInputElement) sender);
|
||||
var delta = LastPanPosition - position;
|
||||
Point position = e.GetPosition((IInputElement) sender);
|
||||
Vector? delta = LastPanPosition - position;
|
||||
|
||||
if (LimitToZero)
|
||||
{
|
||||
@@ -152,7 +152,7 @@ namespace Artemis.UI.Screens.Shared
|
||||
public Rect TransformContainingRect(Rect rect)
|
||||
{
|
||||
// Create the same transform group the view is using
|
||||
var transformGroup = new TransformGroup();
|
||||
TransformGroup transformGroup = new TransformGroup();
|
||||
transformGroup.Children.Add(new ScaleTransform(Zoom, Zoom));
|
||||
transformGroup.Children.Add(new TranslateTransform(PanX, PanY));
|
||||
|
||||
@@ -168,7 +168,7 @@ namespace Artemis.UI.Screens.Shared
|
||||
|
||||
private void SetZoomFromPercentage(double value)
|
||||
{
|
||||
var newZoom = value / 100;
|
||||
double newZoom = value / 100;
|
||||
// Focus towards the center of the zoomed area
|
||||
PanX += newZoom - Zoom;
|
||||
PanY += newZoom - Zoom;
|
||||
|
||||
@@ -117,8 +117,8 @@ namespace Artemis.UI.Screens.Sidebar
|
||||
// Add all activated modules
|
||||
SidebarItems.Add(new DividerNavigationItem());
|
||||
SidebarItems.Add(new SubheaderNavigationItem {Subheader = "Modules"});
|
||||
var modules = _pluginService.GetPluginsOfType<Module>().ToList();
|
||||
foreach (var module in modules)
|
||||
List<Module> modules = _pluginService.GetPluginsOfType<Module>().ToList();
|
||||
foreach (Module module in modules)
|
||||
AddModule(module);
|
||||
|
||||
// Select the top item, which will be one of the defaults
|
||||
@@ -149,13 +149,13 @@ namespace Artemis.UI.Screens.Sidebar
|
||||
else
|
||||
{
|
||||
// Icon is provided as string to avoid having to reference MaterialDesignThemes
|
||||
var parsedIcon = Enum.TryParse<PackIconKind>(module.DisplayIcon, true, out var iconEnum);
|
||||
bool parsedIcon = Enum.TryParse<PackIconKind>(module.DisplayIcon, true, out PackIconKind iconEnum);
|
||||
if (parsedIcon == false)
|
||||
iconEnum = PackIconKind.QuestionMarkCircle;
|
||||
icon = iconEnum;
|
||||
}
|
||||
|
||||
var sidebarItem = new FirstLevelNavigationItem {Icon = icon, Label = module.DisplayName};
|
||||
FirstLevelNavigationItem sidebarItem = new FirstLevelNavigationItem {Icon = icon, Label = module.DisplayName};
|
||||
SidebarItems.Add(sidebarItem);
|
||||
SidebarModules.Add(sidebarItem, module);
|
||||
}
|
||||
@@ -166,7 +166,7 @@ namespace Artemis.UI.Screens.Sidebar
|
||||
if (SidebarModules.All(io => io.Value != module))
|
||||
return;
|
||||
|
||||
var existing = SidebarModules.First(io => io.Value == module);
|
||||
KeyValuePair<INavigationItem, Module> existing = SidebarModules.First(io => io.Value == module);
|
||||
SidebarItems.Remove(existing.Key);
|
||||
SidebarModules.Remove(existing.Key);
|
||||
}
|
||||
@@ -176,7 +176,7 @@ namespace Artemis.UI.Screens.Sidebar
|
||||
if (!IsSidebarOpen)
|
||||
return;
|
||||
|
||||
var activeModules = SidebarModules.Count(m => m.Value.IsActivated);
|
||||
int activeModules = SidebarModules.Count(m => m.Value.IsActivated);
|
||||
ActiveModules = activeModules == 1 ? "1 active module" : $"{activeModules} active modules";
|
||||
}
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
|
||||
public ArtemisSurface CreateSurfaceConfiguration(string name)
|
||||
{
|
||||
var config = _surfaceService.CreateSurfaceConfiguration(name);
|
||||
ArtemisSurface config = _surfaceService.CreateSurfaceConfiguration(name);
|
||||
Execute.PostToUIThread(() => SurfaceConfigurations.Add(config));
|
||||
return config;
|
||||
}
|
||||
@@ -119,10 +119,10 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
private void LoadSurfaceConfigurations()
|
||||
{
|
||||
// Get surface configs
|
||||
var configs = _surfaceService.SurfaceConfigurations.ToList();
|
||||
List<ArtemisSurface> configs = _surfaceService.SurfaceConfigurations.ToList();
|
||||
|
||||
// Get the active config, if empty, create a default config
|
||||
var activeConfig = _surfaceService.ActiveSurface;
|
||||
ArtemisSurface activeConfig = _surfaceService.ActiveSurface;
|
||||
if (activeConfig == null)
|
||||
{
|
||||
activeConfig = CreateSurfaceConfiguration("Default");
|
||||
@@ -134,7 +134,7 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
{
|
||||
// Populate the UI collection
|
||||
SurfaceConfigurations.Clear();
|
||||
foreach (var surfaceConfiguration in configs)
|
||||
foreach (ArtemisSurface surfaceConfiguration in configs)
|
||||
SurfaceConfigurations.Add(surfaceConfiguration);
|
||||
|
||||
// Set the active config
|
||||
@@ -149,14 +149,14 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
{
|
||||
lock (Devices)
|
||||
{
|
||||
var existing = Devices.ToList();
|
||||
var deviceViewModels = new List<SurfaceDeviceViewModel>();
|
||||
List<SurfaceDeviceViewModel> existing = Devices.ToList();
|
||||
List<SurfaceDeviceViewModel> deviceViewModels = new List<SurfaceDeviceViewModel>();
|
||||
|
||||
// Add missing/update existing
|
||||
foreach (var surfaceDeviceConfiguration in SelectedSurface.Devices.OrderBy(d => d.ZIndex).ToList())
|
||||
foreach (ArtemisDevice surfaceDeviceConfiguration in SelectedSurface.Devices.OrderBy(d => d.ZIndex).ToList())
|
||||
{
|
||||
// Create VMs for missing devices
|
||||
var viewModel = existing.FirstOrDefault(vm => vm.Device.RgbDevice == surfaceDeviceConfiguration.RgbDevice);
|
||||
SurfaceDeviceViewModel viewModel = existing.FirstOrDefault(vm => vm.Device.RgbDevice == surfaceDeviceConfiguration.RgbDevice);
|
||||
if (viewModel == null)
|
||||
viewModel = new SurfaceDeviceViewModel(surfaceDeviceConfiguration);
|
||||
// Update existing devices
|
||||
@@ -195,7 +195,7 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
|
||||
public async Task DeleteSurfaceConfiguration(ArtemisSurface surface)
|
||||
{
|
||||
var result = await _dialogService.ShowConfirmDialogAt(
|
||||
bool result = await _dialogService.ShowConfirmDialogAt(
|
||||
"SurfaceListDialogHost",
|
||||
"Delete surface configuration",
|
||||
"Are you sure you want to delete\nthis surface configuration?"
|
||||
@@ -209,7 +209,7 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
|
||||
public async Task AddSurfaceConfiguration()
|
||||
{
|
||||
var result = await _dialogService.ShowDialogAt<SurfaceCreateViewModel>("SurfaceListDialogHost");
|
||||
object result = await _dialogService.ShowDialogAt<SurfaceCreateViewModel>("SurfaceListDialogHost");
|
||||
if (result is string name)
|
||||
CreateSurfaceConfiguration(name);
|
||||
}
|
||||
@@ -226,9 +226,9 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
public void BringToFront(SurfaceDeviceViewModel surfaceDeviceViewModel)
|
||||
{
|
||||
Devices.Move(Devices.IndexOf(surfaceDeviceViewModel), Devices.Count - 1);
|
||||
for (var i = 0; i < Devices.Count; i++)
|
||||
for (int i = 0; i < Devices.Count; i++)
|
||||
{
|
||||
var deviceViewModel = Devices[i];
|
||||
SurfaceDeviceViewModel deviceViewModel = Devices[i];
|
||||
deviceViewModel.Device.ZIndex = i + 1;
|
||||
}
|
||||
|
||||
@@ -237,13 +237,13 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
|
||||
public void BringForward(SurfaceDeviceViewModel surfaceDeviceViewModel)
|
||||
{
|
||||
var currentIndex = Devices.IndexOf(surfaceDeviceViewModel);
|
||||
var newIndex = Math.Min(currentIndex + 1, Devices.Count - 1);
|
||||
int currentIndex = Devices.IndexOf(surfaceDeviceViewModel);
|
||||
int newIndex = Math.Min(currentIndex + 1, Devices.Count - 1);
|
||||
Devices.Move(currentIndex, newIndex);
|
||||
|
||||
for (var i = 0; i < Devices.Count; i++)
|
||||
for (int i = 0; i < Devices.Count; i++)
|
||||
{
|
||||
var deviceViewModel = Devices[i];
|
||||
SurfaceDeviceViewModel deviceViewModel = Devices[i];
|
||||
deviceViewModel.Device.ZIndex = i + 1;
|
||||
}
|
||||
|
||||
@@ -253,9 +253,9 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
public void SendToBack(SurfaceDeviceViewModel surfaceDeviceViewModel)
|
||||
{
|
||||
Devices.Move(Devices.IndexOf(surfaceDeviceViewModel), 0);
|
||||
for (var i = 0; i < Devices.Count; i++)
|
||||
for (int i = 0; i < Devices.Count; i++)
|
||||
{
|
||||
var deviceViewModel = Devices[i];
|
||||
SurfaceDeviceViewModel deviceViewModel = Devices[i];
|
||||
deviceViewModel.Device.ZIndex = i + 1;
|
||||
}
|
||||
|
||||
@@ -264,12 +264,12 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
|
||||
public void SendBackward(SurfaceDeviceViewModel surfaceDeviceViewModel)
|
||||
{
|
||||
var currentIndex = Devices.IndexOf(surfaceDeviceViewModel);
|
||||
var newIndex = Math.Max(currentIndex - 1, 0);
|
||||
int currentIndex = Devices.IndexOf(surfaceDeviceViewModel);
|
||||
int newIndex = Math.Max(currentIndex - 1, 0);
|
||||
Devices.Move(currentIndex, newIndex);
|
||||
for (var i = 0; i < Devices.Count; i++)
|
||||
for (int i = 0; i < Devices.Count; i++)
|
||||
{
|
||||
var deviceViewModel = Devices[i];
|
||||
SurfaceDeviceViewModel deviceViewModel = Devices[i];
|
||||
deviceViewModel.Device.ZIndex = i + 1;
|
||||
}
|
||||
|
||||
@@ -278,7 +278,7 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
|
||||
public async Task ViewProperties(SurfaceDeviceViewModel surfaceDeviceViewModel)
|
||||
{
|
||||
var madeChanges = await _dialogService.ShowDialog<SurfaceDeviceConfigViewModel>(new Dictionary<string, object>
|
||||
object madeChanges = await _dialogService.ShowDialog<SurfaceDeviceConfigViewModel>(new Dictionary<string, object>
|
||||
{
|
||||
{"surfaceDeviceViewModel", surfaceDeviceViewModel}
|
||||
});
|
||||
@@ -305,8 +305,8 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
if (IsPanKeyDown() || e.ChangedButton == MouseButton.Right)
|
||||
return;
|
||||
|
||||
var position = e.GetPosition((IInputElement) sender);
|
||||
var relative = PanZoomViewModel.GetRelativeMousePosition(sender, e);
|
||||
Point position = e.GetPosition((IInputElement) sender);
|
||||
Point relative = PanZoomViewModel.GetRelativeMousePosition(sender, e);
|
||||
if (e.LeftButton == MouseButtonState.Pressed)
|
||||
StartMouseDrag(position, relative);
|
||||
else
|
||||
@@ -324,8 +324,8 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
return;
|
||||
}
|
||||
|
||||
var position = e.GetPosition((IInputElement) sender);
|
||||
var relative = PanZoomViewModel.GetRelativeMousePosition(sender, e);
|
||||
Point position = e.GetPosition((IInputElement) sender);
|
||||
Point relative = PanZoomViewModel.GetRelativeMousePosition(sender, e);
|
||||
if (_mouseDragStatus == MouseDragStatus.Dragging)
|
||||
MoveSelected(relative);
|
||||
else if (_mouseDragStatus == MouseDragStatus.Selecting)
|
||||
@@ -335,7 +335,7 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
private void StartMouseDrag(Point position, Point relative)
|
||||
{
|
||||
// If drag started on top of a device, initialise dragging
|
||||
var device = Devices.LastOrDefault(d => PanZoomViewModel.TransformContainingRect(d.DeviceRectangle).Contains(position));
|
||||
SurfaceDeviceViewModel device = Devices.LastOrDefault(d => PanZoomViewModel.TransformContainingRect(d.DeviceRectangle).Contains(position));
|
||||
if (device != null)
|
||||
{
|
||||
_rgbService.IsRenderPaused = true;
|
||||
@@ -345,14 +345,14 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
{
|
||||
if (!Keyboard.IsKeyDown(Key.LeftShift) && !Keyboard.IsKeyDown(Key.RightShift))
|
||||
{
|
||||
foreach (var others in Devices)
|
||||
foreach (SurfaceDeviceViewModel others in Devices)
|
||||
others.SelectionStatus = SelectionStatus.None;
|
||||
}
|
||||
|
||||
device.SelectionStatus = SelectionStatus.Selected;
|
||||
}
|
||||
|
||||
foreach (var selectedDevice in Devices.Where(d => d.SelectionStatus == SelectionStatus.Selected))
|
||||
foreach (SurfaceDeviceViewModel selectedDevice in Devices.Where(d => d.SelectionStatus == SelectionStatus.Selected))
|
||||
selectedDevice.StartMouseDrag(relative);
|
||||
}
|
||||
// Start multi-selection
|
||||
@@ -370,8 +370,8 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
{
|
||||
if (_mouseDragStatus != MouseDragStatus.Dragging)
|
||||
{
|
||||
var selectedRect = new Rect(_mouseDragStartPoint, position);
|
||||
foreach (var device in Devices)
|
||||
Rect selectedRect = new Rect(_mouseDragStartPoint, position);
|
||||
foreach (SurfaceDeviceViewModel device in Devices)
|
||||
{
|
||||
if (PanZoomViewModel.TransformContainingRect(device.DeviceRectangle).IntersectsWith(selectedRect))
|
||||
device.SelectionStatus = SelectionStatus.Selected;
|
||||
@@ -391,10 +391,10 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
if (IsPanKeyDown())
|
||||
return;
|
||||
|
||||
var selectedRect = new Rect(_mouseDragStartPoint, position);
|
||||
Rect selectedRect = new Rect(_mouseDragStartPoint, position);
|
||||
SelectionRectangle.Rect = selectedRect;
|
||||
|
||||
foreach (var device in Devices)
|
||||
foreach (SurfaceDeviceViewModel device in Devices)
|
||||
{
|
||||
if (PanZoomViewModel.TransformContainingRect(device.DeviceRectangle).IntersectsWith(selectedRect))
|
||||
device.SelectionStatus = SelectionStatus.Selected;
|
||||
@@ -405,7 +405,7 @@ namespace Artemis.UI.Screens.SurfaceEditor
|
||||
|
||||
private void MoveSelected(Point position)
|
||||
{
|
||||
foreach (var device in Devices.Where(d => d.SelectionStatus == SelectionStatus.Selected))
|
||||
foreach (SurfaceDeviceViewModel device in Devices.Where(d => d.SelectionStatus == SelectionStatus.Selected))
|
||||
device.UpdateMouseDrag(position);
|
||||
}
|
||||
|
||||
|
||||
@@ -53,8 +53,8 @@ namespace Artemis.UI.Screens.SurfaceEditor.Visualization
|
||||
|
||||
public void UpdateMouseDrag(Point mousePosition)
|
||||
{
|
||||
var roundedX = Math.Round((mousePosition.X + _dragOffsetX) / 10, 0, MidpointRounding.AwayFromZero) * 10;
|
||||
var roundedY = Math.Round((mousePosition.Y + _dragOffsetY) / 10, 0, MidpointRounding.AwayFromZero) * 10;
|
||||
double roundedX = Math.Round((mousePosition.X + _dragOffsetX) / 10, 0, MidpointRounding.AwayFromZero) * 10;
|
||||
double roundedY = Math.Round((mousePosition.Y + _dragOffsetY) / 10, 0, MidpointRounding.AwayFromZero) * 10;
|
||||
Device.X = Math.Max(0, roundedX);
|
||||
Device.Y = Math.Max(0, roundedY);
|
||||
}
|
||||
|
||||
@@ -25,8 +25,8 @@ namespace Artemis.UI.Screens
|
||||
_debugService = debugService;
|
||||
CanShowRootViewModel = true;
|
||||
|
||||
var autoRunning = Bootstrapper.StartupArguments.Contains("--autorun");
|
||||
var showOnAutoRun = settingsService.GetSetting("UI.ShowOnStartup", true).Value;
|
||||
bool autoRunning = Bootstrapper.StartupArguments.Contains("--autorun");
|
||||
bool showOnAutoRun = settingsService.GetSetting("UI.ShowOnStartup", true).Value;
|
||||
if (!autoRunning || showOnAutoRun)
|
||||
{
|
||||
ShowSplashScreen();
|
||||
@@ -54,7 +54,7 @@ namespace Artemis.UI.Screens
|
||||
{
|
||||
_splashViewModel?.RequestClose();
|
||||
_splashViewModel = null;
|
||||
var rootViewModel = _kernel.Get<RootViewModel>();
|
||||
RootViewModel rootViewModel = _kernel.Get<RootViewModel>();
|
||||
rootViewModel.Closed += RootViewModelOnClosed;
|
||||
_windowManager.ShowWindow(rootViewModel);
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user