using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls.Primitives;
using Tango.Core;
using Tango.Editors;
namespace Tango.Editors
{
///
/// Represents the base interface for element editors.
///
public interface IElementEditor : IConfigurable, IParameterized
{
///
/// Gets the collection of for the current editor and element properties.
///
/// The animation duration.
/// The animation setup mode.
///
/// The returned collection of animation setups can be inserted into a .
///
List GetAnimationSetups(TimeSpan duration, AnimationSetupMode animationSetupMode = AnimationSetupMode.Linear);
///
/// Gets or sets the editor unique identifier.
///
String ID { get; set; }
///
/// Gets or sets the editor top position.
///
double Top { get; set; }
///
/// Gets or sets the editor left position.
///
double Left { get; set; }
///
/// Gets or sets the editor width.
///
double Width { get; set; }
///
/// Gets or sets the editor height.
///
double Height { get; set; }
///
/// Gets or sets the editor angle.
///
double Angle { get; set; }
///
/// Gets or sets the editor Z-index.
///
int ZIndex { get; set; }
///
/// Gets or sets a value indicating whether the hosted element will be presented inside or outside the editor.
///
bool ElementDetached { get; set; }
///
/// Occurs when the editor is moving.
///
event EventHandler Moving;
///
/// Occurs before editor bounds change.
///
event EventHandler BeforeBoundsChange;
///
/// Occurs after editor bounds change.
///
event EventHandler AfterBoundsChange;
///
/// Moves the editor by the specified delta arguments.
///
/// The instance containing the event data.
void PushMove(DragDeltaEventArgs e);
///
/// Clones this instance.
///
///
IElementEditor Clone();
///
/// Gets the hosted element.
///
Object HostedElement { get; }
///
/// Sets the editor bounds.
///
/// The bounds.
void SetBounds(Rect bounds);
///
/// Gets the editor bounds.
///
///
Rect GetBounds();
///
/// Gets or sets an optional attached element for editors mirroring mode.
///
IElementEditor AttachedEditor { get; set; }
}
}