view FrmNewUnitFromTree.cs @ 248:19a88383dfa7

Re #354: Single-button Add Unit * Pull out re-usable method for adding unit * Make double-click add unit
author IBBoard <dev@ibboard.co.uk>
date Sat, 20 Aug 2011 16:12:15 +0100
parents 53d79e1be712
children a11faa64c333
line wrap: on
line source

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using IBBoard.WarFoundry.API.Objects;
using IBBoard.WarFoundry.API;

namespace IBBoard.WarFoundry.GUI.WinForms
{
    public partial class FrmNewUnitFromTree : Form
    {
        public FrmNewUnitFromTree()
        {
            InitializeComponent();
            WarFoundryCore.ArmyChanged += new ArmyChangedDelegate(ArmyChanged);
        }

        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);
                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();
            }

            unitTypeTree.Show();
        }

        private void unitTypeTree_DoubleClick(object sender, EventArgs e)
        {
            TreeNode selected = unitTypeTree.SelectedNode;
            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; }
        }
    }
}