diff FrmUnit.cs @ 0:7dd160dacb60

Initial commit of WarFoundry code
author IBBoard <dev@ibboard.co.uk>
date Fri, 19 Dec 2008 15:57:51 +0000
parents
children 42cf06b8f897
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FrmUnit.cs	Fri Dec 19 15:57:51 2008 +0000
@@ -0,0 +1,505 @@
+using System;
+using System.Drawing;
+using System.Data;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using IBBoard.Commands;
+using IBBoard.Windows.Forms;
+using IBBoard.WarFoundry.API;
+using IBBoard.WarFoundry.API.Commands;
+
+namespace IBBoard.WarFoundry
+{
+	///TODO: Separate weapons out into optional and required, where required only has button for replacing
+
+	/// <summary>
+	/// Summary description for FrmUnit.
+	/// </summary>
+	public class FrmUnit : IBBoard.Windows.Forms.IBBForm
+	{
+		private Unit unit;
+        private CommandStack commandStack;
+		private System.Windows.Forms.DataGrid statsGrid;
+		private System.Windows.Forms.TextBox tbUnitName;
+		private System.Windows.Forms.NumericUpDown unitSize;
+		private System.Windows.Forms.Label lblUnitSize;
+		private System.Windows.Forms.Button bttnAddWeapon;
+		private System.Windows.Forms.Button bttnRemoveWeapon;
+		private System.Windows.Forms.Button bttnEditWeapon;
+		private System.Windows.Forms.Label lblRequiredEquip;
+		private System.Windows.Forms.ListBox reqdList;
+		private System.Windows.Forms.ListBox optList;
+		private System.Windows.Forms.Label lblOptionalEquip;
+		private System.Windows.Forms.Button bttnReplaceWeapon;
+		private System.Windows.Forms.Button bttnEditReqdWeapon;
+		/// <summary>
+		/// Required designer variable.
+		/// </summary>
+		private System.ComponentModel.Container components = null;
+
+		public FrmUnit(Unit toDisplay, CommandStack cmdStack)
+		{
+			unit = toDisplay;
+            commandStack = cmdStack;
+			//
+			// Required for Windows Form Designer support
+			//
+			InitializeComponent();
+
+			tbUnitName.Text = unit.Name;
+			Text = unit.Name;
+			unit.NameChanged+=new StringValChangedDelegate(unit_NameChanged);
+			unit.UnitSizeChanged+= new IntValChangedDelegate(unit_UnitSizeChanged);
+			unit.UnitEquipmentAmountChanged+=new FloatValChangedDelegate(unit_UnitEquipmentAmountChanged);
+
+			if (unit.UnitType.MaxSize==unit.UnitType.MinSize)
+			{
+				unitSize.Value = unit.UnitType.MaxSize;
+				unitSize.Visible = false;
+				lblUnitSize.Visible = false;
+			}
+			else
+			{
+				unitSize.Value = unit.Size;
+				unitSize.Maximum = (unit.UnitType.MaxSize == -1 ? int.MaxValue : unit.UnitType.MaxSize);
+				unitSize.Minimum = unit.UnitType.MinSize;
+			}
+
+			setStats();
+			setWeapons();
+		}
+
+		private void setStats()
+		{
+            GameSystem system = unit.Army.GameSystem;
+            SystemStats stats = system.StandardSystemStats;
+			
+			DataTable dt = new DataTable();
+			DataColumn[] dc = new DataColumn[stats.SlotCount+1];
+			dc[0] = new DataColumn("name");
+
+            DataGridTableStyle dgStyle = new DataGridTableStyle();
+            dgStyle.RowHeadersVisible = false;
+
+            DataGridTextBoxColumn colStyle = new DataGridTextBoxColumn();
+            colStyle.Width = statsGrid.ClientSize.Width - (stats.SlotCount * 40) - 4;
+            colStyle.MappingName = "name";
+            colStyle.HeaderText = "name";
+            colStyle.ReadOnly = true;
+            dgStyle.GridColumnStyles.Add(colStyle);
+
+            DataColumn tempCol;
+            int i = 1;
+
+			foreach (StatSlot stat in stats.StatSlots)
+			{
+				tempCol = new DataColumn(stat.Name);
+                dc[i] = tempCol;
+                colStyle = new DataGridTextBoxColumn();
+                colStyle.Alignment = HorizontalAlignment.Center;
+                colStyle.Width = 40;
+                colStyle.MappingName = stat.Name;
+                colStyle.HeaderText = stat.Name;
+                colStyle.ReadOnly = true;
+                dgStyle.GridColumnStyles.Add(colStyle);
+                i++;
+			}
+
+			dt.Columns.AddRange(dc);
+
+			DataRow dr = dt.NewRow();
+			dr.ItemArray = unit.UnitStats.StatsArray;
+			dt.Rows.Add(dr);
+			statsGrid.DataSource = dt;
+			statsGrid.TableStyles.Add(dgStyle);
+		}
+
+		private void setWeapons()
+		{
+			foreach(UnitEquipmentItem item in unit.GetEquipment())
+			{
+				if (item.IsRequired)
+				{
+					reqdList.Items.Add(UnitEquipmentItemObj.GetEquipObj(Unit, item));
+				}
+				else
+				{
+					optList.Items.Add(UnitEquipmentItemObj.GetEquipObj(Unit, item));
+				}
+			}
+		}
+
+		/// <summary>
+		/// Clean up any resources being used.
+		/// </summary>
+		protected override void Dispose( bool disposing )
+		{
+			//remove our leave events so that disposing doesn't trigger them
+			tbUnitName.Leave-= new System.EventHandler(this.tbUnitName_Leave);
+			unitSize.Leave-= new System.EventHandler(this.unitSize_Leave);
+
+			if( disposing )
+			{
+				if(components != null)
+				{
+					components.Dispose();
+				}
+			}
+			base.Dispose( disposing );
+		}
+
+		#region Windows Form Designer generated code
+		/// <summary>
+		/// Required method for Designer support - do not modify
+		/// the contents of this method with the code editor.
+		/// </summary>
+		private void InitializeComponent()
+		{
+			this.statsGrid = new System.Windows.Forms.DataGrid();
+			this.tbUnitName = new System.Windows.Forms.TextBox();
+			this.unitSize = new System.Windows.Forms.NumericUpDown();
+			this.lblUnitSize = new System.Windows.Forms.Label();
+			this.lblRequiredEquip = new System.Windows.Forms.Label();
+			this.bttnAddWeapon = new System.Windows.Forms.Button();
+			this.bttnRemoveWeapon = new System.Windows.Forms.Button();
+			this.reqdList = new System.Windows.Forms.ListBox();
+			this.bttnEditWeapon = new System.Windows.Forms.Button();
+			this.optList = new System.Windows.Forms.ListBox();
+			this.lblOptionalEquip = new System.Windows.Forms.Label();
+			this.bttnReplaceWeapon = new System.Windows.Forms.Button();
+			this.bttnEditReqdWeapon = new System.Windows.Forms.Button();
+			((System.ComponentModel.ISupportInitialize)(this.statsGrid)).BeginInit();
+			((System.ComponentModel.ISupportInitialize)(this.unitSize)).BeginInit();
+			this.SuspendLayout();
+			// 
+			// statsGrid
+			// 
+			this.statsGrid.AllowNavigation = false;
+			this.statsGrid.AllowSorting = false;
+			this.statsGrid.AlternatingBackColor = System.Drawing.SystemColors.Control;
+			this.statsGrid.BackgroundColor = System.Drawing.SystemColors.Control;
+			this.statsGrid.CaptionVisible = false;
+			this.statsGrid.DataMember = "";
+			this.statsGrid.GridLineColor = System.Drawing.SystemColors.ControlDarkDark;
+			this.statsGrid.HeaderForeColor = System.Drawing.SystemColors.ControlText;
+			this.statsGrid.Location = new System.Drawing.Point(8, 32);
+			this.statsGrid.Name = "statsGrid";
+			this.statsGrid.PreferredColumnWidth = 40;
+			this.statsGrid.ReadOnly = true;
+			this.statsGrid.RowHeadersVisible = false;
+			this.statsGrid.SelectionBackColor = System.Drawing.SystemColors.Control;
+			this.statsGrid.SelectionForeColor = System.Drawing.SystemColors.WindowText;
+			this.statsGrid.Size = new System.Drawing.Size(600, 88);
+			this.statsGrid.TabIndex = 0;
+			this.statsGrid.TabStop = false;
+			// 
+			// tbUnitName
+			// 
+			this.tbUnitName.Location = new System.Drawing.Point(8, 8);
+			this.tbUnitName.Name = "tbUnitName";
+			this.tbUnitName.Size = new System.Drawing.Size(344, 20);
+			this.tbUnitName.TabIndex = 1;
+			this.tbUnitName.Text = "";
+			this.tbUnitName.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tbUnitName_KeyDown);
+			this.tbUnitName.Leave += new System.EventHandler(this.tbUnitName_Leave);
+			// 
+			// unitSize
+			// 
+			this.unitSize.Location = new System.Drawing.Point(528, 8);
+			this.unitSize.Name = "unitSize";
+			this.unitSize.Size = new System.Drawing.Size(80, 20);
+			this.unitSize.TabIndex = 1;
+			this.unitSize.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+			this.unitSize.Value = new System.Decimal(new int[] {
+																   1,
+																   0,
+																   0,
+																   0});
+			this.unitSize.KeyDown += new System.Windows.Forms.KeyEventHandler(this.unitSize_KeyDown);
+			this.unitSize.Leave += new System.EventHandler(this.unitSize_Leave);
+			// 
+			// lblUnitSize
+			// 
+			this.lblUnitSize.Location = new System.Drawing.Point(424, 8);
+			this.lblUnitSize.Name = "lblUnitSize";
+			this.lblUnitSize.TabIndex = 0;
+			this.lblUnitSize.Text = "unit size";
+			this.lblUnitSize.TextAlign = System.Drawing.ContentAlignment.TopRight;
+			// 
+			// lblRequiredEquip
+			// 
+			this.lblRequiredEquip.Location = new System.Drawing.Point(8, 128);
+			this.lblRequiredEquip.Name = "lblRequiredEquip";
+			this.lblRequiredEquip.Size = new System.Drawing.Size(88, 32);
+			this.lblRequiredEquip.TabIndex = 3;
+			this.lblRequiredEquip.Text = "reqd equipment";
+			this.lblRequiredEquip.TextAlign = System.Drawing.ContentAlignment.TopRight;
+			// 
+			// bttnAddWeapon
+			// 
+			this.bttnAddWeapon.FlatStyle = System.Windows.Forms.FlatStyle.System;
+			this.bttnAddWeapon.Location = new System.Drawing.Point(520, 200);
+			this.bttnAddWeapon.Name = "bttnAddWeapon";
+			this.bttnAddWeapon.Size = new System.Drawing.Size(88, 22);
+			this.bttnAddWeapon.TabIndex = 4;
+			this.bttnAddWeapon.Text = "add";
+			this.bttnAddWeapon.Click += new System.EventHandler(this.bttnAddWeapon_Click);
+			// 
+			// bttnRemoveWeapon
+			// 
+			this.bttnRemoveWeapon.Enabled = false;
+			this.bttnRemoveWeapon.FlatStyle = System.Windows.Forms.FlatStyle.System;
+			this.bttnRemoveWeapon.Location = new System.Drawing.Point(520, 248);
+			this.bttnRemoveWeapon.Name = "bttnRemoveWeapon";
+			this.bttnRemoveWeapon.Size = new System.Drawing.Size(88, 22);
+			this.bttnRemoveWeapon.TabIndex = 5;
+			this.bttnRemoveWeapon.Text = "remove";
+			this.bttnRemoveWeapon.Click += new System.EventHandler(this.bttnRemoveWeapon_Click);
+			// 
+			// reqdList
+			// 
+			this.reqdList.Location = new System.Drawing.Point(104, 128);
+			this.reqdList.Name = "reqdList";
+			this.reqdList.Size = new System.Drawing.Size(408, 69);
+			this.reqdList.TabIndex = 6;
+			this.reqdList.DoubleClick += new System.EventHandler(this.reqdList_DoubleClick);
+			this.reqdList.SelectedIndexChanged += new System.EventHandler(this.reqdList_SelectedIndexChanged);
+			// 
+			// bttnEditWeapon
+			// 
+			this.bttnEditWeapon.Enabled = false;
+			this.bttnEditWeapon.FlatStyle = System.Windows.Forms.FlatStyle.System;
+			this.bttnEditWeapon.Location = new System.Drawing.Point(520, 224);
+			this.bttnEditWeapon.Name = "bttnEditWeapon";
+			this.bttnEditWeapon.Size = new System.Drawing.Size(88, 22);
+			this.bttnEditWeapon.TabIndex = 7;
+			this.bttnEditWeapon.Text = "edit";
+			this.bttnEditWeapon.Click += new System.EventHandler(this.bttnEditWeapon_Click);
+			// 
+			// optList
+			// 
+			this.optList.Location = new System.Drawing.Point(104, 200);
+			this.optList.Name = "optList";
+			this.optList.Size = new System.Drawing.Size(408, 69);
+			this.optList.TabIndex = 9;
+			this.optList.DoubleClick += new System.EventHandler(this.optList_DoubleClick);
+			this.optList.SelectedIndexChanged += new System.EventHandler(this.optList_SelectedIndexChanged);
+			// 
+			// lblOptionalEquip
+			// 
+			this.lblOptionalEquip.Location = new System.Drawing.Point(8, 200);
+			this.lblOptionalEquip.Name = "lblOptionalEquip";
+			this.lblOptionalEquip.Size = new System.Drawing.Size(88, 32);
+			this.lblOptionalEquip.TabIndex = 8;
+			this.lblOptionalEquip.Text = "opt equipment";
+			this.lblOptionalEquip.TextAlign = System.Drawing.ContentAlignment.TopRight;
+			// 
+			// bttnReplaceWeapon
+			// 
+			this.bttnReplaceWeapon.Enabled = false;
+			this.bttnReplaceWeapon.FlatStyle = System.Windows.Forms.FlatStyle.System;
+			this.bttnReplaceWeapon.Location = new System.Drawing.Point(520, 128);
+			this.bttnReplaceWeapon.Name = "bttnReplaceWeapon";
+			this.bttnReplaceWeapon.Size = new System.Drawing.Size(88, 22);
+			this.bttnReplaceWeapon.TabIndex = 10;
+			this.bttnReplaceWeapon.Text = "replace";
+			this.bttnReplaceWeapon.Click += new System.EventHandler(this.bttnReplaceWeapon_Click);
+			// 
+			// bttnEditReqdWeapon
+			// 
+			this.bttnEditReqdWeapon.Enabled = false;
+			this.bttnEditReqdWeapon.FlatStyle = System.Windows.Forms.FlatStyle.System;
+			this.bttnEditReqdWeapon.Location = new System.Drawing.Point(520, 152);
+			this.bttnEditReqdWeapon.Name = "bttnEditReqdWeapon";
+			this.bttnEditReqdWeapon.Size = new System.Drawing.Size(88, 22);
+			this.bttnEditReqdWeapon.TabIndex = 11;
+			this.bttnEditReqdWeapon.Text = "edit";
+			this.bttnEditReqdWeapon.Click += new System.EventHandler(this.bttnEditReqdWeapon_Click);
+			// 
+			// FrmUnit
+			// 
+			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
+			this.ClientSize = new System.Drawing.Size(616, 314);
+			this.Controls.Add(this.bttnEditReqdWeapon);
+			this.Controls.Add(this.bttnReplaceWeapon);
+			this.Controls.Add(this.optList);
+			this.Controls.Add(this.lblOptionalEquip);
+			this.Controls.Add(this.bttnEditWeapon);
+			this.Controls.Add(this.reqdList);
+			this.Controls.Add(this.bttnRemoveWeapon);
+			this.Controls.Add(this.bttnAddWeapon);
+			this.Controls.Add(this.lblRequiredEquip);
+			this.Controls.Add(this.lblUnitSize);
+			this.Controls.Add(this.unitSize);
+			this.Controls.Add(this.tbUnitName);
+			this.Controls.Add(this.statsGrid);
+			this.Name = "FrmUnit";
+			this.ShowInTaskbar = false;
+			this.Text = "FrmUnit";
+			((System.ComponentModel.ISupportInitialize)(this.statsGrid)).EndInit();
+			((System.ComponentModel.ISupportInitialize)(this.unitSize)).EndInit();
+			this.ResumeLayout(false);
+
+		}
+		#endregion
+
+		public Unit Unit
+		{
+			get { return unit; }
+		}
+
+		private void tbUnitName_Leave(object sender, System.EventArgs e)
+		{
+			updateUnitName();
+		}
+
+		private void tbUnitName_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
+		{
+			if (e.KeyCode == Keys.Enter)
+			{
+				updateUnitName();
+			}
+		}
+
+		private void updateUnitName()
+		{			
+			if (unit.Name!=tbUnitName.Text)
+			{
+				commandStack.Execute(new SetNameCommand(unit, tbUnitName.Text));
+			}
+		}
+
+		private void unitSize_Leave(object sender, System.EventArgs e)
+		{
+			updateUnitSize();
+		}
+
+		private void unitSize_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
+		{
+			if (e.KeyCode == Keys.Enter)
+			{
+				updateUnitSize();
+			}		
+		}
+
+		private void updateUnitSize()
+		{
+			if (unit.Size!=unitSize.Value)
+			{
+				commandStack.Execute(new SetUnitSizeCommand(unit, (int)unitSize.Value));
+			}
+		}
+
+		private void unit_NameChanged(WarFoundryObject obj, string oldValue, string newValue)
+		{
+			if (obj is Unit && obj.Equals(unit))
+			{
+				Unit u = (Unit)obj;
+				tbUnitName.Text = obj.Name;
+				Text = obj.Name;
+			}
+		}
+
+		private void unit_UnitSizeChanged(WarFoundryObject obj, int oldValue, int newValue)
+		{
+			if (obj is Unit && obj.Equals(unit))
+			{
+				unitSize.Value = newValue;
+			}
+		}
+
+		private void reqdList_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			bttnReplaceWeapon.Enabled = (reqdList.SelectedIndex>-1 && ((UnitEquipmentItemObj)reqdList.SelectedItem).Item.HasAlternatives());
+			bttnEditReqdWeapon.Enabled = (reqdList.SelectedIndex>-1);
+		}
+
+		private void optList_SelectedIndexChanged(object sender, System.EventArgs e)
+		{
+			bttnEditWeapon.Enabled = optList.SelectedIndex>-1;
+			bttnRemoveWeapon.Enabled = bttnEditWeapon.Enabled;
+		}
+
+		private void unit_UnitEquipmentAmountChanged(WarFoundryObject obj, float oldValue, float newValue)
+		{
+			if (obj is UnitEquipmentItem)
+			{
+				UnitEquipmentItem equip = (UnitEquipmentItem)obj;
+				ListBox weaponList = (equip.IsRequired ? reqdList : optList);
+
+				if (newValue==0)
+				{
+					weaponList.Items.Remove(UnitEquipmentItemObj.GetEquipObj(Unit, equip));
+				}
+				else
+				{
+					UnitEquipmentItemObj equipObj = UnitEquipmentItemObj.GetEquipObj(Unit, equip);
+					int idx = weaponList.Items.IndexOf(equipObj);
+
+					if (idx>-1)
+					{
+						weaponList.Items[idx] = equipObj;
+					}
+					else
+					{
+						weaponList.Items.Add(equipObj);
+					}
+				}
+			}
+		}
+
+		private void editWeapon(ListBox list)
+		{
+			FrmEditUnitEquipment editEquip = new FrmEditUnitEquipment(Unit, ((UnitEquipmentItemObj)list.SelectedItem).Item, commandStack);
+			editEquip.ShowDialog(this);
+		}
+
+		private void bttnEditWeapon_Click(object sender, System.EventArgs e)
+		{
+			editWeapon(optList);
+		}
+
+		private void optList_DoubleClick(object sender, System.EventArgs e)
+		{
+			editWeapon(optList);
+		}
+
+		private void reqdList_DoubleClick(object sender, System.EventArgs e)
+		{
+			editWeapon(reqdList);
+		}
+
+		private void addWeapon()
+		{
+			FrmNewUnitEquipment newEquip = new FrmNewUnitEquipment(Unit, commandStack);
+			newEquip.ShowDialog(this);
+		}
+
+		private void bttnAddWeapon_Click(object sender, System.EventArgs e)
+		{
+			addWeapon();
+		}
+
+		private void removeWeapon()
+		{
+			commandStack.Execute(new SetUnitEquipmentAmountCommand(unit, unit.UnitType.GetEquipmentItem(((UnitEquipmentItemObj)optList.SelectedItem).Item.ID).EquipmentItem, 0));
+		}
+
+		private void bttnRemoveWeapon_Click(object sender, System.EventArgs e)
+		{
+			removeWeapon();
+		}
+
+		private void bttnEditReqdWeapon_Click(object sender, System.EventArgs e)
+		{
+			editWeapon(reqdList);
+		}
+
+		private void bttnReplaceWeapon_Click(object sender, System.EventArgs e)
+		{
+			FrmReplaceUnitEquipment replace = new FrmReplaceUnitEquipment(unit, ((UnitEquipmentItemObj)reqdList.SelectedItem).Item, commandStack);
+			replace.ShowDialog(this);
+		}
+	}
+}