LayerStructureToGroupsConverter.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using PixiEditor.Helpers.Extensions;
  2. using PixiEditor.Models.Layers;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Collections.ObjectModel;
  6. using System.Globalization;
  7. using System.Linq;
  8. using System.Windows.Data;
  9. using PixiEditor.Models.DataHolders;
  10. namespace PixiEditor.Helpers.Converters
  11. {
  12. public class LayerStructureToGroupsConverter
  13. : SingleInstanceMultiValueConverter<LayerStructureToGroupsConverter>
  14. {
  15. public override object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
  16. {
  17. if (values[0] is not LayerStructure structure)
  18. {
  19. return Binding.DoNothing;
  20. }
  21. return GetSubGroups(structure.Groups);
  22. }
  23. private System.Collections.ObjectModel.ObservableCollection<GuidStructureItem> GetSubGroups(IEnumerable<GuidStructureItem> groups)
  24. {
  25. WpfObservableRangeCollection<GuidStructureItem> finalGroups = new WpfObservableRangeCollection<GuidStructureItem>();
  26. foreach (var group in groups)
  27. {
  28. finalGroups.AddRange(GetSubGroups(group));
  29. }
  30. return finalGroups;
  31. }
  32. private IEnumerable<GuidStructureItem> GetSubGroups(GuidStructureItem group)
  33. {
  34. List<GuidStructureItem> groups = new List<GuidStructureItem>() { group };
  35. foreach (var subGroup in group.Subgroups)
  36. {
  37. groups.Add(subGroup);
  38. if (subGroup.Subgroups.Count > 0)
  39. {
  40. groups.AddRange(GetSubGroups(subGroup));
  41. }
  42. }
  43. return groups.Distinct();
  44. }
  45. }
  46. }