Mercurial > repos > IBDev-IBBoard.WarFoundry.GUI.WinForms
view FrmUnit.cs @ 57:f272e70a9f71
Fixes #169: Add more obvious edit and delete options to Army Tree
* Add toolbar with "edit" and "delete" buttons to army tree
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 19 Sep 2009 11:50:04 +0000 |
parents | 346b4ac34997 |
children | c283545d2d0b |
line wrap: on
line source
// This file (FrmUnit.cs) is a part of the IBBoard.WarFoundry.GUI.WinForms project and is copyright 2007, 2008, 2009 IBBoard. // // The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license. using System; using System.Drawing; using System.Data; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms; using IBBoard.Commands; using IBBoard.Lang; using IBBoard.Windows.Forms; using IBBoard.WarFoundry.API; using IBBoard.WarFoundry.API.Commands; using IBBoard.WarFoundry.API.Objects; using IBBoard.WarFoundry.GUI.WinForms.UI; using IBBoard.WarFoundry.GUI.WinForms.Util; namespace IBBoard.WarFoundry.GUI.WinForms { /// <summary> /// Summary description for FrmUnit. /// </summary> public class FrmUnit : IBBoard.Windows.Forms.IBBForm { private Unit unit; private Dictionary<UnitEquipmentItem, UnitEquipmentChoice> equipmentChoices = new Dictionary<UnitEquipmentItem, UnitEquipmentChoice>(); 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; private Label lblPoints; /// <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 DoubleValChangedDelegate(unit_UnitEquipmentAmountChanged); unit.PointsValueChanged += new DoubleValChangedDelegate(unit_PointsValueChanged); 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 == WarFoundryCore.INFINITY ? int.MaxValue : unit.UnitType.MaxSize); unitSize.Minimum = unit.UnitType.MinSize; } SetPointsValueText(); SetStats(); SetWeapons(); } void unit_PointsValueChanged(WarFoundryObject obj, double oldValue, double newValue) { SetPointsValueText(); } private void SetPointsValueText() { lblPoints.Text = "(" + unit.PointsValue + " pts)"; } private void SetStats() { DataTable dt = new DataTable(); Stat[] stats = unit.UnitStatsArrayWithName; int statsCount = stats.Length; DataColumn[] dc = new DataColumn[statsCount]; DataGridTableStyle dgStyle = new DataGridTableStyle(); dgStyle.RowHeadersVisible = false; Stat stat = stats[0]; DataColumn tempCol = new DataColumn(stat.ParentSlotName); tempCol.DataType = stat.GetType(); for (int i = 0; i < statsCount; i++) { stat = stats[i]; tempCol = new DataColumn(stat.ParentSlotName); tempCol.DataType = stat.GetType(); dc[i] = tempCol; DataGridColumnStyle colStyle = new StatColumnStyle(); colStyle.Width = 40; colStyle.MappingName = stat.ParentSlotName; colStyle.HeaderText = stat.ParentSlotName; colStyle.Alignment = HorizontalAlignment.Center; colStyle.ReadOnly = true; dgStyle.GridColumnStyles.Add(colStyle); } DataGridColumnStyle nameColStyle = dgStyle.GridColumnStyles[0]; nameColStyle.HeaderText = Translation.GetTranslation("UnitName", "Name"); nameColStyle.Alignment = HorizontalAlignment.Left; nameColStyle.Width = statsGrid.ClientSize.Width - ((stats.Length - 1) * 40) - 4; dt.Columns.AddRange(dc); DataRow dr = dt.NewRow(); dr.ItemArray = stats; 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(GetEquipmentChoice(item)); } else { optList.Items.Add(GetEquipmentChoice(item)); } } } private UnitEquipmentChoice GetEquipmentChoice(UnitEquipmentItem item) { UnitEquipmentChoice choice = null; equipmentChoices.TryGetValue(item, out choice); if (choice == null) { choice = new UnitEquipmentChoice(Unit, item); equipmentChoices[item] = choice; } return choice; } /// <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(); this.lblPoints = new System.Windows.Forms.Label(); ((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.Anchor = ((System.Windows.Forms.AnchorStyles) (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.statsGrid.BackgroundColor = System.Drawing.SystemColors.Control; this.statsGrid.CaptionVisible = false; this.statsGrid.CausesValidation = 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.Leave += new System.EventHandler(this.tbUnitName_Leave); this.tbUnitName.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tbUnitName_KeyDown); // // unitSize // this.unitSize.Anchor = ((System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 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 decimal(new int[] { 1, 0, 0, 0}); this.unitSize.Leave += new System.EventHandler(this.unitSize_Leave); this.unitSize.KeyDown += new System.Windows.Forms.KeyEventHandler(this.unitSize_KeyDown); // // lblUnitSize // this.lblUnitSize.Anchor = ((System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.lblUnitSize.Location = new System.Drawing.Point(452, 8); this.lblUnitSize.Name = "lblUnitSize"; this.lblUnitSize.Size = new System.Drawing.Size(72, 23); 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.Anchor = ((System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 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.Anchor = ((System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 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.Anchor = ((System.Windows.Forms.AnchorStyles) (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); 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.Anchor = ((System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 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.Anchor = ((System.Windows.Forms.AnchorStyles) (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); 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.Anchor = ((System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 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.Anchor = ((System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 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); // // lblPoints // this.lblPoints.Location = new System.Drawing.Point(358, 8); this.lblPoints.Name = "lblPoints"; this.lblPoints.Size = new System.Drawing.Size(88, 21); this.lblPoints.TabIndex = 12; // // FrmUnit // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(616, 314); this.Controls.Add(this.lblPoints); 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"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmUnit_FormClosing); ((System.ComponentModel.ISupportInitialize) (this.statsGrid)).EndInit(); ((System.ComponentModel.ISupportInitialize) (this.unitSize)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); } #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 && ((UnitEquipmentChoice) 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, double oldValue, double newValue) { if (obj is UnitEquipmentItem) { UnitEquipmentItem equip = (UnitEquipmentItem) obj; ListBox weaponList = (equip.IsRequired ? reqdList : optList); if (newValue == 0) { weaponList.Items.Remove(GetEquipmentChoice(equip)); } else { UnitEquipmentChoice equipObj = GetEquipmentChoice(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, ((UnitEquipmentChoice) 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 SetUnitEquipmentNumericAmountCommand(unit, ((UnitEquipmentChoice) optList.SelectedItem).Item, 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, ((UnitEquipmentChoice) reqdList.SelectedItem).Item, commandStack); replace.ShowDialog(this); } private void FrmUnit_FormClosing(object sender, FormClosingEventArgs e) { UpdateUnitName(); UpdateUnitSize(); } } }