using System;
using Artemis.Core.Models.Profile;
using Artemis.Core.Models.Profile.LayerProperties;
using Artemis.Core.Models.Profile.LayerProperties.Attributes;
using Artemis.Core.Plugins.Abstract;
using Artemis.UI.Events;
using Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Abstract;
using Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Tree;
namespace Artemis.UI.Services.Interfaces
{
public interface IProfileEditorService : IArtemisUIService
{
Profile SelectedProfile { get; }
ProfileElement SelectedProfileElement { get; }
TimeSpan CurrentTime { get; set; }
LayerPropertyBaseViewModel CreateLayerPropertyViewModel(BaseLayerProperty baseLayerProperty, PropertyDescriptionAttribute propertyDescription);
void ChangeSelectedProfile(Profile profile);
void UpdateSelectedProfile();
void ChangeSelectedProfileElement(ProfileElement profileElement);
void UpdateSelectedProfileElement();
void UpdateProfilePreview();
void UndoUpdateProfile(ProfileModule module);
void RedoUpdateProfile(ProfileModule module);
void StopRegularRender();
void ResumeRegularRender();
///
/// Occurs when a new profile is selected
///
event EventHandler ProfileSelected;
///
/// Occurs then the currently selected profile is updated
///
event EventHandler SelectedProfileUpdated;
///
/// Occurs when a new profile element is selected
///
event EventHandler ProfileElementSelected;
///
/// Occurs when the currently selected profile element is updated
///
event EventHandler SelectedProfileElementUpdated;
///
/// Occurs when the current editor time is changed
///
event EventHandler CurrentTimeChanged;
///
/// Occurs when the profile preview has been updated
///
event EventHandler ProfilePreviewUpdated;
TreePropertyViewModel CreateTreePropertyViewModel();
}
}