using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Runtime.Serialization;
using CategoryTheory;
namespace DiagramUI
{
/// <summary>
/// Object label for serialization
/// </summary>
[Serializable()]
public class PureObjectLabelPeer : PureObjectLabel, ISerializable
{
#region Constuctors
/// <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 PureObjectLabelPeer(string name, string kind, string type, int x, int y)
: base(name, kind, type, x, y)
{
}
/// <summary>
/// Serialization constructor
/// </summary>
/// <param name="info"></param>
/// <param name="context"></param>
public PureObjectLabelPeer(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));
x = (int)info.GetValue("X", typeof(int));
y = (int)info.GetValue("Y", typeof(int));
obj = info.GetValue("Object", typeof(object)) as ICategoryObject;
}
#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("X", x);
info.AddValue("Y", y);
info.AddValue("Object", obj);
}
#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 GetName(this, desktop);
}
#endregion
#region Specific members
/// <summary>
/// Gets relative component name
/// </summary>
/// <param name="component">The component</param>
/// <param name="desktop">The base desktop</param>
/// <returns>Relalive name</returns>
new public static string GetName(INamedComponent component, IDesktop desktop)
{
string name = PureObjectLabel.GetName(component, desktop);
if (name != null)
{
return name;
}
if (desktop is PureDesktopPeer)
{
PureDesktopPeer p = desktop as PureDesktopPeer;
name = GetName(component, p.parentDesktop);
if (name != null)
{
return "../" + name;
}
}
return null;
}
#endregion
}
}