diff FrmNewArmy.cs @ 36:d68992a831df

Fixes #182: Make GTK# more like WinForms UI * Remove "Change Game System" option * Delete "Change Game System" dialogs * Add game system selection to army creation
author IBBoard <dev@ibboard.co.uk>
date Sat, 16 Jan 2010 16:36:12 +0000
parents a191d0655f55
children 4bad8cb3f889 4a33b3012100
line wrap: on
line diff
--- a/FrmNewArmy.cs	Sat Jan 16 11:07:15 2010 +0000
+++ b/FrmNewArmy.cs	Sat Jan 16 16:36:12 2010 +0000
@@ -7,6 +7,7 @@
 using IBBoard.Lang;
 using IBBoard.WarFoundry.API;
 using IBBoard.WarFoundry.API.Objects;
+using IBBoard.GtkSharp;
 using log4net;
 
 namespace IBBoard.WarFoundry.GTK
@@ -14,7 +15,6 @@
 	public partial class FrmNewArmy : Dialog, ITranslatable
 	{
 		private ILog logger = LogManager.GetLogger(typeof(FrmNewArmy));
-		private GameSystem system;
 		private Race race;
 		private string armyName;
 		private int pointsValue;
@@ -23,22 +23,32 @@
 		{
 			this.Build();
 			
-			system = gameSystem;
+			GameSystem[] gameSystems = WarFoundryLoader.GetDefault().GetGameSystems();
+			ComboBoxUtils.FillCombo(systemCombo, gameSystems, delegate(GameSystem sys){return sys.Name;});
+			
+			if (gameSystem != null)
+			{
+				ComboBoxUtils.SelectItem(systemCombo, gameSystem);
+			}
+			else if (gameSystems.Length == 1)
+			{
+				ComboBoxUtils.SelectIndex(systemCombo, 0);
+			}
+			
 			lstRaces.Selection.Changed+= new EventHandler(OnSelectionChanged);
+			
 			TreeViewColumn raceColumn = new TreeViewColumn ();
 			raceColumn.Title = "Race";
 			CellRendererText raceCell = new CellRendererText ();
 			raceColumn.PackStart (raceCell, true);
 			lstRaces.AppendColumn(raceColumn);
 			raceColumn.SetCellDataFunc(raceCell, new TreeCellDataFunc(RenderRaceName));
-			ListStore store = new ListStore(typeof(Race));
+
 			
-			foreach (Race r in WarFoundryLoader.GetDefault().GetRaces(system))
+			if (gameSystem!=null)
 			{
-				store.AppendValues(r);
+				SetRaces(gameSystem);
 			}
-			
-			lstRaces.Model = store;
 		}
 		
 		public string Text
@@ -55,13 +65,13 @@
 
 		protected virtual void OnSelectionChanged(object o, EventArgs e)
 		{
-			logger.Debug("Selection changed");
-			setOkayButtonState();
+			logger.Debug("Race selection changed");
+			SetOkayButtonState();
 		}
 		
-		private void setOkayButtonState()
+		private void SetOkayButtonState()
 		{
-			bttnCreate.Sensitive = (lstRaces.Selection.CountSelectedRows() > 0 && txtArmyName.Text!="" && sbPointsValue.Value > 0);
+			bttnCreate.Sensitive = (lstRaces.Selection.CountSelectedRows() == 1 && txtArmyName.Text!="" && sbPointsValue.Value > 0);
 		}
 
 		protected virtual void OnCreateClicked (object sender, System.EventArgs e)
@@ -82,17 +92,40 @@
 
 		protected virtual void OnTextChanged (object sender, System.EventArgs e)
 		{
-			setOkayButtonState();
+			SetOkayButtonState();
 		}
 
 		protected virtual void OnSpinChangeValue (object o, Gtk.ChangeValueArgs args)
 		{
-			setOkayButtonState();
+			SetOkayButtonState();
 		}
 
 		protected virtual void OnSpinValueChanged (object sender, System.EventArgs e)
 		{
-			setOkayButtonState();
+			SetOkayButtonState();
+		}
+		
+		protected virtual void OnSystemComboChanged (object sender, System.EventArgs e)
+		{
+			GameSystem system = ComboBoxUtils.GetSelectedItem<GameSystem>(systemCombo);
+			SetRaces(system);
+			logger.Debug("System selection changed: " + (system == null ? "null" : system.Name));
+			SetOkayButtonState();
+		}
+		
+		private void SetRaces(GameSystem system)
+		{	
+			ListStore store = new ListStore(typeof(Race));
+			
+			if (system != null)
+			{
+				foreach (Race race in WarFoundryLoader.GetDefault().GetRaces(system))
+				{
+					store.AppendValues(race);
+				}
+			}
+			
+			lstRaces.Model = store;
 		}
 		
 		public Race SelectedRace