using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Collections;

using CategoryTheory;
using MathGraph;

namespace DiagramUI
{
	/// <summary>
	/// Object label of container
	/// </summary>
	public class ContainerObjectLabel : ObjectLabel
	{
		private ArrayList inter = new ArrayList();
		private static Hashtable children = new Hashtable();
		public ContainerObjectLabel(PaletteButton button) : base(button)
		{
			Move += new EventHandler(onMove);
			type = button.Type;
			kind = button.Kind;
		}

		#region Specific Members

		public void Expand()
		{
			ObjectContainer cont = Object as ObjectContainer;
			Hashtable table = cont.Interface;
			foreach (string name in table.Keys)
			{
				INamedComponent c = cont[name];
				object[] o = table[name] as object[];
				ChildObjectLabel l = new ChildObjectLabel(this, name, c, o);
				inter.Add(l);
				children[c] = l;
			}
		}

		public override void Remove(bool formRemove)
		{
			base.Remove(formRemove);
			foreach (ChildObjectLabel l in inter)
			{
				l.remove();
				children.Remove(l);
			}
		}


		public static Panel GetPanel(INamedComponent c)
		{
			return children[c] as Panel;
		}


		private void onMove(object sender, EventArgs e)
		{
/*			if (!isMoved)
			{
				return;
			}*/
			foreach (ChildObjectLabel l in inter)
			{
				l.move();
			}
		}
		#endregion
	}
}
