using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Runtime.Serialization;


using CategoryTheory;

namespace DiagramUI
{
    /// <summary>
    /// Arrow label for serialization
    /// </summary>
    [Serializable()]
    public class PureArrowLabelPeer : PureArrowLabel, ISerializable
    {

        #region Constructors

        /// <summary>
        /// Main constructor
        /// </summary>
        /// <param name="name">The name</param>
        /// <param name="kind">The kind</param>
        /// <param name="type">The type</param>
        /// <param name="x">The x - coordinate</param>
        /// <param name="y">The y - coordinate</param>
        public PureArrowLabelPeer(string name, string kind, string type, int x, int y)
            : base(name, kind, type, x, y)
        {
            this.name = name;
            this.kind = kind;
            this.type = type;
            this.x = x;
            this.y = y;
        }


        /// <summary>
        /// Serialization constructor
        /// </summary>
        /// <param name="info"></param>
        /// <param name="context"></param>
        public PureArrowLabelPeer(SerializationInfo info, StreamingContext context)
        {
            kind = info.GetValue("Kind", typeof(string)) as string;
            type = (string)info.GetValue("Type", typeof(string));
            name = (string)info.GetValue("Name", typeof(string));
            arrow = info.GetValue("Arrow", typeof(object)) as ICategoryArrow;
            sourceNumber = info.GetValue("SourceNumber", typeof(object));
            targetNumber = info.GetValue("TargetNumber", typeof(object));
        }


        #endregion

        #region ISerializable Members

        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("Kind", kind);
            info.AddValue("Type", type);
            info.AddValue("Name", name);
            info.AddValue("Arrow", arrow);
            info.AddValue("SourceNumber", sourceNumber);
            info.AddValue("TargetNumber", targetNumber);
        }

        #endregion

        #region INamedComponent Members

        /// <summary>
        /// Gets component name relatively desktop
        /// </summary>
        /// <param name="desktop">The desktop</param>
        /// <returns>Relalive name</returns>
        public override string GetName(IDesktop desktop)
        {
            return PureObjectLabelPeer.GetName(this, desktop);
        }

        #endregion

        #region Specific members

        #endregion
    }
}
