|
@@ -46,6 +46,7 @@ using PixiEditor.Models.Structures;
|
|
|
using PixiEditor.Models.Tools;
|
|
|
using PixiEditor.Numerics;
|
|
|
using PixiEditor.Parser.Skia;
|
|
|
+using PixiEditor.ViewModels.Document.Nodes;
|
|
|
using PixiEditor.ViewModels.Document.TransformOverlays;
|
|
|
using PixiEditor.Views.Overlays.SymmetryOverlay;
|
|
|
using Color = PixiEditor.DrawingApi.Core.ColorsImpl.Color;
|
|
@@ -147,7 +148,7 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
|
|
|
private double verticalSymmetryAxisX;
|
|
|
public double VerticalSymmetryAxisXBindable => verticalSymmetryAxisX;
|
|
|
|
|
|
- private readonly HashSet<StructureMemberViewModel> softSelectedStructureMembers = new();
|
|
|
+ private readonly HashSet<IStructureMemberHandler> softSelectedStructureMembers = new();
|
|
|
|
|
|
public bool UpdateableChangeActive => Internals.ChangeController.IsChangeActive;
|
|
|
|
|
@@ -209,8 +210,6 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
|
|
|
IDocumentOperations IDocument.Operations => Operations;
|
|
|
ITransformHandler IDocument.TransformHandler => TransformViewModel;
|
|
|
ILineOverlayHandler IDocument.LineToolOverlayHandler => LineToolOverlayViewModel;
|
|
|
- public ILayerHandlerFactory LayerHandlerFactory { get; }
|
|
|
- public IFolderHandlerFactory FolderHandlerFactory { get; }
|
|
|
IReferenceLayerHandler IDocument.ReferenceLayerHandler => ReferenceLayerViewModel;
|
|
|
IAnimationHandler IDocument.AnimationHandler => AnimationDataViewModel;
|
|
|
|
|
@@ -224,8 +223,6 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
|
|
|
EventInlet = new DocumentEventsModule(this, Internals);
|
|
|
Operations = new DocumentOperationsModule(this, Internals);
|
|
|
|
|
|
- LayerHandlerFactory = new LayerHandlerFactory(this);
|
|
|
- FolderHandlerFactory = new FolderHandlerFactory(this);
|
|
|
AnimationDataViewModel = new(this, Internals);
|
|
|
|
|
|
NodeGraph = new NodeGraphViewModel(this, Internals);
|
|
@@ -537,7 +534,7 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
|
|
|
IStructureMemberHandler? layerToExtractFrom = null)
|
|
|
{
|
|
|
layerToExtractFrom ??= SelectedStructureMember;
|
|
|
- if (layerToExtractFrom is not LayerViewModel layerVm)
|
|
|
+ if (layerToExtractFrom is not ILayerHandler layerVm)
|
|
|
return new Error();
|
|
|
if (SelectionPathBindable.IsEmpty)
|
|
|
return new None();
|
|
@@ -667,7 +664,7 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
|
|
|
_ => Colors.Transparent);
|
|
|
}
|
|
|
|
|
|
- if (SelectedStructureMember is not LayerViewModel layerVm)
|
|
|
+ if (SelectedStructureMember is not ILayerHandler layerVm)
|
|
|
return Colors.Transparent;
|
|
|
IReadOnlyStructureNode? maybeMember = Internals.Tracker.Document.FindMember(layerVm.Id);
|
|
|
if (maybeMember is not IReadOnlyImageNode layer)
|
|
@@ -714,8 +711,11 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
|
|
|
OnPropertyChanged(nameof(VerticalSymmetryAxisXBindable));
|
|
|
}
|
|
|
|
|
|
- public void SetSelectedMember(IStructureMemberHandler member) =>
|
|
|
- SetSelectedMember((StructureMemberViewModel)member);
|
|
|
+ public void SetSelectedMember(IStructureMemberHandler member)
|
|
|
+ {
|
|
|
+ SelectedStructureMember = member;
|
|
|
+ OnPropertyChanged(nameof(SelectedStructureMember));
|
|
|
+ }
|
|
|
|
|
|
public void SetHorizontalSymmetryAxisY(double horizontalSymmetryAxisY)
|
|
|
{
|
|
@@ -742,25 +742,19 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
|
|
|
OnPropertyChanged(nameof(SelectionPathBindable));
|
|
|
}
|
|
|
|
|
|
- public void SetSelectedMember(StructureMemberViewModel? member)
|
|
|
+ public void AddSoftSelectedMember(IStructureMemberHandler member)
|
|
|
{
|
|
|
- SelectedStructureMember = member;
|
|
|
- OnPropertyChanged(nameof(SelectedStructureMember));
|
|
|
+ softSelectedStructureMembers.Add(member);
|
|
|
}
|
|
|
|
|
|
public void RemoveSoftSelectedMember(IStructureMemberHandler member)
|
|
|
{
|
|
|
SelectedStructureMember = member;
|
|
|
+ softSelectedStructureMembers.Remove(member);
|
|
|
}
|
|
|
|
|
|
public void ClearSoftSelectedMembers() => softSelectedStructureMembers.Clear();
|
|
|
|
|
|
- public void AddSoftSelectedMember(IStructureMemberHandler member) =>
|
|
|
- softSelectedStructureMembers.Add((StructureMemberViewModel)member);
|
|
|
-
|
|
|
- public void RemoveSoftSelectedMember(StructureMemberViewModel member) =>
|
|
|
- softSelectedStructureMembers.Remove(member);
|
|
|
-
|
|
|
#endregion
|
|
|
|
|
|
/// <summary>
|
|
@@ -790,12 +784,12 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
|
|
|
var foundMember = StructureHelper.Find(member);
|
|
|
if (foundMember != null)
|
|
|
{
|
|
|
- if (foundMember is LayerViewModel layer && selectedMembers.Contains(foundMember.Id) &&
|
|
|
+ if (foundMember is ImageLayerNodeViewModel layer && selectedMembers.Contains(foundMember.Id) &&
|
|
|
!result.Contains(layer.Id))
|
|
|
{
|
|
|
result.Add(layer.Id);
|
|
|
}
|
|
|
- else if (foundMember is FolderViewModel folder && selectedMembers.Contains(foundMember.Id))
|
|
|
+ else if (foundMember is FolderNodeViewModel folder && selectedMembers.Contains(foundMember.Id))
|
|
|
{
|
|
|
if (includeFoldersWithMask && folder.HasMaskBindable && !result.Contains(folder.Id))
|
|
|
result.Add(folder.Id);
|
|
@@ -812,16 +806,16 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
|
|
|
OnPropertyChanged(nameof(AllChangesSaved));
|
|
|
}
|
|
|
|
|
|
- private void ExtractSelectedLayers(FolderViewModel folder, List<Guid> list,
|
|
|
+ private void ExtractSelectedLayers(FolderNodeViewModel folder, List<Guid> list,
|
|
|
bool includeFoldersWithMask)
|
|
|
{
|
|
|
foreach (var member in folder.Children)
|
|
|
{
|
|
|
- if (member is LayerViewModel layer && !list.Contains(layer.Id))
|
|
|
+ if (member is ImageLayerNodeViewModel layer && !list.Contains(layer.Id))
|
|
|
{
|
|
|
list.Add(layer.Id);
|
|
|
}
|
|
|
- else if (member is FolderViewModel childFolder)
|
|
|
+ else if (member is FolderNodeViewModel childFolder)
|
|
|
{
|
|
|
if (includeFoldersWithMask && childFolder.HasMaskBindable && !list.Contains(childFolder.Id))
|
|
|
list.Add(childFolder.Id);
|