From 8adc6b1b9d5f9e1affd1c73a816d10b267fc79d9 Mon Sep 17 00:00:00 2001 From: SpoinkyNL Date: Sat, 21 May 2016 23:57:20 +0200 Subject: [PATCH] Implemented most of layer grouping --- Artemis/Artemis/Artemis.csproj | 30 ++++--- .../BindableSelectedItemBehavior.cs | 88 ++++++++++--------- Artemis/Artemis/Models/Profiles/LayerModel.cs | 18 +++- .../Artemis/Models/Profiles/ProfileModel.cs | 51 ++++++++++- ...rtiesModel.cs => FolderPropertiesModel.cs} | 2 +- .../Properties/LayerPropertiesModel.cs | 2 +- .../LayerEditor/LayerEditorViewModel.cs | 10 +++ .../Properties/FolderPropertiesViewModel.cs | 33 +++++++ .../HeadsetPropertiesViewModel.cs | 2 +- .../KeyboardPropertiesViewModel.cs | 3 +- .../LayerPropertiesViewModel.cs | 2 +- .../MousePropertiesViewModel.cs | 2 +- .../ViewModels/ProfileEditorViewModel.cs | 28 ++++-- .../LayerEditor/HeadsetPropertiesView.xaml.cs | 28 ------ .../KeyboardPropertiesView.xaml.cs | 28 ------ .../LayerEditor/MousePropertiesView.xaml.cs | 28 ------ .../Properties/FolderPropertiesView.xaml | 14 +++ .../Properties/FolderPropertiesView.xaml.cs | 15 ++++ .../HeadsetPropertiesView.xaml | 2 +- .../Properties/HeadsetPropertiesView.xaml.cs | 15 ++++ .../KeyboardPropertiesView.xaml | 2 +- .../Properties/KeyboardPropertiesView.xaml.cs | 15 ++++ .../{ => Properties}/MousePropertiesView.xaml | 2 +- .../Properties/MousePropertiesView.xaml.cs | 15 ++++ Artemis/Artemis/Views/ProfileEditorView.xaml | 5 ++ 25 files changed, 279 insertions(+), 161 deletions(-) rename Artemis/Artemis/Models/Profiles/Properties/{GenericPropertiesModel.cs => FolderPropertiesModel.cs} (81%) create mode 100644 Artemis/Artemis/ViewModels/LayerEditor/Properties/FolderPropertiesViewModel.cs rename Artemis/Artemis/ViewModels/LayerEditor/{ => Properties}/HeadsetPropertiesViewModel.cs (94%) rename Artemis/Artemis/ViewModels/LayerEditor/{ => Properties}/KeyboardPropertiesViewModel.cs (97%) rename Artemis/Artemis/ViewModels/LayerEditor/{ => Properties}/LayerPropertiesViewModel.cs (89%) rename Artemis/Artemis/ViewModels/LayerEditor/{ => Properties}/MousePropertiesViewModel.cs (94%) delete mode 100644 Artemis/Artemis/Views/LayerEditor/HeadsetPropertiesView.xaml.cs delete mode 100644 Artemis/Artemis/Views/LayerEditor/KeyboardPropertiesView.xaml.cs delete mode 100644 Artemis/Artemis/Views/LayerEditor/MousePropertiesView.xaml.cs create mode 100644 Artemis/Artemis/Views/LayerEditor/Properties/FolderPropertiesView.xaml create mode 100644 Artemis/Artemis/Views/LayerEditor/Properties/FolderPropertiesView.xaml.cs rename Artemis/Artemis/Views/LayerEditor/{ => Properties}/HeadsetPropertiesView.xaml (95%) create mode 100644 Artemis/Artemis/Views/LayerEditor/Properties/HeadsetPropertiesView.xaml.cs rename Artemis/Artemis/Views/LayerEditor/{ => Properties}/KeyboardPropertiesView.xaml (98%) create mode 100644 Artemis/Artemis/Views/LayerEditor/Properties/KeyboardPropertiesView.xaml.cs rename Artemis/Artemis/Views/LayerEditor/{ => Properties}/MousePropertiesView.xaml (95%) create mode 100644 Artemis/Artemis/Views/LayerEditor/Properties/MousePropertiesView.xaml.cs diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj index 05ae14294..33e0b522d 100644 --- a/Artemis/Artemis/Artemis.csproj +++ b/Artemis/Artemis/Artemis.csproj @@ -313,7 +313,7 @@ - + @@ -458,13 +458,14 @@ - + - - - + + + + @@ -501,10 +502,13 @@ Witcher3View.xaml - + + FolderPropertiesView.xaml + + HeadsetPropertiesView.xaml - + KeyboardPropertiesView.xaml @@ -516,7 +520,7 @@ LayerEditorView.xaml - + MousePropertiesView.xaml @@ -686,11 +690,15 @@ Designer MSBuild:Compile - + Designer MSBuild:Compile - + + Designer + MSBuild:Compile + + Designer MSBuild:Compile @@ -706,7 +714,7 @@ MSBuild:Compile Designer - + Designer MSBuild:Compile diff --git a/Artemis/Artemis/ItemBehaviours/BindableSelectedItemBehavior.cs b/Artemis/Artemis/ItemBehaviours/BindableSelectedItemBehavior.cs index 595e9e503..d12b3ceb1 100644 --- a/Artemis/Artemis/ItemBehaviours/BindableSelectedItemBehavior.cs +++ b/Artemis/Artemis/ItemBehaviours/BindableSelectedItemBehavior.cs @@ -1,28 +1,26 @@ -using System.Collections; +using System.Linq; +using System.Reflection; using System.Windows; using System.Windows.Controls; using System.Windows.Interactivity; namespace Artemis.ItemBehaviours { - /// - /// Steve Greatrex - http://stackoverflow.com/a/5118406/5015269 - /// public class BindableSelectedItemBehavior : Behavior { protected override void OnAttached() { base.OnAttached(); - AssociatedObject.SelectedItemChanged += OnTreeViewSelectedItemChanged; } protected override void OnDetaching() { base.OnDetaching(); - if (AssociatedObject != null) + { AssociatedObject.SelectedItemChanged -= OnTreeViewSelectedItemChanged; + } } private void OnTreeViewSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs e) @@ -38,51 +36,55 @@ namespace Artemis.ItemBehaviours set { SetValue(SelectedItemProperty, value); } } - public static readonly DependencyProperty SelectedItemProperty = DependencyProperty.Register("SelectedItem", - typeof(object), typeof(BindableSelectedItemBehavior), new UIPropertyMetadata(null, OnSelectedItemChanged)); + public static readonly DependencyProperty SelectedItemProperty = + DependencyProperty.Register("SelectedItem", typeof(object), typeof(BindableSelectedItemBehavior), + new UIPropertyMetadata(null, OnSelectedItemChanged)); private static void OnSelectedItemChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { - var item = ((BindableSelectedItemBehavior) sender).AssociatedObject - .ItemContainerGenerator.ContainerFromItem(e.NewValue) as TreeViewItem; - if (item != null) - item.SetValue(TreeViewItem.IsSelectedProperty, true); + var behavior = sender as BindableSelectedItemBehavior; + var tree = behavior?.AssociatedObject; + if (tree == null) return; + if (e.NewValue == null) + foreach (var item in tree.Items.OfType()) + item.SetValue(TreeViewItem.IsSelectedProperty, false); + var treeViewItem = e.NewValue as TreeViewItem; + if (treeViewItem != null) + treeViewItem.SetValue(TreeViewItem.IsSelectedProperty, true); else - ClearTreeViewSelection(((BindableSelectedItemBehavior) sender).AssociatedObject); - } - - /// - /// Clears a TreeView's selected item recursively - /// Tom Wright - http://stackoverflow.com/a/1406116/5015269 - /// - /// - public static void ClearTreeViewSelection(TreeView tv) - { - if (tv != null) - ClearTreeViewItemsControlSelection(tv.Items, tv.ItemContainerGenerator); - } - - /// - /// Clears a TreeView's selected item recursively - /// Tom Wright - http://stackoverflow.com/a/1406116/5015269 - /// - /// - /// - private static void ClearTreeViewItemsControlSelection(ICollection ic, ItemContainerGenerator icg) - { - if ((ic == null) || (icg == null)) - return; - - for (var i = 0; i < ic.Count; i++) { - var tvi = icg.ContainerFromIndex(i) as TreeViewItem; - if (tvi == null) - continue; - ClearTreeViewItemsControlSelection(tvi.Items, tvi.ItemContainerGenerator); - tvi.IsSelected = false; + var itemsHostProperty = tree.GetType() + .GetProperty("ItemsHost", BindingFlags.NonPublic | BindingFlags.Instance); + var itemsHost = itemsHostProperty?.GetValue(tree, null) as Panel; + if (itemsHost == null) return; + foreach (var item in itemsHost.Children.OfType()) + { + if (WalkTreeViewItem(item, e.NewValue)) + break; + } } } + public static bool WalkTreeViewItem(TreeViewItem treeViewItem, object selectedValue) + { + if (treeViewItem.DataContext == selectedValue) + { + treeViewItem.SetValue(TreeViewItem.IsSelectedProperty, true); + treeViewItem.Focus(); + return true; + } + var itemsHostProperty = treeViewItem.GetType() + .GetProperty("ItemsHost", BindingFlags.NonPublic | BindingFlags.Instance); + var itemsHost = itemsHostProperty?.GetValue(treeViewItem, null) as Panel; + if (itemsHost == null) return false; + foreach (var item in itemsHost.Children.OfType()) + { + if (WalkTreeViewItem(item, selectedValue)) + break; + } + return false; + } + #endregion } } \ No newline at end of file diff --git a/Artemis/Artemis/Models/Profiles/LayerModel.cs b/Artemis/Artemis/Models/Profiles/LayerModel.cs index 8e8688472..c5a573a5d 100644 --- a/Artemis/Artemis/Models/Profiles/LayerModel.cs +++ b/Artemis/Artemis/Models/Profiles/LayerModel.cs @@ -1,4 +1,5 @@ -using System.ComponentModel; +using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Windows.Media; using System.Xml.Serialization; @@ -20,6 +21,7 @@ namespace Artemis.Models.Profiles public string Name { get; set; } public LayerType LayerType { get; set; } public bool Enabled { get; set; } + public bool Expanded { get; set; } public int Order { get; set; } public LayerPropertiesModel Properties { get; set; } public ChildItemCollection Children { get; } @@ -167,7 +169,7 @@ namespace Artemis.Models.Profiles selectedLayer.Order = newOrder; } - private void FixOrder() + public void FixOrder() { Children.Sort(l => l.Order); for (var i = 0; i < Children.Count; i++) @@ -183,6 +185,18 @@ namespace Artemis.Models.Profiles return Enabled && (LayerType == LayerType.Keyboard || LayerType == LayerType.KeyboardGif); } + public IEnumerable GetAllLayers() + { + var layers = new List(); + foreach (var layerModel in Children) + { + layers.Add(layerModel); + layers.AddRange(layerModel.Children); + } + + return layers; + } + #region IChildItem Members LayerModel IChildItem.Parent diff --git a/Artemis/Artemis/Models/Profiles/ProfileModel.cs b/Artemis/Artemis/Models/Profiles/ProfileModel.cs index 5f2dea312..c06c326cd 100644 --- a/Artemis/Artemis/Models/Profiles/ProfileModel.cs +++ b/Artemis/Artemis/Models/Profiles/ProfileModel.cs @@ -1,4 +1,5 @@ -using System.Drawing; +using System.Collections.Generic; +using System.Drawing; using System.Linq; using System.Windows; using System.Windows.Media; @@ -28,7 +29,7 @@ namespace Artemis.Models.Profiles [XmlIgnore] public DrawingVisual DrawingVisual { get; set; } - + protected bool Equals(ProfileModel other) { return string.Equals(Name, other.Name) && @@ -100,6 +101,34 @@ namespace Artemis.Models.Profiles if (target == null) return; + if (target.LayerType == LayerType.Folder) + { + if (selectedLayer.Parent == null) + selectedLayer.Profile.Layers.Remove(selectedLayer); + else + selectedLayer.Parent.Children.Remove(selectedLayer); + + target.Children.Add(selectedLayer); + + + if (moveUp) + { + var parentTarget = target.Children.OrderBy(c => c.Order).LastOrDefault(); + if (parentTarget != null) + selectedLayer.Order = parentTarget.Order + 1; + else + selectedLayer.Order = 1; + } + else + { + var parentTarget = target.Children.OrderBy(c => c.Order).LastOrDefault(); + if (parentTarget != null) + selectedLayer.Order = parentTarget.Order - 1; + else + selectedLayer.Order = 1; + } + target.FixOrder(); + } target.Order = selectedLayer.Order; selectedLayer.Order = newOrder; } @@ -111,7 +140,8 @@ namespace Artemis.Models.Profiles Layers[i].Order = i; } - public Bitmap GenerateBitmap(Rect keyboardRect, IGameDataModel gameDataModel, bool preview, bool updateAnimations) + public Bitmap GenerateBitmap(Rect keyboardRect, IGameDataModel gameDataModel, bool preview, + bool updateAnimations) { Bitmap bitmap = null; DrawingVisual.Dispatcher.Invoke(() => @@ -149,5 +179,20 @@ namespace Artemis.Models.Profiles return result; } + + /// + /// Gives all the layers and their children in a flat list + /// + public List GetAllLayers() + { + var layers = new List(); + foreach (var layerModel in Layers) + { + layers.Add(layerModel); + layers.AddRange(layerModel.GetAllLayers()); + } + + return layers; + } } } \ No newline at end of file diff --git a/Artemis/Artemis/Models/Profiles/Properties/GenericPropertiesModel.cs b/Artemis/Artemis/Models/Profiles/Properties/FolderPropertiesModel.cs similarity index 81% rename from Artemis/Artemis/Models/Profiles/Properties/GenericPropertiesModel.cs rename to Artemis/Artemis/Models/Profiles/Properties/FolderPropertiesModel.cs index a09f12fc8..65bcc8603 100644 --- a/Artemis/Artemis/Models/Profiles/Properties/GenericPropertiesModel.cs +++ b/Artemis/Artemis/Models/Profiles/Properties/FolderPropertiesModel.cs @@ -3,7 +3,7 @@ using Artemis.Utilities; namespace Artemis.Models.Profiles.Properties { - public class GenericPropertiesModel : LayerPropertiesModel + public class FolderPropertiesModel : LayerPropertiesModel { public override LayerPropertiesModel GetAppliedProperties(IGameDataModel dataModel) { diff --git a/Artemis/Artemis/Models/Profiles/Properties/LayerPropertiesModel.cs b/Artemis/Artemis/Models/Profiles/Properties/LayerPropertiesModel.cs index 3bf897a0f..d9a43be3a 100644 --- a/Artemis/Artemis/Models/Profiles/Properties/LayerPropertiesModel.cs +++ b/Artemis/Artemis/Models/Profiles/Properties/LayerPropertiesModel.cs @@ -12,7 +12,7 @@ namespace Artemis.Models.Profiles.Properties [XmlInclude(typeof(KeyboardPropertiesModel))] [XmlInclude(typeof(MousePropertiesModel))] [XmlInclude(typeof(HeadsetPropertiesModel))] - [XmlInclude(typeof(GenericPropertiesModel))] + [XmlInclude(typeof(FolderPropertiesModel))] public abstract class LayerPropertiesModel { protected LayerPropertiesModel() diff --git a/Artemis/Artemis/ViewModels/LayerEditor/LayerEditorViewModel.cs b/Artemis/Artemis/ViewModels/LayerEditor/LayerEditorViewModel.cs index 3b59564ac..c3c1df973 100644 --- a/Artemis/Artemis/ViewModels/LayerEditor/LayerEditorViewModel.cs +++ b/Artemis/Artemis/ViewModels/LayerEditor/LayerEditorViewModel.cs @@ -6,6 +6,7 @@ using Artemis.Models.Profiles; using Artemis.Models.Profiles.Properties; using Artemis.Services; using Artemis.Utilities; +using Artemis.ViewModels.LayerEditor.Properties; using Caliburn.Micro; using Ninject; @@ -127,6 +128,13 @@ namespace Artemis.ViewModels.LayerEditor if (model != null) model.IsGif = LayerType == LayerType.KeyboardGif; + // If the layer was a folder, but isn't anymore, assign it's children to it's parent. + if (LayerType != LayerType.Folder && LayerPropertiesViewModel is FolderPropertiesViewModel) + { + foreach (var child in Layer.Children) + child.Parent = Layer.Parent; + } + // Apply the proper PropertiesViewModel if ((LayerType == LayerType.Keyboard || LayerType == LayerType.KeyboardGif) && !(LayerPropertiesViewModel is KeyboardPropertiesViewModel)) @@ -140,6 +148,8 @@ namespace Artemis.ViewModels.LayerEditor LayerPropertiesViewModel = new MousePropertiesViewModel(_gameDataModel, Layer.Properties); else if (LayerType == LayerType.Headset && !(LayerPropertiesViewModel is HeadsetPropertiesViewModel)) LayerPropertiesViewModel = new HeadsetPropertiesViewModel(_gameDataModel, Layer.Properties); + else if (LayerType == LayerType.Folder && !(LayerPropertiesViewModel is FolderPropertiesViewModel)) + LayerPropertiesViewModel = new FolderPropertiesViewModel(_gameDataModel, Layer.Properties); NotifyOfPropertyChange(() => LayerPropertiesViewModel); } diff --git a/Artemis/Artemis/ViewModels/LayerEditor/Properties/FolderPropertiesViewModel.cs b/Artemis/Artemis/ViewModels/LayerEditor/Properties/FolderPropertiesViewModel.cs new file mode 100644 index 000000000..0603ee33c --- /dev/null +++ b/Artemis/Artemis/ViewModels/LayerEditor/Properties/FolderPropertiesViewModel.cs @@ -0,0 +1,33 @@ +using Artemis.Models.Interfaces; +using Artemis.Models.Profiles.Properties; +using Artemis.Utilities; + +namespace Artemis.ViewModels.LayerEditor.Properties +{ + public class FolderPropertiesViewModel : LayerPropertiesViewModel + { + private LayerPropertiesModel _proposedProperties; + + public FolderPropertiesViewModel(IGameDataModel gameDataModel, LayerPropertiesModel properties) + : base(gameDataModel) + { + ProposedProperties = GeneralHelpers.Clone(properties); + } + + public LayerPropertiesModel ProposedProperties + { + get { return _proposedProperties; } + set + { + if (Equals(value, _proposedProperties)) return; + _proposedProperties = value; + NotifyOfPropertyChange(() => ProposedProperties); + } + } + + public override LayerPropertiesModel GetAppliedProperties() + { + return GeneralHelpers.Clone(ProposedProperties); + } + } +} \ No newline at end of file diff --git a/Artemis/Artemis/ViewModels/LayerEditor/HeadsetPropertiesViewModel.cs b/Artemis/Artemis/ViewModels/LayerEditor/Properties/HeadsetPropertiesViewModel.cs similarity index 94% rename from Artemis/Artemis/ViewModels/LayerEditor/HeadsetPropertiesViewModel.cs rename to Artemis/Artemis/ViewModels/LayerEditor/Properties/HeadsetPropertiesViewModel.cs index 7460d8b98..5e5ec5b93 100644 --- a/Artemis/Artemis/ViewModels/LayerEditor/HeadsetPropertiesViewModel.cs +++ b/Artemis/Artemis/ViewModels/LayerEditor/Properties/HeadsetPropertiesViewModel.cs @@ -2,7 +2,7 @@ using Artemis.Models.Profiles.Properties; using Artemis.Utilities; -namespace Artemis.ViewModels.LayerEditor +namespace Artemis.ViewModels.LayerEditor.Properties { public class HeadsetPropertiesViewModel : LayerPropertiesViewModel { diff --git a/Artemis/Artemis/ViewModels/LayerEditor/KeyboardPropertiesViewModel.cs b/Artemis/Artemis/ViewModels/LayerEditor/Properties/KeyboardPropertiesViewModel.cs similarity index 97% rename from Artemis/Artemis/ViewModels/LayerEditor/KeyboardPropertiesViewModel.cs rename to Artemis/Artemis/ViewModels/LayerEditor/Properties/KeyboardPropertiesViewModel.cs index bc511a4a8..026ca8b79 100644 --- a/Artemis/Artemis/ViewModels/LayerEditor/KeyboardPropertiesViewModel.cs +++ b/Artemis/Artemis/ViewModels/LayerEditor/Properties/KeyboardPropertiesViewModel.cs @@ -1,11 +1,10 @@ using System.Windows.Forms; using Artemis.Models.Interfaces; -using Artemis.Models.Profiles; using Artemis.Models.Profiles.Properties; using Artemis.Utilities; using Caliburn.Micro; -namespace Artemis.ViewModels.LayerEditor +namespace Artemis.ViewModels.LayerEditor.Properties { public class KeyboardPropertiesViewModel : LayerPropertiesViewModel { diff --git a/Artemis/Artemis/ViewModels/LayerEditor/LayerPropertiesViewModel.cs b/Artemis/Artemis/ViewModels/LayerEditor/Properties/LayerPropertiesViewModel.cs similarity index 89% rename from Artemis/Artemis/ViewModels/LayerEditor/LayerPropertiesViewModel.cs rename to Artemis/Artemis/ViewModels/LayerEditor/Properties/LayerPropertiesViewModel.cs index 367878a8e..441490ea9 100644 --- a/Artemis/Artemis/ViewModels/LayerEditor/LayerPropertiesViewModel.cs +++ b/Artemis/Artemis/ViewModels/LayerEditor/Properties/LayerPropertiesViewModel.cs @@ -2,7 +2,7 @@ using Artemis.Models.Profiles.Properties; using Caliburn.Micro; -namespace Artemis.ViewModels.LayerEditor +namespace Artemis.ViewModels.LayerEditor.Properties { public abstract class LayerPropertiesViewModel : PropertyChangedBase { diff --git a/Artemis/Artemis/ViewModels/LayerEditor/MousePropertiesViewModel.cs b/Artemis/Artemis/ViewModels/LayerEditor/Properties/MousePropertiesViewModel.cs similarity index 94% rename from Artemis/Artemis/ViewModels/LayerEditor/MousePropertiesViewModel.cs rename to Artemis/Artemis/ViewModels/LayerEditor/Properties/MousePropertiesViewModel.cs index 950f0492a..0869b28e4 100644 --- a/Artemis/Artemis/ViewModels/LayerEditor/MousePropertiesViewModel.cs +++ b/Artemis/Artemis/ViewModels/LayerEditor/Properties/MousePropertiesViewModel.cs @@ -2,7 +2,7 @@ using Artemis.Models.Profiles.Properties; using Artemis.Utilities; -namespace Artemis.ViewModels.LayerEditor +namespace Artemis.ViewModels.LayerEditor.Properties { public class MousePropertiesViewModel : LayerPropertiesViewModel { diff --git a/Artemis/Artemis/ViewModels/ProfileEditorViewModel.cs b/Artemis/Artemis/ViewModels/ProfileEditorViewModel.cs index 5eada8599..156c8c7c2 100644 --- a/Artemis/Artemis/ViewModels/ProfileEditorViewModel.cs +++ b/Artemis/Artemis/ViewModels/ProfileEditorViewModel.cs @@ -119,7 +119,7 @@ namespace Artemis.ViewModels Layers.Clear(); if (_selectedProfile != null) - Layers.AddRange(_selectedProfile.Layers); + Layers.AddRange(SelectedProfile.Layers); NotifyOfPropertyChange(() => SelectedProfile); NotifyOfPropertyChange(() => CanAddLayer); @@ -142,8 +142,8 @@ namespace Artemis.ViewModels public PreviewSettings? PreviewSettings => ActiveKeyboard?.PreviewSettings; - public bool CanAddLayer => _selectedProfile != null; - public bool CanRemoveLayer => _selectedProfile != null && _selectedLayer != null; + public bool CanAddLayer => SelectedProfile != null; + public bool CanRemoveLayer => SelectedProfile != null && _selectedLayer != null; private KeyboardProvider ActiveKeyboard { get; set; } @@ -312,7 +312,10 @@ namespace Artemis.ViewModels else SelectedLayer.Profile.Reorder(SelectedLayer, true); - NotifyOfPropertyChange(() => Layers); + // Update the UI + Layers.Clear(); + if (SelectedProfile != null) + Layers.AddRange(SelectedProfile.Layers); SelectedLayer = reorderLayer; } @@ -331,7 +334,10 @@ namespace Artemis.ViewModels else SelectedLayer.Profile.Reorder(SelectedLayer, false); - NotifyOfPropertyChange(() => Layers); + // Update the UI + Layers.Clear(); + if (SelectedProfile != null) + Layers.AddRange(SelectedProfile.Layers); SelectedLayer = reorderLayer; } @@ -363,7 +369,7 @@ namespace Artemis.ViewModels var x = pos.X/((double) ActiveKeyboard.PreviewSettings.Width/ActiveKeyboard.Width); var y = pos.Y/((double) ActiveKeyboard.PreviewSettings.Height/ActiveKeyboard.Height); - var hoverLayer = SelectedProfile.Layers + var hoverLayer = SelectedProfile.GetAllLayers() .OrderBy(l => l.Order) .Where(l => l.MustDraw()) .FirstOrDefault(l => ((KeyboardPropertiesModel) l.Properties) @@ -385,7 +391,7 @@ namespace Artemis.ViewModels var pos = e.GetPosition((Image) e.OriginalSource); var x = pos.X/((double) ActiveKeyboard.PreviewSettings.Width/ActiveKeyboard.Width); var y = pos.Y/((double) ActiveKeyboard.PreviewSettings.Height/ActiveKeyboard.Height); - var hoverLayer = SelectedProfile.Layers.OrderBy(l => l.Order).Where(l => l.MustDraw()) + var hoverLayer = SelectedProfile.GetAllLayers().OrderBy(l => l.Order).Where(l => l.MustDraw()) .FirstOrDefault(l => ((KeyboardPropertiesModel) l.Properties).GetRect(1).Contains(x, y)); HandleDragging(e, x, y, hoverLayer); @@ -435,7 +441,13 @@ namespace Artemis.ViewModels drawingContext.DrawRectangle(new SolidColorBrush(Color.FromArgb(0, 0, 0, 0)), null, keyboardRect); // Draw the layers - foreach (var layer in _selectedProfile.Layers.OrderByDescending(l => l.Order).Where(l => l.MustDraw())) + var drawLayers = SelectedProfile.GetAllLayers() + .OrderByDescending(l => l.Order) + .Where(l => l.Enabled && + (l.LayerType == LayerType.Keyboard || + l.LayerType == LayerType.KeyboardGif || + l.LayerType == LayerType.Folder)); + foreach (var layer in drawLayers) layer.Draw(null, drawingContext, true, false); // Get the selection color diff --git a/Artemis/Artemis/Views/LayerEditor/HeadsetPropertiesView.xaml.cs b/Artemis/Artemis/Views/LayerEditor/HeadsetPropertiesView.xaml.cs deleted file mode 100644 index cfc76f9a0..000000000 --- a/Artemis/Artemis/Views/LayerEditor/HeadsetPropertiesView.xaml.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; - -namespace Artemis.Views.LayerEditor -{ - /// - /// Interaction logic for HeadsetPropertiesView.xaml - /// - public partial class HeadsetPropertiesView : UserControl - { - public HeadsetPropertiesView() - { - InitializeComponent(); - } - } -} diff --git a/Artemis/Artemis/Views/LayerEditor/KeyboardPropertiesView.xaml.cs b/Artemis/Artemis/Views/LayerEditor/KeyboardPropertiesView.xaml.cs deleted file mode 100644 index b375428d5..000000000 --- a/Artemis/Artemis/Views/LayerEditor/KeyboardPropertiesView.xaml.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; - -namespace Artemis.Views.LayerEditor -{ - /// - /// Interaction logic for KeyboardPropertiesView.xaml - /// - public partial class KeyboardPropertiesView : UserControl - { - public KeyboardPropertiesView() - { - InitializeComponent(); - } - } -} diff --git a/Artemis/Artemis/Views/LayerEditor/MousePropertiesView.xaml.cs b/Artemis/Artemis/Views/LayerEditor/MousePropertiesView.xaml.cs deleted file mode 100644 index a4b02e512..000000000 --- a/Artemis/Artemis/Views/LayerEditor/MousePropertiesView.xaml.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; - -namespace Artemis.Views.LayerEditor -{ - /// - /// Interaction logic for MousePropertiesView.xaml - /// - public partial class MousePropertiesView : UserControl - { - public MousePropertiesView() - { - InitializeComponent(); - } - } -} diff --git a/Artemis/Artemis/Views/LayerEditor/Properties/FolderPropertiesView.xaml b/Artemis/Artemis/Views/LayerEditor/Properties/FolderPropertiesView.xaml new file mode 100644 index 000000000..e1d82bec0 --- /dev/null +++ b/Artemis/Artemis/Views/LayerEditor/Properties/FolderPropertiesView.xaml @@ -0,0 +1,14 @@ + + + + + diff --git a/Artemis/Artemis/Views/LayerEditor/Properties/FolderPropertiesView.xaml.cs b/Artemis/Artemis/Views/LayerEditor/Properties/FolderPropertiesView.xaml.cs new file mode 100644 index 000000000..31e360795 --- /dev/null +++ b/Artemis/Artemis/Views/LayerEditor/Properties/FolderPropertiesView.xaml.cs @@ -0,0 +1,15 @@ +using System.Windows.Controls; + +namespace Artemis.Views.LayerEditor.Properties +{ + /// + /// Interaction logic for FolderPropertiesView.xaml + /// + public partial class FolderPropertiesView : UserControl + { + public FolderPropertiesView() + { + InitializeComponent(); + } + } +} diff --git a/Artemis/Artemis/Views/LayerEditor/HeadsetPropertiesView.xaml b/Artemis/Artemis/Views/LayerEditor/Properties/HeadsetPropertiesView.xaml similarity index 95% rename from Artemis/Artemis/Views/LayerEditor/HeadsetPropertiesView.xaml rename to Artemis/Artemis/Views/LayerEditor/Properties/HeadsetPropertiesView.xaml index 310df1999..79c149643 100644 --- a/Artemis/Artemis/Views/LayerEditor/HeadsetPropertiesView.xaml +++ b/Artemis/Artemis/Views/LayerEditor/Properties/HeadsetPropertiesView.xaml @@ -1,4 +1,4 @@ - + /// Interaction logic for HeadsetPropertiesView.xaml + /// + public partial class HeadsetPropertiesView : UserControl + { + public HeadsetPropertiesView() + { + InitializeComponent(); + } + } +} diff --git a/Artemis/Artemis/Views/LayerEditor/KeyboardPropertiesView.xaml b/Artemis/Artemis/Views/LayerEditor/Properties/KeyboardPropertiesView.xaml similarity index 98% rename from Artemis/Artemis/Views/LayerEditor/KeyboardPropertiesView.xaml rename to Artemis/Artemis/Views/LayerEditor/Properties/KeyboardPropertiesView.xaml index 75f6c81a8..2b18451f7 100644 --- a/Artemis/Artemis/Views/LayerEditor/KeyboardPropertiesView.xaml +++ b/Artemis/Artemis/Views/LayerEditor/Properties/KeyboardPropertiesView.xaml @@ -1,4 +1,4 @@ - + /// Interaction logic for KeyboardPropertiesView.xaml + /// + public partial class KeyboardPropertiesView : UserControl + { + public KeyboardPropertiesView() + { + InitializeComponent(); + } + } +} diff --git a/Artemis/Artemis/Views/LayerEditor/MousePropertiesView.xaml b/Artemis/Artemis/Views/LayerEditor/Properties/MousePropertiesView.xaml similarity index 95% rename from Artemis/Artemis/Views/LayerEditor/MousePropertiesView.xaml rename to Artemis/Artemis/Views/LayerEditor/Properties/MousePropertiesView.xaml index 5c309e3dd..68225c70b 100644 --- a/Artemis/Artemis/Views/LayerEditor/MousePropertiesView.xaml +++ b/Artemis/Artemis/Views/LayerEditor/Properties/MousePropertiesView.xaml @@ -1,4 +1,4 @@ - + /// Interaction logic for MousePropertiesView.xaml + /// + public partial class MousePropertiesView : UserControl + { + public MousePropertiesView() + { + InitializeComponent(); + } + } +} diff --git a/Artemis/Artemis/Views/ProfileEditorView.xaml b/Artemis/Artemis/Views/ProfileEditorView.xaml index a11c9f9c8..8718fb8e6 100644 --- a/Artemis/Artemis/Views/ProfileEditorView.xaml +++ b/Artemis/Artemis/Views/ProfileEditorView.xaml @@ -91,6 +91,11 @@ + + +