Files
Artemis/src/Artemis.Core/Models/Profile/Folder.cs
T

95 lines
3.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using Artemis.Core.Models.Profile.Abstract;
using Artemis.Core.Services.Interfaces;
using Artemis.Storage.Entities.Profile;
namespace Artemis.Core.Models.Profile
{
public sealed class Folder : ProfileElement
{
public Folder(Profile profile, ProfileElement parent, string name)
{
FolderEntity = new FolderEntity();
EntityId = Guid.NewGuid();
Profile = profile;
Parent = parent;
Name = name;
}
public Folder(Profile profile, ProfileElement parent, FolderEntity folderEntity, IPluginService pluginService)
{
FolderEntity = folderEntity;
EntityId = folderEntity.Id;
Profile = profile;
Parent = parent;
// Load child folders
foreach (var childFolder in Profile.ProfileEntity.Folders.Where(f => f.ParentId == EntityId))
_children.Add(new Folder(profile, this, childFolder, pluginService));
// Load child layers
foreach (var childLayer in Profile.ProfileEntity.Layers.Where(f => f.ParentId == EntityId))
_children.Add(new Layer(profile, this, childLayer, pluginService));
// Ensure order integrity, should be unnecessary but no one is perfect specially me
_children = _children.OrderBy(c => c.Order).ToList();
for (var index = 0; index < _children.Count; index++)
{
var profileElement = _children[index];
profileElement.Order = index + 1;
}
}
internal FolderEntity FolderEntity { get; set; }
public override void Update(double deltaTime)
{
// Folders don't update but their children do
foreach (var profileElement in Children)
profileElement.Update(deltaTime);
}
public override void Render(double deltaTime, Surface.Surface surface, Graphics graphics)
{
// Folders don't render but their children do
foreach (var profileElement in Children)
profileElement.Render(deltaTime, surface, graphics);
}
public Folder AddFolder(string name)
{
var folder = new Folder(Profile, this, name) {Order = Children.LastOrDefault()?.Order ?? 1};
AddChild(folder);
return folder;
}
public Layer AddLayer(string name)
{
var layer = new Layer(Profile, this, name) {Order = Children.LastOrDefault()?.Order ?? 1};
AddChild(layer);
return layer;
}
internal override void ApplyToEntity()
{
FolderEntity.Id = EntityId;
FolderEntity.ParentId = Parent?.EntityId ?? new Guid();
FolderEntity.Order = Order;
FolderEntity.Name = Name;
FolderEntity.ProfileId = Profile.EntityId;
// TODO: conditions
}
public override string ToString()
{
return $"Folder - {nameof(Name)}: {Name}, {nameof(Order)}: {Order}";
}
}
}