using System;
using System.ComponentModel;
using Tizen.NUI.Binding.Internals;
namespace Tizen.NUI.Binding
{
///
/// A collection of styles and properties that can be added to an element at run time.
///
[EditorBrowsable(EditorBrowsableState.Never)]
internal abstract class Effect
{
internal Effect()
{
}
///
/// Gets the element to which the style is attached.
///
public Element Element { get; internal set; }
///
/// Gets a value that tells whether the effect is attached to an element.
///
public bool IsAttached { get; private set; }
///
/// Gets the ID that is used to resolve this effect at runtime.
///
public string ResolveId { get; internal set; }
#region Statics
///
/// Returns an Effect for the specified name, which is of the form ResolutionGroupName.ExportEffect.
///
/// The name of the effect to get.
/// The uniquely identified effect.
public static Effect Resolve(string name)
{
Effect result = null;
if (Tizen.NUI.Binding.Internals.Registrar.Effects.TryGetValue(name, out Type effectType))
{
result = (Effect)DependencyResolver.ResolveOrCreate(effectType);
}
if (result == null)
result = new NullEffect();
result.ResolveId = name;
return result;
}
#endregion
///
/// Method that is called after the effect is attached and made valid.
///
protected abstract void OnAttached();
///
/// Method that is called after the effect is detached and invalidated.
///
protected abstract void OnDetached();
internal virtual void ClearEffect()
{
if (IsAttached)
SendDetached();
Element = null;
}
internal virtual void SendAttached()
{
if (IsAttached)
return;
OnAttached();
IsAttached = true;
}
internal virtual void SendDetached()
{
if (!IsAttached)
return;
OnDetached();
IsAttached = false;
}
internal virtual void SendOnElementPropertyChanged(PropertyChangedEventArgs args)
{
}
}
}