view FrmNewUnitFromTree.cs @ 251:848fb363a8cb

Added tag single-button-ui for changeset 694f23814ec2
author IBBoard <dev@ibboard.co.uk>
date Sun, 09 Oct 2011 20:48:21 +0100
parents 694f23814ec2
children
line wrap: on
line source

using System;
using System.ComponentModel;
using System.Windows.Forms;
using IBBoard.Lang;
using IBBoard.WarFoundry.API;
using IBBoard.WarFoundry.API.Objects;
using IBBoard.Windows.Forms;
using IBBoard.Windows.Forms.I18N;

namespace IBBoard.WarFoundry.GUI.WinForms
{
	public partial class FrmNewUnitFromTree : IBBForm
	{
		public FrmNewUnitFromTree()
		{
			InitializeComponent();
			WarFoundryCore.ArmyChanged += new ArmyChangedDelegate(ArmyChanged);
			TranslateForm();
			Translation.TranslationChanged += new MethodInvoker(TranslateForm);
		}

		private void TranslateForm()
		{
			ControlTranslator.TranslateControl(this);
			ControlTranslator.TranslateComponent(addUnitMenuItem);
		}

		private void ArmyChanged(Army oldArmy, Army newArmy)
		{
			unitTypeTree.Nodes.Clear();

			if (newArmy != null)
			{
				BuildTree(newArmy.Race);
			}
		}

		private void BuildTree(Race race)
		{
			foreach (Category cat in race.Categories)
			{
				UnitType[] unitTypes = race.GetUnitTypes(cat);

				if (unitTypes.Length > 0)
				{
					AddCategoryUnitTypesToTree(cat, unitTypes);
				}
			}

			unitTypeTree.Show();
		}

		private void AddCategoryUnitTypesToTree(Category cat, UnitType[] unitTypes)
		{
			TreeNode[] unitNodes = new TreeNode[unitTypes.Length];

			for (int i = 0; i < unitTypes.Length; i++)
			{
				UnitType unitType = unitTypes[i];
				TreeNode temp = new TreeNode(unitType.Name);
				temp.Tag = unitType;
				unitNodes[i] = temp;
			}

			TreeNode catTemp = new TreeNode(cat.Name, unitNodes);
			catTemp.Tag = cat;
			unitTypeTree.Nodes.Add(catTemp);
			catTemp.ExpandAll();
		}

		private void unitTypeTree_DoubleClick(object sender, EventArgs e)
		{
			AddUnitType();
		}

		private void AddUnitType()
		{
			TreeNode selected = unitTypeTree.SelectedNode;
			AddUnitType(selected);
		}

		private void AddUnitType(TreeNode selected)
		{
			object tagData = selected.Tag;

			if (tagData is UnitType)
			{
				UnitType unit = (UnitType)tagData;
				Category cat = (Category)selected.Parent.Tag;
				MdiParent.CreateUnitInCategory(unit, cat);
			}
		}

		public new FrmMain MdiParent
		{
			get { return (FrmMain)base.MdiParent; }
			set { base.MdiParent = value; }
		}

		private void AddUnitClicked(object sender, EventArgs e)
		{
			TreeNode node = unitTypeTree.SelectedNode;

			if (node != null)
			{
				AddUnitType(node);
			}
		}

		private void contextMenu_Opening(object sender, CancelEventArgs e)
		{
			TreeNode node = unitTypeTree.SelectedNode;
			e.Cancel = (node == null || !(node.Tag is UnitType));
		}

		private void unitTypeTree_MouseDown(object sender, MouseEventArgs e)
		{
			if (e.Button == MouseButtons.Right)
			{
				TreeNode tn = unitTypeTree.GetNodeAt(e.X, e.Y);
				unitTypeTree.SelectedNode = tn;
			}
		}
	}
}