changeset 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
files App.ico App_ico.psd AssemblyInfo.cs FrmArmyTree.cs FrmArmyTree.resources FrmArmyTree.resx FrmDebugOutput.cs FrmDebugOutput.resources FrmDebugOutput.resx FrmEditUnitEquipment.cs FrmEditUnitEquipment.resources FrmEditUnitEquipment.resx FrmMain.cs FrmMain.resources FrmMain.resx FrmNewArmy.cs FrmNewArmy.resources FrmNewArmy.resx FrmNewUnit.cs FrmNewUnit.resources FrmNewUnit.resx FrmNewUnitEquipment.cs FrmNewUnitEquipment.resources FrmNewUnitEquipment.resx FrmReplaceUnitEquipment.cs FrmReplaceUnitEquipment.resources FrmReplaceUnitEquipment.resx FrmSelectSystem.cs FrmSelectSystem.resources FrmSelectSystem.resx FrmUnit.cs FrmUnit.resources FrmUnit.resx IBBoard.WarFoundry.csproj IBBoard.WarFoundry.csproj.backup IBBoard.WarFoundry.csproj.user IBBoard.WarFoundry.mdp IBBoard.WarFoundry.pidb WarFoundry.exe.manifest WarFoundryPref.xml app.config libs/log4net.dll libs/log4net.xml
diffstat 43 files changed, 34846 insertions(+), 0 deletions(-) [+]
line diff
     1.1 Binary file App.ico has changed
     2.1 Binary file App_ico.psd has changed
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/AssemblyInfo.cs	Fri Dec 19 15:57:51 2008 +0000
     3.3 @@ -0,0 +1,58 @@
     3.4 +using System.Reflection;
     3.5 +using System.Runtime.CompilerServices;
     3.6 +
     3.7 +//
     3.8 +// General Information about an assembly is controlled through the following 
     3.9 +// set of attributes. Change these attribute values to modify the information
    3.10 +// associated with an assembly.
    3.11 +//
    3.12 +[assembly: AssemblyTitle("WarFoundry Army Builder")]
    3.13 +[assembly: AssemblyDescription("WarFoundry is an army creator/designer/builder designed to cover a wide range of war game systems")]
    3.14 +[assembly: AssemblyConfiguration("")]
    3.15 +[assembly: AssemblyCompany("")]
    3.16 +[assembly: AssemblyProduct("WarFoundry")]
    3.17 +[assembly: AssemblyCopyright("IBBoard, 2007")]
    3.18 +[assembly: AssemblyTrademark("")]
    3.19 +[assembly: AssemblyCulture("")]		
    3.20 +
    3.21 +//
    3.22 +// Version information for an assembly consists of the following four values:
    3.23 +//
    3.24 +//      Major Version
    3.25 +//      Minor Version 
    3.26 +//      Build Number
    3.27 +//      Revision
    3.28 +//
    3.29 +// You can specify all the values or you can default the Revision and Build Numbers 
    3.30 +// by using the '*' as shown below:
    3.31 +
    3.32 +[assembly: AssemblyVersion("1.0.0.*")]
    3.33 +
    3.34 +//
    3.35 +// In order to sign your assembly you must specify a key to use. Refer to the 
    3.36 +// Microsoft .NET Framework documentation for more information on assembly signing.
    3.37 +//
    3.38 +// Use the attributes below to control which key is used for signing. 
    3.39 +//
    3.40 +// Notes: 
    3.41 +//   (*) If no key is specified, the assembly is not signed.
    3.42 +//   (*) KeyName refers to a key that has been installed in the Crypto Service
    3.43 +//       Provider (CSP) on your machine. KeyFile refers to a file which contains
    3.44 +//       a key.
    3.45 +//   (*) If the KeyFile and the KeyName values are both specified, the 
    3.46 +//       following processing occurs:
    3.47 +//       (1) If the KeyName can be found in the CSP, that key is used.
    3.48 +//       (2) If the KeyName does not exist and the KeyFile does exist, the key 
    3.49 +//           in the KeyFile is installed into the CSP and used.
    3.50 +//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
    3.51 +//       When specifying the KeyFile, the location of the KeyFile should be
    3.52 +//       relative to the project output directory which is
    3.53 +//       %Project Directory%\obj\<configuration>. For example, if your KeyFile is
    3.54 +//       located in the project directory, you would specify the AssemblyKeyFile 
    3.55 +//       attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
    3.56 +//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
    3.57 +//       documentation for more information on this.
    3.58 +//
    3.59 +[assembly: AssemblyDelaySign(false)]
    3.60 +[assembly: AssemblyKeyFile("")]
    3.61 +[assembly: AssemblyKeyName("")]
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/FrmArmyTree.cs	Fri Dec 19 15:57:51 2008 +0000
     4.3 @@ -0,0 +1,381 @@
     4.4 +using System;
     4.5 +using System.Drawing;
     4.6 +using System.Collections;
     4.7 +using System.ComponentModel;
     4.8 +using System.Windows.Forms;
     4.9 +using IBBoard.Commands;
    4.10 +using IBBoard.WarFoundry.API;
    4.11 +using IBBoard.WarFoundry.API.Commands;
    4.12 +using IBBoard.Windows.Forms;
    4.13 +
    4.14 +namespace IBBoard.WarFoundry
    4.15 +{
    4.16 +	/// <summary>
    4.17 +	/// Summary description for FrmArmyTree.
    4.18 +	/// </summary>
    4.19 +	public class FrmArmyTree : IBBoard.Windows.Forms.IBBForm
    4.20 +	{
    4.21 +		private System.Windows.Forms.TreeView treeView;
    4.22 +		/// <summary>
    4.23 +		/// Required designer variable.
    4.24 +		/// </summary>
    4.25 +		private System.ComponentModel.Container components = null;
    4.26 +		private Hashtable htNodes;
    4.27 +		private System.Windows.Forms.ContextMenu contextMenu;
    4.28 +		private System.Windows.Forms.MenuItem miDelete;
    4.29 +		private System.Windows.Forms.MenuItem miEdit;
    4.30 +		private Hashtable htUnitWindows;
    4.31 +		
    4.32 +		private ObjectAddDelegate UnitAddedMethod;
    4.33 +		private ObjectRemoveDelegate UnitRemovedMethod;
    4.34 +		private StringValChangedDelegate UnitNameChangedMethod, ArmyNameChangedMethod, TreeNameChangedMethod;
    4.35 +        private CommandStack commandStack;
    4.36 +
    4.37 +		public FrmArmyTree(CommandStack cmdStack)
    4.38 +		{
    4.39 +            commandStack = cmdStack;
    4.40 +			InitializeComponent();
    4.41 +			UnitAddedMethod = new ObjectAddDelegate(AddUnit);
    4.42 +			UnitRemovedMethod = new ObjectRemoveDelegate(RemoveUnit);
    4.43 +			UnitNameChangedMethod = new StringValChangedDelegate(UpdateUnitName);
    4.44 +			ArmyNameChangedMethod = new StringValChangedDelegate(UpdateArmyName);
    4.45 +			TreeNameChangedMethod = new StringValChangedDelegate(FrmArmyTree_TreeNameChanged);
    4.46 +			htNodes = new Hashtable();
    4.47 +			htUnitWindows = new Hashtable();
    4.48 +			this.Name = "ArmyTree";			
    4.49 +			WarFoundryCore.ArmyChanged+= new ArmyChangedDelegate(FrmArmyTree_ArmyChanged);
    4.50 +		}
    4.51 +
    4.52 +		public FrmArmyTree(Army army, CommandStack cmdStack) : this(cmdStack)
    4.53 +		{
    4.54 +			SetArmy(army);
    4.55 +		}
    4.56 +
    4.57 +		/// <summary>
    4.58 +		/// Clean up any resources being used.
    4.59 +		/// </summary>
    4.60 +		protected override void Dispose( bool disposing )
    4.61 +		{
    4.62 +			if( disposing )
    4.63 +			{
    4.64 +				if(components != null)
    4.65 +				{
    4.66 +					components.Dispose();
    4.67 +				}
    4.68 +			}
    4.69 +			base.Dispose( disposing );
    4.70 +		}
    4.71 +
    4.72 +		#region Windows Form Designer generated code
    4.73 +		/// <summary>
    4.74 +		/// Required method for Designer support - do not modify
    4.75 +		/// the contents of this method with the code editor.
    4.76 +		/// </summary>
    4.77 +		private void InitializeComponent()
    4.78 +		{
    4.79 +			this.treeView = new System.Windows.Forms.TreeView();
    4.80 +			this.contextMenu = new System.Windows.Forms.ContextMenu();
    4.81 +			this.miEdit = new System.Windows.Forms.MenuItem();
    4.82 +			this.miDelete = new System.Windows.Forms.MenuItem();
    4.83 +			this.SuspendLayout();
    4.84 +			// 
    4.85 +			// treeView
    4.86 +			// 
    4.87 +			this.treeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
    4.88 +				| System.Windows.Forms.AnchorStyles.Left) 
    4.89 +				| System.Windows.Forms.AnchorStyles.Right)));
    4.90 +			this.treeView.ContextMenu = this.contextMenu;
    4.91 +			this.treeView.FullRowSelect = true;
    4.92 +			this.treeView.ImageIndex = -1;
    4.93 +			this.treeView.Location = new System.Drawing.Point(0, 0);
    4.94 +			this.treeView.Name = "treeView";
    4.95 +			this.treeView.SelectedImageIndex = -1;
    4.96 +			this.treeView.Size = new System.Drawing.Size(240, 278);
    4.97 +			this.treeView.TabIndex = 0;
    4.98 +			this.treeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.treeView_MouseDown);
    4.99 +			this.treeView.DoubleClick += new System.EventHandler(this.treeView_DoubleClick);
   4.100 +			// 
   4.101 +			// contextMenu
   4.102 +			// 
   4.103 +			this.contextMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
   4.104 +																						this.miEdit,
   4.105 +																						this.miDelete});
   4.106 +			this.contextMenu.Popup += new System.EventHandler(this.contextMenu_Popup);
   4.107 +			// 
   4.108 +			// miEdit
   4.109 +			// 
   4.110 +			this.miEdit.Index = 0;
   4.111 +			this.miEdit.Text = "&Edit unit";
   4.112 +			this.miEdit.Click += new System.EventHandler(this.miEdit_Click);
   4.113 +			// 
   4.114 +			// miDelete
   4.115 +			// 
   4.116 +			this.miDelete.Index = 1;
   4.117 +			this.miDelete.Text = "&Delete unit";
   4.118 +			this.miDelete.Click += new System.EventHandler(this.miDelete_Click);
   4.119 +			// 
   4.120 +			// FrmArmyTree
   4.121 +			// 
   4.122 +			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
   4.123 +			this.ClientSize = new System.Drawing.Size(240, 277);
   4.124 +			this.ControlBox = false;
   4.125 +			this.Controls.Add(this.treeView);
   4.126 +			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
   4.127 +			this.MaximizeBox = false;
   4.128 +			this.MinimizeBox = false;
   4.129 +			this.Name = "FrmArmyTree";
   4.130 +			this.Text = "FrmArmyTree";
   4.131 +			this.ResumeLayout(false);
   4.132 +
   4.133 +		}
   4.134 +		#endregion
   4.135 +
   4.136 +		private void ClearArmy()
   4.137 +		{
   4.138 +			htNodes.Clear();
   4.139 +			treeView.Nodes.Clear();
   4.140 +
   4.141 +			ArrayList list = new ArrayList(htUnitWindows.Values);
   4.142 +
   4.143 +			foreach (FrmUnit window in list)
   4.144 +			{
   4.145 +				window.Close();
   4.146 +			}
   4.147 +
   4.148 +			htUnitWindows.Clear();
   4.149 +		}
   4.150 +
   4.151 +		private void SetArmy(Army army)
   4.152 +		{
   4.153 +			if (army!=null)
   4.154 +			{
   4.155 +				ArmyCategory[] cats = army.Categories;
   4.156 +				TreeNode[] catNodes = new TreeNode[cats.Length];
   4.157 +				Unit[] units;
   4.158 +
   4.159 +				for (int i = 0; i<cats.Length; i++)
   4.160 +				{
   4.161 +					units = army.GetUnits(cats[i]);
   4.162 +                    cats[i].NameChanged += TreeNameChangedMethod;
   4.163 +					TreeNode[] unitNodes = new TreeNode[units.Length];
   4.164 +					TreeNode temp;
   4.165 +
   4.166 +					for (int j = 0; j<units.Length; j++)
   4.167 +					{
   4.168 +						unitNodes[j] = createTreeNode(units[j]);
   4.169 +					}
   4.170 +
   4.171 +					temp = new TreeNode(cats[i].Name, unitNodes);
   4.172 +					temp.Tag = cats[i];
   4.173 +					catNodes[i] = temp;
   4.174 +					htNodes[cats[i].ID] = temp;
   4.175 +				}
   4.176 +
   4.177 +				TreeNode root = new TreeNode(army.Name, catNodes);
   4.178 +				root.Tag = army;
   4.179 +				treeView.Nodes.Add(root);
   4.180 +				root.ExpandAll();
   4.181 +			}
   4.182 +		}
   4.183 +
   4.184 +		private TreeNode createTreeNode(Unit unit)
   4.185 +		{
   4.186 +            TreeNode temp = new TreeNode(unit.Name);
   4.187 +			temp.Tag = unit;
   4.188 +			unit.NameChanged+= UnitNameChangedMethod;
   4.189 +			htNodes[unit.ID] = temp;
   4.190 +			return temp;
   4.191 +		}
   4.192 +
   4.193 +		/*private void FrmArmyTree_Move(object sender, System.EventArgs e)
   4.194 +		{
   4.195 +			if (ParentForm is FrmMain)
   4.196 +			{
   4.197 +				FrmMain main = (FrmMain)ParentForm;
   4.198 +				main.Invoke(new MethodInvoker(main.MdiChildMoved));
   4.199 +			}
   4.200 +		}*/
   4.201 +
   4.202 +		public void FrmArmyTree_ArmyChanged(Army oldArmy, Army newArmy)
   4.203 +		{
   4.204 +            if (oldArmy != null)
   4.205 +            {
   4.206 +                oldArmy.UnitAdded -= UnitAddedMethod;
   4.207 +                oldArmy.UnitRemoved -= UnitRemovedMethod;
   4.208 +            }
   4.209 +
   4.210 +            if (newArmy != null)
   4.211 +			{
   4.212 +                newArmy.UnitAdded += UnitAddedMethod;
   4.213 +                newArmy.UnitRemoved += UnitRemovedMethod;
   4.214 +                SetArmy(newArmy);
   4.215 +			}
   4.216 +			else
   4.217 +			{
   4.218 +				ClearArmy();
   4.219 +			}
   4.220 +		}
   4.221 +		
   4.222 +		private void AddUnit(object obj)
   4.223 +		{
   4.224 +			if (obj is Unit)
   4.225 +			{
   4.226 +				Unit unit = (Unit)obj;
   4.227 +				ArmyCategory cat = unit.Category;
   4.228 +				TreeNode parent = (TreeNode)htNodes[cat.ID];
   4.229 +				TreeNode unitNode = createTreeNode(unit);
   4.230 +				parent.Nodes.Add(unitNode);
   4.231 +				parent.Expand(); //make sure it's expanded
   4.232 +			}
   4.233 +		}
   4.234 +
   4.235 +		private void RemoveUnit(object obj)
   4.236 +		{
   4.237 +			if (obj is Unit)
   4.238 +			{
   4.239 +				Unit unit = (Unit)obj;
   4.240 +				removeUnit(unit);
   4.241 +			}
   4.242 +		}
   4.243 +
   4.244 +		private void removeUnit(Unit unit)
   4.245 +		{
   4.246 +			TreeNode unitNode = (TreeNode)htNodes[unit.ID];
   4.247 +			unit.NameChanged-= UnitNameChangedMethod;
   4.248 +
   4.249 +			if (unitNode!=null)
   4.250 +			{
   4.251 +				unitNode.Remove();
   4.252 +				htNodes.Remove(unit.ID);
   4.253 +			}
   4.254 +		}
   4.255 +
   4.256 +
   4.257 +		private void contextMenu_Popup(object sender, System.EventArgs e)
   4.258 +		{
   4.259 +			TreeNode node = treeView.SelectedNode;
   4.260 +			if (node!=null && node.Tag is Unit)
   4.261 +			{
   4.262 +				foreach(MenuItem item in contextMenu.MenuItems)
   4.263 +				{
   4.264 +					item.Visible = true;
   4.265 +				}
   4.266 +			}
   4.267 +			else
   4.268 +			{
   4.269 +				foreach(MenuItem item in contextMenu.MenuItems)
   4.270 +				{
   4.271 +					item.Visible = false;
   4.272 +				}
   4.273 +			}
   4.274 +		}
   4.275 +
   4.276 +		private void treeView_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
   4.277 +		{
   4.278 +			if (e.Button == MouseButtons.Right)
   4.279 +			{
   4.280 +				TreeNode tn = treeView.GetNodeAt(e.X, e.Y);
   4.281 +
   4.282 +				if (tn!=null)
   4.283 +				{
   4.284 +					treeView.SelectedNode = tn;
   4.285 +				}
   4.286 +				else
   4.287 +				{
   4.288 +					treeView.SelectedNode = null;
   4.289 +				}
   4.290 +			}
   4.291 +		}
   4.292 +
   4.293 +		private void miDelete_Click(object sender, System.EventArgs e)
   4.294 +		{
   4.295 +			TreeNode selected = treeView.SelectedNode;
   4.296 +
   4.297 +			if (selected.Tag!=null && selected.Tag is Unit)
   4.298 +			{
   4.299 +				Unit unit = (Unit)selected.Tag;
   4.300 +				commandStack.Execute(new RemoveUnitCommand(unit));
   4.301 +			}
   4.302 +		}
   4.303 +
   4.304 +		private void miEdit_Click(object sender, System.EventArgs e)
   4.305 +		{	
   4.306 +			editUnit();
   4.307 +		}
   4.308 +
   4.309 +		private void treeView_DoubleClick(object sender, System.EventArgs e)
   4.310 +		{
   4.311 +			editUnit();			
   4.312 +		}
   4.313 +
   4.314 +		private void editUnit()
   4.315 +		{
   4.316 +			TreeNode selected = treeView.SelectedNode;
   4.317 +
   4.318 +			if (selected.Tag!=null && selected.Tag is Unit)
   4.319 +			{
   4.320 +				Unit unit = (Unit)selected.Tag;
   4.321 +
   4.322 +				if (htUnitWindows.ContainsKey(unit.ID))
   4.323 +				{
   4.324 +					((FrmUnit)htUnitWindows[unit.ID]).Focus();
   4.325 +				}
   4.326 +				else
   4.327 +				{
   4.328 +					FrmUnit unitForm = new FrmUnit(unit, commandStack);
   4.329 +					htUnitWindows.Add(unit.ID, unitForm);
   4.330 +					unitForm.MdiParent = this.MdiParent;
   4.331 +					unitForm.Closing+=new CancelEventHandler(unitForm_Closing);
   4.332 +					unitForm.Show();
   4.333 +				}
   4.334 +			}
   4.335 +		}
   4.336 +
   4.337 +		private void UpdateUnitName(WarFoundryObject obj, string oldValue, string newValue)
   4.338 +		{
   4.339 +			if (obj is Unit)
   4.340 +			{
   4.341 +				Unit unit = (Unit)obj;
   4.342 +				TreeNode node = (TreeNode)htNodes[unit.ID];
   4.343 +				
   4.344 +				if (node!=null)
   4.345 +				{
   4.346 +                    node.Text = unit.Name;
   4.347 +				}
   4.348 +			}
   4.349 +		}
   4.350 +
   4.351 +		private void UpdateArmyName(WarFoundryObject obj, string oldValue, string newValue)
   4.352 +		{
   4.353 +			if (obj is Army)
   4.354 +			{
   4.355 +				Army army = (Army)obj;
   4.356 +				TreeNode node = treeView.Nodes[0];
   4.357 +				
   4.358 +				if (node!=null)
   4.359 +				{
   4.360 +                    node.Text = army.Name;
   4.361 +				}
   4.362 +			}
   4.363 +		}
   4.364 +
   4.365 +		private void unitForm_Closing(object sender, CancelEventArgs e)
   4.366 +		{
   4.367 +			if (sender is FrmUnit)
   4.368 +			{
   4.369 +				FrmUnit unitForm = (FrmUnit)sender;
   4.370 +				htUnitWindows.Remove(unitForm.Unit.ID);
   4.371 +			}
   4.372 +		}
   4.373 +
   4.374 +		private void FrmArmyTree_TreeNameChanged(WarFoundryObject obj, string oldValue, string newValue)
   4.375 +		{
   4.376 +			TreeNode node = (TreeNode)htNodes[obj.ID];
   4.377 +
   4.378 +			if (node!=null)
   4.379 +			{
   4.380 +                node.Text = obj.Name;
   4.381 +			}
   4.382 +		}
   4.383 +	}
   4.384 +}
     5.1 Binary file FrmArmyTree.resources has changed
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/FrmArmyTree.resx	Fri Dec 19 15:57:51 2008 +0000
     6.3 @@ -0,0 +1,160 @@
     6.4 +<?xml version="1.0" encoding="utf-8"?>
     6.5 +<root>
     6.6 +  <!-- 
     6.7 +    Microsoft ResX Schema 
     6.8 +    
     6.9 +    Version 1.3
    6.10 +    
    6.11 +    The primary goals of this format is to allow a simple XML format 
    6.12 +    that is mostly human readable. The generation and parsing of the 
    6.13 +    various data types are done through the TypeConverter classes 
    6.14 +    associated with the data types.
    6.15 +    
    6.16 +    Example:
    6.17 +    
    6.18 +    ... ado.net/XML headers & schema ...
    6.19 +    <resheader name="resmimetype">text/microsoft-resx</resheader>
    6.20 +    <resheader name="version">1.3</resheader>
    6.21 +    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    6.22 +    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    6.23 +    <data name="Name1">this is my long string</data>
    6.24 +    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    6.25 +    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
    6.26 +        [base64 mime encoded serialized .NET Framework object]
    6.27 +    </data>
    6.28 +    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    6.29 +        [base64 mime encoded string representing a byte array form of the .NET Framework object]
    6.30 +    </data>
    6.31 +                
    6.32 +    There are any number of "resheader" rows that contain simple 
    6.33 +    name/value pairs.
    6.34 +    
    6.35 +    Each data row contains a name, and value. The row also contains a 
    6.36 +    type or mimetype. Type corresponds to a .NET class that support 
    6.37 +    text/value conversion through the TypeConverter architecture. 
    6.38 +    Classes that don't support this are serialized and stored with the 
    6.39 +    mimetype set.
    6.40 +    
    6.41 +    The mimetype is used forserialized objects, and tells the 
    6.42 +    ResXResourceReader how to depersist the object. This is currently not 
    6.43 +    extensible. For a given mimetype the value must be set accordingly:
    6.44 +    
    6.45 +    Note - application/x-microsoft.net.object.binary.base64 is the format 
    6.46 +    that the ResXResourceWriter will generate, however the reader can 
    6.47 +    read any of the formats listed below.
    6.48 +    
    6.49 +    mimetype: application/x-microsoft.net.object.binary.base64
    6.50 +    value   : The object must be serialized with 
    6.51 +            : System.Serialization.Formatters.Binary.BinaryFormatter
    6.52 +            : and then encoded with base64 encoding.
    6.53 +    
    6.54 +    mimetype: application/x-microsoft.net.object.soap.base64
    6.55 +    value   : The object must be serialized with 
    6.56 +            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
    6.57 +            : and then encoded with base64 encoding.
    6.58 +
    6.59 +    mimetype: application/x-microsoft.net.object.bytearray.base64
    6.60 +    value   : The object must be serialized into a byte array 
    6.61 +            : using a System.ComponentModel.TypeConverter
    6.62 +            : and then encoded with base64 encoding.
    6.63 +    -->
    6.64 +  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    6.65 +    <xsd:element name="root" msdata:IsDataSet="true">
    6.66 +      <xsd:complexType>
    6.67 +        <xsd:choice maxOccurs="unbounded">
    6.68 +          <xsd:element name="data">
    6.69 +            <xsd:complexType>
    6.70 +              <xsd:sequence>
    6.71 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
    6.72 +                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
    6.73 +              </xsd:sequence>
    6.74 +              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
    6.75 +              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
    6.76 +              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
    6.77 +            </xsd:complexType>
    6.78 +          </xsd:element>
    6.79 +          <xsd:element name="resheader">
    6.80 +            <xsd:complexType>
    6.81 +              <xsd:sequence>
    6.82 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
    6.83 +              </xsd:sequence>
    6.84 +              <xsd:attribute name="name" type="xsd:string" use="required" />
    6.85 +            </xsd:complexType>
    6.86 +          </xsd:element>
    6.87 +        </xsd:choice>
    6.88 +      </xsd:complexType>
    6.89 +    </xsd:element>
    6.90 +  </xsd:schema>
    6.91 +  <resheader name="resmimetype">
    6.92 +    <value>text/microsoft-resx</value>
    6.93 +  </resheader>
    6.94 +  <resheader name="version">
    6.95 +    <value>1.3</value>
    6.96 +  </resheader>
    6.97 +  <resheader name="reader">
    6.98 +    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    6.99 +  </resheader>
   6.100 +  <resheader name="writer">
   6.101 +    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   6.102 +  </resheader>
   6.103 +  <data name="treeView.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.104 +    <value>Private</value>
   6.105 +  </data>
   6.106 +  <data name="treeView.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.107 +    <value>Private</value>
   6.108 +  </data>
   6.109 +  <data name="treeView.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.110 +    <value>False</value>
   6.111 +  </data>
   6.112 +  <data name="contextMenu.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.113 +    <value>Private</value>
   6.114 +  </data>
   6.115 +  <data name="contextMenu.Location" type="System.Drawing.Point, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
   6.116 +    <value>17, 17</value>
   6.117 +  </data>
   6.118 +  <data name="contextMenu.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.119 +    <value>Private</value>
   6.120 +  </data>
   6.121 +  <data name="miEdit.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.122 +    <value>Private</value>
   6.123 +  </data>
   6.124 +  <data name="miEdit.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.125 +    <value>Private</value>
   6.126 +  </data>
   6.127 +  <data name="miDelete.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.128 +    <value>Private</value>
   6.129 +  </data>
   6.130 +  <data name="miDelete.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.131 +    <value>Private</value>
   6.132 +  </data>
   6.133 +  <data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.134 +    <value>False</value>
   6.135 +  </data>
   6.136 +  <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.137 +    <value>(Default)</value>
   6.138 +  </data>
   6.139 +  <data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.140 +    <value>False</value>
   6.141 +  </data>
   6.142 +  <data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.143 +    <value>False</value>
   6.144 +  </data>
   6.145 +  <data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
   6.146 +    <value>8, 8</value>
   6.147 +  </data>
   6.148 +  <data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.149 +    <value>True</value>
   6.150 +  </data>
   6.151 +  <data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.152 +    <value>80</value>
   6.153 +  </data>
   6.154 +  <data name="$this.Name">
   6.155 +    <value>FrmArmyTree</value>
   6.156 +  </data>
   6.157 +  <data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.158 +    <value>True</value>
   6.159 +  </data>
   6.160 +  <data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   6.161 +    <value>Private</value>
   6.162 +  </data>
   6.163 +</root>
   6.164 \ No newline at end of file
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/FrmDebugOutput.cs	Fri Dec 19 15:57:51 2008 +0000
     7.3 @@ -0,0 +1,306 @@
     7.4 +using System;
     7.5 +using System.Drawing;
     7.6 +using System.Collections;
     7.7 +using System.ComponentModel;
     7.8 +using System.Text;
     7.9 +using System.Windows.Forms;
    7.10 +using IBBoard.Lang;
    7.11 +using IBBoard.Logging;
    7.12 +using IBBoard.Windows.Forms;
    7.13 +
    7.14 +namespace IBBoard.WarFoundry
    7.15 +{
    7.16 +	/// <summary>
    7.17 +	/// Summary description for FrmDebugOutput.
    7.18 +	/// </summary>
    7.19 +	public class FrmDebugOutput : IBBForm
    7.20 +	{
    7.21 +		private System.Windows.Forms.ListBox lstDebugItems;
    7.22 +		private System.Windows.Forms.ComboBox cmbDebugLevel;
    7.23 +		private System.Windows.Forms.Label lblDebugLevel;
    7.24 +		/// <summary>
    7.25 +		/// Required designer variable.
    7.26 +		/// </summary>
    7.27 +		private System.ComponentModel.Container components = null;
    7.28 +		private Logger logger;
    7.29 +		private System.Windows.Forms.ContextMenu contextMenu;
    7.30 +		private System.Windows.Forms.MenuItem miCopy;
    7.31 +		private System.Windows.Forms.TextBox txtDetail;
    7.32 +		private System.Windows.Forms.Splitter splitter1;
    7.33 +		private System.Windows.Forms.Panel panel1;
    7.34 +		private int MAX_LIST_LENGTH = 50;
    7.35 +
    7.36 +		public FrmDebugOutput()
    7.37 +		{
    7.38 +			//this.logger = logger;
    7.39 +			//logger.LogUpdatedEvent+=new IBBoard.Logging.Logger.LogUpdatedDelegate(logger_LogUpdatedEvent);
    7.40 +			//
    7.41 +			// Required for Windows Form Designer support
    7.42 +			//
    7.43 +			InitializeComponent();
    7.44 +
    7.45 +			/*if (LogLevels.Debug >= logger.LogLevel)
    7.46 +			{
    7.47 +				cmbDebugLevel.Items.Add(LogLevels.Debug);
    7.48 +			}
    7.49 +
    7.50 +			if (LogLevels.Info >= logger.LogLevel)
    7.51 +			{
    7.52 +				cmbDebugLevel.Items.Add(LogLevels.Info);
    7.53 +			}
    7.54 +
    7.55 +			if (LogLevels.Warning >= logger.LogLevel)
    7.56 +			{
    7.57 +				cmbDebugLevel.Items.Add(LogLevels.Warning);
    7.58 +			}
    7.59 +
    7.60 +			if (LogLevels.Error >= logger.LogLevel)
    7.61 +			{
    7.62 +				cmbDebugLevel.Items.Add(LogLevels.Error);
    7.63 +			}
    7.64 +
    7.65 +			if (LogLevels.Critical >= logger.LogLevel)
    7.66 +			{
    7.67 +				cmbDebugLevel.Items.Add(LogLevels.Critical);
    7.68 +			}*/
    7.69 +
    7.70 +			this.Name = "DebugOutputForm";
    7.71 +
    7.72 +			cmbDebugLevel.SelectedItem = logger.LogLevel;
    7.73 +
    7.74 +			Translation.Translate(this, true);
    7.75 +
    7.76 +			fillDebugList();
    7.77 +		}
    7.78 +
    7.79 +		/// <summary>
    7.80 +		/// Clean up any resources being used.
    7.81 +		/// </summary>
    7.82 +		protected override void Dispose( bool disposing )
    7.83 +		{
    7.84 +			if( disposing )
    7.85 +			{
    7.86 +				if(components != null)
    7.87 +				{
    7.88 +					components.Dispose();
    7.89 +				}
    7.90 +			}
    7.91 +			base.Dispose( disposing );
    7.92 +		}
    7.93 +
    7.94 +		#region Windows Form Designer generated code
    7.95 +		/// <summary>
    7.96 +		/// Required method for Designer support - do not modify
    7.97 +		/// the contents of this method with the code editor.
    7.98 +		/// </summary>
    7.99 +		private void InitializeComponent()
   7.100 +		{
   7.101 +			this.lstDebugItems = new System.Windows.Forms.ListBox();
   7.102 +			this.contextMenu = new System.Windows.Forms.ContextMenu();
   7.103 +			this.miCopy = new System.Windows.Forms.MenuItem();
   7.104 +			this.cmbDebugLevel = new System.Windows.Forms.ComboBox();
   7.105 +			this.lblDebugLevel = new System.Windows.Forms.Label();
   7.106 +			this.txtDetail = new System.Windows.Forms.TextBox();
   7.107 +			this.splitter1 = new System.Windows.Forms.Splitter();
   7.108 +			this.panel1 = new System.Windows.Forms.Panel();
   7.109 +			this.SuspendLayout();
   7.110 +			// 
   7.111 +			// lstDebugItems
   7.112 +			// 
   7.113 +			this.lstDebugItems.ContextMenu = this.contextMenu;
   7.114 +			this.lstDebugItems.Dock = System.Windows.Forms.DockStyle.Fill;
   7.115 +			this.lstDebugItems.IntegralHeight = false;
   7.116 +			this.lstDebugItems.Location = new System.Drawing.Point(0, 24);
   7.117 +			this.lstDebugItems.Name = "lstDebugItems";
   7.118 +			this.lstDebugItems.ScrollAlwaysVisible = true;
   7.119 +			this.lstDebugItems.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
   7.120 +			this.lstDebugItems.Size = new System.Drawing.Size(656, 144);
   7.121 +			this.lstDebugItems.TabIndex = 0;
   7.122 +			this.lstDebugItems.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lstDebugItems_MouseDown);
   7.123 +			this.lstDebugItems.SelectedIndexChanged += new System.EventHandler(this.lstDebugItems_SelectedIndexChanged);
   7.124 +			// 
   7.125 +			// contextMenu
   7.126 +			// 
   7.127 +			this.contextMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
   7.128 +																						this.miCopy});
   7.129 +			this.contextMenu.Popup += new System.EventHandler(this.contextMenu_Popup);
   7.130 +			// 
   7.131 +			// miCopy
   7.132 +			// 
   7.133 +			this.miCopy.Index = 0;
   7.134 +			this.miCopy.Text = "&Copy";
   7.135 +			this.miCopy.Click += new System.EventHandler(this.miCopy_Click);
   7.136 +			// 
   7.137 +			// cmbDebugLevel
   7.138 +			// 
   7.139 +			this.cmbDebugLevel.Location = new System.Drawing.Point(190, 2);
   7.140 +			this.cmbDebugLevel.Name = "cmbDebugLevel";
   7.141 +			this.cmbDebugLevel.Size = new System.Drawing.Size(464, 21);
   7.142 +			this.cmbDebugLevel.TabIndex = 1;
   7.143 +			this.cmbDebugLevel.SelectedIndexChanged += new System.EventHandler(this.cmbDebugLevel_SelectedIndexChanged);
   7.144 +			// 
   7.145 +			// lblDebugLevel
   7.146 +			// 
   7.147 +			this.lblDebugLevel.Location = new System.Drawing.Point(16, 0);
   7.148 +			this.lblDebugLevel.Name = "lblDebugLevel";
   7.149 +			this.lblDebugLevel.Size = new System.Drawing.Size(168, 21);
   7.150 +			this.lblDebugLevel.TabIndex = 2;
   7.151 +			this.lblDebugLevel.Text = "debug level:";
   7.152 +			this.lblDebugLevel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
   7.153 +			// 
   7.154 +			// txtDetail
   7.155 +			// 
   7.156 +			this.txtDetail.Dock = System.Windows.Forms.DockStyle.Bottom;
   7.157 +			this.txtDetail.Location = new System.Drawing.Point(0, 172);
   7.158 +			this.txtDetail.Multiline = true;
   7.159 +			this.txtDetail.Name = "txtDetail";
   7.160 +			this.txtDetail.ReadOnly = true;
   7.161 +			this.txtDetail.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
   7.162 +			this.txtDetail.Size = new System.Drawing.Size(656, 64);
   7.163 +			this.txtDetail.TabIndex = 3;
   7.164 +			this.txtDetail.TabStop = false;
   7.165 +			this.txtDetail.Text = "";
   7.166 +			this.txtDetail.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtDetail_KeyDown);
   7.167 +			// 
   7.168 +			// splitter1
   7.169 +			// 
   7.170 +			this.splitter1.Cursor = System.Windows.Forms.Cursors.HSplit;
   7.171 +			this.splitter1.Dock = System.Windows.Forms.DockStyle.Bottom;
   7.172 +			this.splitter1.Location = new System.Drawing.Point(0, 168);
   7.173 +			this.splitter1.MinExtra = 50;
   7.174 +			this.splitter1.MinSize = 50;
   7.175 +			this.splitter1.Name = "splitter1";
   7.176 +			this.splitter1.Size = new System.Drawing.Size(656, 4);
   7.177 +			this.splitter1.TabIndex = 4;
   7.178 +			this.splitter1.TabStop = false;
   7.179 +			// 
   7.180 +			// panel1
   7.181 +			// 
   7.182 +			this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
   7.183 +			this.panel1.Location = new System.Drawing.Point(0, 0);
   7.184 +			this.panel1.Name = "panel1";
   7.185 +			this.panel1.Size = new System.Drawing.Size(656, 24);
   7.186 +			this.panel1.TabIndex = 5;
   7.187 +			// 
   7.188 +			// FrmDebugOutput
   7.189 +			// 
   7.190 +			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
   7.191 +			this.ClientSize = new System.Drawing.Size(656, 236);
   7.192 +			this.Controls.Add(this.lblDebugLevel);
   7.193 +			this.Controls.Add(this.cmbDebugLevel);
   7.194 +			this.Controls.Add(this.lstDebugItems);
   7.195 +			this.Controls.Add(this.splitter1);
   7.196 +			this.Controls.Add(this.panel1);
   7.197 +			this.Controls.Add(this.txtDetail);
   7.198 +			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
   7.199 +			this.Name = "FrmDebugOutput";
   7.200 +			this.ShowInTaskbar = false;
   7.201 +			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
   7.202 +			this.Text = "FrmDebugOutput";
   7.203 +			this.ResumeLayout(false);
   7.204 +
   7.205 +		}
   7.206 +		#endregion
   7.207 +
   7.208 +		private void cmbDebugLevel_SelectedIndexChanged(object sender, System.EventArgs e)
   7.209 +		{
   7.210 +			fillDebugList();
   7.211 +		}
   7.212 +
   7.213 +		private void fillDebugList()
   7.214 +		{
   7.215 +			lstDebugItems.Items.Clear();
   7.216 +			/*LogItem[] items = logger.GetLogItems((LogLevels)cmbDebugLevel.SelectedItem);
   7.217 +			int last = items.Length - 1;
   7.218 +			int stop = last - MAX_LIST_LENGTH;
   7.219 +
   7.220 +			if (stop < 0)
   7.221 +			{
   7.222 +				stop = 0;
   7.223 +			}
   7.224 +
   7.225 +			//reverse fill the list so that we can have newest items at the top
   7.226 +			for (int i = last; i >= stop; i--)
   7.227 +			{
   7.228 +				lstDebugItems.Items.Add(items[i]);
   7.229 +			}*/
   7.230 +		}
   7.231 +
   7.232 +		private void logger_LogUpdatedEvent(LogItem item)
   7.233 +		{
   7.234 +			/*if (item.Level >= (LogLevels)cmbDebugLevel.SelectedItem)
   7.235 +			{
   7.236 +				lock (lstDebugItems)
   7.237 +				{
   7.238 +					lstDebugItems.Items.Insert(0, item);
   7.239 +
   7.240 +					if (lstDebugItems.Items.Count > MAX_LIST_LENGTH)
   7.241 +					{
   7.242 +						lstDebugItems.Items.RemoveAt(lstDebugItems.Items.Count - 1);
   7.243 +					}
   7.244 +				}
   7.245 +			}*/
   7.246 +		}
   7.247 +
   7.248 +		private void miCopy_Click(object sender, System.EventArgs e)
   7.249 +		{
   7.250 +			if (lstDebugItems.SelectedIndices.Count==1)
   7.251 +			{				
   7.252 +				Clipboard.SetDataObject(lstDebugItems.SelectedItem.ToString());
   7.253 +			}
   7.254 +			else if (lstDebugItems.SelectedIndices.Count > 1)
   7.255 +			{
   7.256 +				StringBuilder sb = new StringBuilder();
   7.257 +
   7.258 +				foreach (int idx in lstDebugItems.SelectedIndices)
   7.259 +				{
   7.260 +					sb.Append(lstDebugItems.Items[idx].ToString()+Environment.NewLine);
   7.261 +				}
   7.262 +
   7.263 +				Clipboard.SetDataObject(sb.ToString().Trim());
   7.264 +			}
   7.265 +		}
   7.266 +
   7.267 +		private void contextMenu_Popup(object sender, System.EventArgs e)
   7.268 +		{
   7.269 +			foreach (MenuItem mi in contextMenu.MenuItems)
   7.270 +			{
   7.271 +				mi.Visible = lstDebugItems.SelectedIndex > -1;
   7.272 +			}
   7.273 +		}
   7.274 +
   7.275 +		private void lstDebugItems_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
   7.276 +		{
   7.277 +			if (e.Button == MouseButtons.Right)
   7.278 +			{
   7.279 +				int idx = lstDebugItems.IndexFromPoint(e.X, e.Y);
   7.280 +
   7.281 +				if (lstDebugItems.SelectedIndices.Contains(idx))
   7.282 +				{
   7.283 +					lstDebugItems.SelectedIndex = idx;
   7.284 +				}
   7.285 +			}
   7.286 +		}
   7.287 +
   7.288 +		private void lstDebugItems_SelectedIndexChanged(object sender, System.EventArgs e)
   7.289 +		{
   7.290 +			if (lstDebugItems.SelectedIndex > -1)
   7.291 +			{
   7.292 +				LogItem item = (LogItem)lstDebugItems.SelectedItem;
   7.293 +				txtDetail.Text = item.ToString() + Environment.NewLine + Environment.NewLine + "Stack Trace: "+ item.StackTrace;
   7.294 +			}
   7.295 +			else
   7.296 +			{
   7.297 +				txtDetail.Text = "";
   7.298 +			}
   7.299 +		}
   7.300 +
   7.301 +		private void txtDetail_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
   7.302 +		{
   7.303 +			if(e.KeyData == (Keys.Control|Keys.A) && e.Control)
   7.304 +			{
   7.305 +				txtDetail.SelectAll();
   7.306 +			}
   7.307 +		}
   7.308 +	}
   7.309 +}
     8.1 Binary file FrmDebugOutput.resources has changed
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/FrmDebugOutput.resx	Fri Dec 19 15:57:51 2008 +0000
     9.3 @@ -0,0 +1,208 @@
     9.4 +<?xml version="1.0" encoding="utf-8"?>
     9.5 +<root>
     9.6 +  <!-- 
     9.7 +    Microsoft ResX Schema 
     9.8 +    
     9.9 +    Version 1.3
    9.10 +    
    9.11 +    The primary goals of this format is to allow a simple XML format 
    9.12 +    that is mostly human readable. The generation and parsing of the 
    9.13 +    various data types are done through the TypeConverter classes 
    9.14 +    associated with the data types.
    9.15 +    
    9.16 +    Example:
    9.17 +    
    9.18 +    ... ado.net/XML headers & schema ...
    9.19 +    <resheader name="resmimetype">text/microsoft-resx</resheader>
    9.20 +    <resheader name="version">1.3</resheader>
    9.21 +    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    9.22 +    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    9.23 +    <data name="Name1">this is my long string</data>
    9.24 +    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    9.25 +    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
    9.26 +        [base64 mime encoded serialized .NET Framework object]
    9.27 +    </data>
    9.28 +    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    9.29 +        [base64 mime encoded string representing a byte array form of the .NET Framework object]
    9.30 +    </data>
    9.31 +                
    9.32 +    There are any number of "resheader" rows that contain simple 
    9.33 +    name/value pairs.
    9.34 +    
    9.35 +    Each data row contains a name, and value. The row also contains a 
    9.36 +    type or mimetype. Type corresponds to a .NET class that support 
    9.37 +    text/value conversion through the TypeConverter architecture. 
    9.38 +    Classes that don't support this are serialized and stored with the 
    9.39 +    mimetype set.
    9.40 +    
    9.41 +    The mimetype is used forserialized objects, and tells the 
    9.42 +    ResXResourceReader how to depersist the object. This is currently not 
    9.43 +    extensible. For a given mimetype the value must be set accordingly:
    9.44 +    
    9.45 +    Note - application/x-microsoft.net.object.binary.base64 is the format 
    9.46 +    that the ResXResourceWriter will generate, however the reader can 
    9.47 +    read any of the formats listed below.
    9.48 +    
    9.49 +    mimetype: application/x-microsoft.net.object.binary.base64
    9.50 +    value   : The object must be serialized with 
    9.51 +            : System.Serialization.Formatters.Binary.BinaryFormatter
    9.52 +            : and then encoded with base64 encoding.
    9.53 +    
    9.54 +    mimetype: application/x-microsoft.net.object.soap.base64
    9.55 +    value   : The object must be serialized with 
    9.56 +            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
    9.57 +            : and then encoded with base64 encoding.
    9.58 +
    9.59 +    mimetype: application/x-microsoft.net.object.bytearray.base64
    9.60 +    value   : The object must be serialized into a byte array 
    9.61 +            : using a System.ComponentModel.TypeConverter
    9.62 +            : and then encoded with base64 encoding.
    9.63 +    -->
    9.64 +  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    9.65 +    <xsd:element name="root" msdata:IsDataSet="true">
    9.66 +      <xsd:complexType>
    9.67 +        <xsd:choice maxOccurs="unbounded">
    9.68 +          <xsd:element name="data">
    9.69 +            <xsd:complexType>
    9.70 +              <xsd:sequence>
    9.71 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
    9.72 +                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
    9.73 +              </xsd:sequence>
    9.74 +              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
    9.75 +              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
    9.76 +              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
    9.77 +            </xsd:complexType>
    9.78 +          </xsd:element>
    9.79 +          <xsd:element name="resheader">
    9.80 +            <xsd:complexType>
    9.81 +              <xsd:sequence>
    9.82 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
    9.83 +              </xsd:sequence>
    9.84 +              <xsd:attribute name="name" type="xsd:string" use="required" />
    9.85 +            </xsd:complexType>
    9.86 +          </xsd:element>
    9.87 +        </xsd:choice>
    9.88 +      </xsd:complexType>
    9.89 +    </xsd:element>
    9.90 +  </xsd:schema>
    9.91 +  <resheader name="resmimetype">
    9.92 +    <value>text/microsoft-resx</value>
    9.93 +  </resheader>
    9.94 +  <resheader name="version">
    9.95 +    <value>1.3</value>
    9.96 +  </resheader>
    9.97 +  <resheader name="reader">
    9.98 +    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    9.99 +  </resheader>
   9.100 +  <resheader name="writer">
   9.101 +    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   9.102 +  </resheader>
   9.103 +  <data name="lstDebugItems.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.104 +    <value>Private</value>
   9.105 +  </data>
   9.106 +  <data name="lstDebugItems.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.107 +    <value>False</value>
   9.108 +  </data>
   9.109 +  <data name="lstDebugItems.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.110 +    <value>Private</value>
   9.111 +  </data>
   9.112 +  <data name="contextMenu.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.113 +    <value>Private</value>
   9.114 +  </data>
   9.115 +  <data name="contextMenu.Location" type="System.Drawing.Point, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
   9.116 +    <value>17, 17</value>
   9.117 +  </data>
   9.118 +  <data name="contextMenu.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.119 +    <value>Private</value>
   9.120 +  </data>
   9.121 +  <data name="miCopy.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.122 +    <value>Private</value>
   9.123 +  </data>
   9.124 +  <data name="miCopy.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.125 +    <value>Private</value>
   9.126 +  </data>
   9.127 +  <data name="cmbDebugLevel.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.128 +    <value>Private</value>
   9.129 +  </data>
   9.130 +  <data name="cmbDebugLevel.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.131 +    <value>False</value>
   9.132 +  </data>
   9.133 +  <data name="cmbDebugLevel.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.134 +    <value>Private</value>
   9.135 +  </data>
   9.136 +  <data name="lblDebugLevel.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.137 +    <value>False</value>
   9.138 +  </data>
   9.139 +  <data name="lblDebugLevel.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.140 +    <value>Private</value>
   9.141 +  </data>
   9.142 +  <data name="lblDebugLevel.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.143 +    <value>Private</value>
   9.144 +  </data>
   9.145 +  <data name="txtDetail.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.146 +    <value>Private</value>
   9.147 +  </data>
   9.148 +  <data name="txtDetail.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.149 +    <value>Private</value>
   9.150 +  </data>
   9.151 +  <data name="txtDetail.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.152 +    <value>False</value>
   9.153 +  </data>
   9.154 +  <data name="splitter1.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.155 +    <value>False</value>
   9.156 +  </data>
   9.157 +  <data name="splitter1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.158 +    <value>Private</value>
   9.159 +  </data>
   9.160 +  <data name="splitter1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.161 +    <value>Private</value>
   9.162 +  </data>
   9.163 +  <data name="panel1.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.164 +    <value>False</value>
   9.165 +  </data>
   9.166 +  <data name="panel1.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.167 +    <value>True</value>
   9.168 +  </data>
   9.169 +  <data name="panel1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.170 +    <value>Private</value>
   9.171 +  </data>
   9.172 +  <data name="panel1.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
   9.173 +    <value>8, 8</value>
   9.174 +  </data>
   9.175 +  <data name="panel1.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.176 +    <value>True</value>
   9.177 +  </data>
   9.178 +  <data name="panel1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.179 +    <value>Private</value>
   9.180 +  </data>
   9.181 +  <data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.182 +    <value>False</value>
   9.183 +  </data>
   9.184 +  <data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.185 +    <value>False</value>
   9.186 +  </data>
   9.187 +  <data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.188 +    <value>False</value>
   9.189 +  </data>
   9.190 +  <data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
   9.191 +    <value>8, 8</value>
   9.192 +  </data>
   9.193 +  <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.194 +    <value>(Default)</value>
   9.195 +  </data>
   9.196 +  <data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.197 +    <value>True</value>
   9.198 +  </data>
   9.199 +  <data name="$this.Name">
   9.200 +    <value>FrmDebugOutput</value>
   9.201 +  </data>
   9.202 +  <data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.203 +    <value>80</value>
   9.204 +  </data>
   9.205 +  <data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.206 +    <value>True</value>
   9.207 +  </data>
   9.208 +  <data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
   9.209 +    <value>Private</value>
   9.210 +  </data>
   9.211 +</root>
   9.212 \ No newline at end of file
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/FrmEditUnitEquipment.cs	Fri Dec 19 15:57:51 2008 +0000
    10.3 @@ -0,0 +1,249 @@
    10.4 +using System;
    10.5 +using System.Drawing;
    10.6 +using System.Collections;
    10.7 +using System.ComponentModel;
    10.8 +using System.Windows.Forms;
    10.9 +using IBBoard.Commands;
   10.10 +using IBBoard.WarFoundry.API;
   10.11 +using IBBoard.WarFoundry.API.Commands;
   10.12 +
   10.13 +namespace IBBoard.WarFoundry
   10.14 +{
   10.15 +	/// <summary>
   10.16 +	/// Summary description for FrmEditUnitEquipment.
   10.17 +	/// </summary>
   10.18 +	public class FrmEditUnitEquipment : System.Windows.Forms.Form
   10.19 +	{
   10.20 +		private Unit unit;
   10.21 +		private UnitEquipmentItem equipItem;
   10.22 +		private EquipmentItem equip;
   10.23 +		private float equipAmount;
   10.24 +		private CommandStack commandStack;
   10.25 +
   10.26 +		private System.Windows.Forms.NumericUpDown numEquipAmount;
   10.27 +		private System.Windows.Forms.Label lblPercent;
   10.28 +		private System.Windows.Forms.Label lblAmount;
   10.29 +		private System.Windows.Forms.Button bttnCancel;
   10.30 +		private System.Windows.Forms.Button bttnOkay;
   10.31 +		private System.Windows.Forms.CheckBox cbEquipAll;
   10.32 +		/// <summary>
   10.33 +		/// Required designer variable.
   10.34 +		/// </summary>
   10.35 +		private System.ComponentModel.Container components = null;
   10.36 +
   10.37 +		public FrmEditUnitEquipment(Unit unit, UnitEquipmentItem equipItem, CommandStack stack)
   10.38 +		{
   10.39 +			commandStack = stack;
   10.40 +			this.unit = unit;
   10.41 +			this.equipItem = equipItem;
   10.42 +			equip = equipItem.EquipmentItem;
   10.43 +			InitializeComponent();
   10.44 +			this.Text = equip.Name + " for " + unit.Name;
   10.45 +			equipAmount = unit.GetEquipmentAmount(equip.ID);
   10.46 +
   10.47 +			if (equip.IsRatioLimit)
   10.48 +			{
   10.49 +				numEquipAmount.Minimum = (decimal)Math.Round(equip.MinNumber * 100, 2);
   10.50 +				numEquipAmount.Maximum = (decimal)Math.Round(equip.MaxNumber * 100, 2);
   10.51 +				numEquipAmount.Value = (decimal)Math.Round(equipAmount * 100, 2);
   10.52 +				cbEquipAll.Enabled = false;
   10.53 +				lblPercent.Visible = true;
   10.54 +				numEquipAmount.Width = 120;
   10.55 +			}
   10.56 +			else
   10.57 +			{
   10.58 +				numEquipAmount.Minimum = (decimal)(equip.MinNumber != -1 ? equip.MinNumber : unit.Size);
   10.59 +				numEquipAmount.Maximum = (decimal)(equip.MaxNumber != -1 ? equip.MaxNumber : unit.Size);
   10.60 +				numEquipAmount.Value = (decimal)(equipAmount == -1 ? unit.Size : equipAmount);
   10.61 +				cbEquipAll.Checked = (equipAmount == -1);
   10.62 +				cbEquipAll.Enabled = (equip.MaxNumber == -1 && equip.MinNumber != -1);
   10.63 +				numEquipAmount.Enabled = !cbEquipAll.Checked && equip.MinNumber != -1;
   10.64 +				numEquipAmount.Width = 144;
   10.65 +			}
   10.66 +
   10.67 +			bttnOkay.Enabled = false;
   10.68 +		}
   10.69 +
   10.70 +		/// <summary>
   10.71 +		/// Clean up any resources being used.
   10.72 +		/// </summary>
   10.73 +		protected override void Dispose( bool disposing )
   10.74 +		{
   10.75 +			if( disposing )
   10.76 +			{
   10.77 +				if(components != null)
   10.78 +				{
   10.79 +					components.Dispose();
   10.80 +				}
   10.81 +			}
   10.82 +			base.Dispose( disposing );
   10.83 +		}
   10.84 +
   10.85 +		#region Windows Form Designer generated code
   10.86 +		/// <summary>
   10.87 +		/// Required method for Designer support - do not modify
   10.88 +		/// the contents of this method with the code editor.
   10.89 +		/// </summary>
   10.90 +		private void InitializeComponent()
   10.91 +		{
   10.92 +			this.numEquipAmount = new System.Windows.Forms.NumericUpDown();
   10.93 +			this.lblPercent = new System.Windows.Forms.Label();
   10.94 +			this.lblAmount = new System.Windows.Forms.Label();
   10.95 +			this.bttnCancel = new System.Windows.Forms.Button();
   10.96 +			this.bttnOkay = new System.Windows.Forms.Button();
   10.97 +			this.cbEquipAll = new System.Windows.Forms.CheckBox();
   10.98 +			((System.ComponentModel.ISupportInitialize)(this.numEquipAmount)).BeginInit();
   10.99 +			this.SuspendLayout();
  10.100 +			// 
  10.101 +			// numEquipAmount
  10.102 +			// 
  10.103 +			this.numEquipAmount.Location = new System.Drawing.Point(88, 8);
  10.104 +			this.numEquipAmount.Name = "numEquipAmount";
  10.105 +			this.numEquipAmount.Size = new System.Drawing.Size(144, 20);
  10.106 +			this.numEquipAmount.TabIndex = 0;
  10.107 +			this.numEquipAmount.ValueChanged += new System.EventHandler(this.numEquipAmount_ValueChanged);
  10.108 +			// 
  10.109 +			// lblPercent
  10.110 +			// 
  10.111 +			this.lblPercent.Location = new System.Drawing.Point(208, 8);
  10.112 +			this.lblPercent.Name = "lblPercent";
  10.113 +			this.lblPercent.Size = new System.Drawing.Size(16, 16);
  10.114 +			this.lblPercent.TabIndex = 1;
  10.115 +			this.lblPercent.Text = "%";
  10.116 +			this.lblPercent.Visible = false;
  10.117 +			// 
  10.118 +			// lblAmount
  10.119 +			// 
  10.120 +			this.lblAmount.Location = new System.Drawing.Point(8, 8);
  10.121 +			this.lblAmount.Name = "lblAmount";
  10.122 +			this.lblAmount.Size = new System.Drawing.Size(72, 23);
  10.123 +			this.lblAmount.TabIndex = 2;
  10.124 +			this.lblAmount.Text = "amount";
  10.125 +			this.lblAmount.TextAlign = System.Drawing.ContentAlignment.TopRight;
  10.126 +			// 
  10.127 +			// bttnCancel
  10.128 +			// 
  10.129 +			this.bttnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
  10.130 +			this.bttnCancel.FlatStyle = System.Windows.Forms.FlatStyle.System;
  10.131 +			this.bttnCancel.Location = new System.Drawing.Point(160, 64);
  10.132 +			this.bttnCancel.Name = "bttnCancel";
  10.133 +			this.bttnCancel.TabIndex = 3;
  10.134 +			this.bttnCancel.Text = "cancel";
  10.135 +			this.bttnCancel.Click += new System.EventHandler(this.bttnCancel_Click);
  10.136 +			// 
  10.137 +			// bttnOkay
  10.138 +			// 
  10.139 +			this.bttnOkay.Enabled = false;
  10.140 +			this.bttnOkay.FlatStyle = System.Windows.Forms.FlatStyle.System;
  10.141 +			this.bttnOkay.Location = new System.Drawing.Point(8, 64);
  10.142 +			this.bttnOkay.Name = "bttnOkay";
  10.143 +			this.bttnOkay.TabIndex = 4;
  10.144 +			this.bttnOkay.Text = "okay";
  10.145 +			this.bttnOkay.Click += new System.EventHandler(this.bttnOkay_Click);
  10.146 +			// 
  10.147 +			// cbEquipAll
  10.148 +			// 
  10.149 +			this.cbEquipAll.Enabled = false;
  10.150 +			this.cbEquipAll.FlatStyle = System.Windows.Forms.FlatStyle.System;
  10.151 +			this.cbEquipAll.Location = new System.Drawing.Point(88, 32);
  10.152 +			this.cbEquipAll.Name = "cbEquipAll";
  10.153 +			this.cbEquipAll.TabIndex = 5;
  10.154 +			this.cbEquipAll.Text = "equip all";
  10.155 +			this.cbEquipAll.CheckedChanged += new System.EventHandler(this.cbEquipAll_CheckedChanged);
  10.156 +			// 
  10.157 +			// FrmEditUnitEquipment
  10.158 +			// 
  10.159 +			this.AcceptButton = this.bttnOkay;
  10.160 +			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
  10.161 +			this.CancelButton = this.bttnCancel;
  10.162 +			this.ClientSize = new System.Drawing.Size(240, 92);
  10.163 +			this.ControlBox = false;
  10.164 +			this.Controls.Add(this.cbEquipAll);
  10.165 +			this.Controls.Add(this.bttnOkay);
  10.166 +			this.Controls.Add(this.bttnCancel);
  10.167 +			this.Controls.Add(this.lblAmount);
  10.168 +			this.Controls.Add(this.numEquipAmount);
  10.169 +			this.Controls.Add(this.lblPercent);
  10.170 +			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
  10.171 +			this.Name = "FrmEditUnitEquipment";
  10.172 +			this.ShowInTaskbar = false;
  10.173 +			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
  10.174 +			this.Text = "FrmEditUnitEquipment";
  10.175 +			((System.ComponentModel.ISupportInitialize)(this.numEquipAmount)).EndInit();
  10.176 +			this.ResumeLayout(false);
  10.177 +
  10.178 +		}
  10.179 +		#endregion
  10.180 +
  10.181 +		private void bttnOkay_Click(object sender, System.EventArgs e)
  10.182 +		{
  10.183 +			if (setValue())
  10.184 +			{
  10.185 +				this.Close();
  10.186 +			}
  10.187 +		}
  10.188 +
  10.189 +		private bool setValue()
  10.190 +		{			
  10.191 +			if ((!numEquipAmount.Enabled || numEquipAmount.Value == 0) && !cbEquipAll.Checked && unit.GetEquipmentAmount(equip.ID) != 0)
  10.192 +			{
  10.193 +				if (equipItem.IsRequired)
  10.194 +				{
  10.195 +					MessageBox.Show(this, "This item is required and cannot be removed. It must have a quantity of at least one or be replaced by an alternative.", "Required item", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  10.196 +					return false;
  10.197 +				}
  10.198 +				else
  10.199 +				{
  10.200 +					DialogResult dr = MessageBox.Show(this, "This will remove the item from the unit. Continue?", "Confirm remove", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
  10.201 +
  10.202 +					if (dr!=DialogResult.Yes)
  10.203 +					{
  10.204 +						return false;
  10.205 +					}
  10.206 +				}
  10.207 +			}
  10.208 +
  10.209 +			if (cbEquipAll.Checked)
  10.210 +			{
  10.211 +				if (equipAmount!=-1)
  10.212 +				{
  10.213 +					commandStack.Execute(new SetUnitEquipmentAmountCommand(unit, equip, -1));
  10.214 +				}
  10.215 +			}
  10.216 +			else if (numEquipAmount.Value != (decimal)equipAmount)
  10.217 +			{
  10.218 +				if (equip.IsRatioLimit)
  10.219 +				{
  10.220 +					commandStack.Execute(new SetUnitEquipmentAmountCommand(unit, equip, (float)((double)numEquipAmount.Value / 100.0)));
  10.221 +				}
  10.222 +				else
  10.223 +				{
  10.224 +					commandStack.Execute(new SetUnitEquipmentAmountCommand(unit, equip, (float)numEquipAmount.Value));
  10.225 +				}
  10.226 +			}
  10.227 +
  10.228 +			return true;
  10.229 +		}
  10.230 +
  10.231 +		private void bttnCancel_Click(object sender, System.EventArgs e)
  10.232 +		{
  10.233 +			this.Close();
  10.234 +		}
  10.235 +
  10.236 +		private void cbEquipAll_CheckedChanged(object sender, System.EventArgs e)
  10.237 +		{
  10.238 +			numEquipAmount.Enabled = !cbEquipAll.Checked && equip.MinNumber != -1;
  10.239 +			setOkayButton();
  10.240 +		}
  10.241 +
  10.242 +		private void setOkayButton()
  10.243 +		{
  10.244 +			bttnOkay.Enabled = (cbEquipAll.Checked || (numEquipAmount.Enabled && (numEquipAmount.Value > 0 || !equipItem.IsRequired)));
  10.245 +		}
  10.246 +
  10.247 +		private void numEquipAmount_ValueChanged(object sender, System.EventArgs e)
  10.248 +		{
  10.249 +			setOkayButton();
  10.250 +		}
  10.251 +	}
  10.252 +}
    11.1 Binary file FrmEditUnitEquipment.resources has changed
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/FrmEditUnitEquipment.resx	Fri Dec 19 15:57:51 2008 +0000
    12.3 @@ -0,0 +1,184 @@
    12.4 +<?xml version="1.0" encoding="utf-8"?>
    12.5 +<root>
    12.6 +  <!-- 
    12.7 +    Microsoft ResX Schema 
    12.8 +    
    12.9 +    Version 1.3
   12.10 +    
   12.11 +    The primary goals of this format is to allow a simple XML format 
   12.12 +    that is mostly human readable. The generation and parsing of the 
   12.13 +    various data types are done through the TypeConverter classes 
   12.14 +    associated with the data types.
   12.15 +    
   12.16 +    Example:
   12.17 +    
   12.18 +    ... ado.net/XML headers & schema ...
   12.19 +    <resheader name="resmimetype">text/microsoft-resx</resheader>
   12.20 +    <resheader name="version">1.3</resheader>
   12.21 +    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
   12.22 +    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
   12.23 +    <data name="Name1">this is my long string</data>
   12.24 +    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
   12.25 +    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
   12.26 +        [base64 mime encoded serialized .NET Framework object]
   12.27 +    </data>
   12.28 +    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
   12.29 +        [base64 mime encoded string representing a byte array form of the .NET Framework object]
   12.30 +    </data>
   12.31 +                
   12.32 +    There are any number of "resheader" rows that contain simple 
   12.33 +    name/value pairs.
   12.34 +    
   12.35 +    Each data row contains a name, and value. The row also contains a 
   12.36 +    type or mimetype. Type corresponds to a .NET class that support 
   12.37 +    text/value conversion through the TypeConverter architecture. 
   12.38 +    Classes that don't support this are serialized and stored with the 
   12.39 +    mimetype set.
   12.40 +    
   12.41 +    The mimetype is used forserialized objects, and tells the 
   12.42 +    ResXResourceReader how to depersist the object. This is currently not 
   12.43 +    extensible. For a given mimetype the value must be set accordingly:
   12.44 +    
   12.45 +    Note - application/x-microsoft.net.object.binary.base64 is the format 
   12.46 +    that the ResXResourceWriter will generate, however the reader can 
   12.47 +    read any of the formats listed below.
   12.48 +    
   12.49 +    mimetype: application/x-microsoft.net.object.binary.base64
   12.50 +    value   : The object must be serialized with 
   12.51 +            : System.Serialization.Formatters.Binary.BinaryFormatter
   12.52 +            : and then encoded with base64 encoding.
   12.53 +    
   12.54 +    mimetype: application/x-microsoft.net.object.soap.base64
   12.55 +    value   : The object must be serialized with 
   12.56 +            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
   12.57 +            : and then encoded with base64 encoding.
   12.58 +
   12.59 +    mimetype: application/x-microsoft.net.object.bytearray.base64
   12.60 +    value   : The object must be serialized into a byte array 
   12.61 +            : using a System.ComponentModel.TypeConverter
   12.62 +            : and then encoded with base64 encoding.
   12.63 +    -->
   12.64 +  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
   12.65 +    <xsd:element name="root" msdata:IsDataSet="true">
   12.66 +      <xsd:complexType>
   12.67 +        <xsd:choice maxOccurs="unbounded">
   12.68 +          <xsd:element name="data">
   12.69 +            <xsd:complexType>
   12.70 +              <xsd:sequence>
   12.71 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
   12.72 +                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
   12.73 +              </xsd:sequence>
   12.74 +              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
   12.75 +              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
   12.76 +              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
   12.77 +            </xsd:complexType>
   12.78 +          </xsd:element>
   12.79 +          <xsd:element name="resheader">
   12.80 +            <xsd:complexType>
   12.81 +              <xsd:sequence>
   12.82 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
   12.83 +              </xsd:sequence>
   12.84 +              <xsd:attribute name="name" type="xsd:string" use="required" />
   12.85 +            </xsd:complexType>
   12.86 +          </xsd:element>
   12.87 +        </xsd:choice>
   12.88 +      </xsd:complexType>
   12.89 +    </xsd:element>
   12.90 +  </xsd:schema>
   12.91 +  <resheader name="resmimetype">
   12.92 +    <value>text/microsoft-resx</value>
   12.93 +  </resheader>
   12.94 +  <resheader name="version">
   12.95 +    <value>1.3</value>
   12.96 +  </resheader>
   12.97 +  <resheader name="reader">
   12.98 +    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   12.99 +  </resheader>
  12.100 +  <resheader name="writer">
  12.101 +    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  12.102 +  </resheader>
  12.103 +  <data name="numEquipAmount.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.104 +    <value>False</value>
  12.105 +  </data>
  12.106 +  <data name="numEquipAmount.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.107 +    <value>Private</value>
  12.108 +  </data>
  12.109 +  <data name="numEquipAmount.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.110 +    <value>Private</value>
  12.111 +  </data>
  12.112 +  <data name="lblPercent.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.113 +    <value>False</value>
  12.114 +  </data>
  12.115 +  <data name="lblPercent.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.116 +    <value>Private</value>
  12.117 +  </data>
  12.118 +  <data name="lblPercent.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.119 +    <value>Private</value>
  12.120 +  </data>
  12.121 +  <data name="lblAmount.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.122 +    <value>False</value>
  12.123 +  </data>
  12.124 +  <data name="lblAmount.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.125 +    <value>Private</value>
  12.126 +  </data>
  12.127 +  <data name="lblAmount.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.128 +    <value>Private</value>
  12.129 +  </data>
  12.130 +  <data name="bttnCancel.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.131 +    <value>False</value>
  12.132 +  </data>
  12.133 +  <data name="bttnCancel.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.134 +    <value>Private</value>
  12.135 +  </data>
  12.136 +  <data name="bttnCancel.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.137 +    <value>Private</value>
  12.138 +  </data>
  12.139 +  <data name="bttnOkay.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.140 +    <value>False</value>
  12.141 +  </data>
  12.142 +  <data name="bttnOkay.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.143 +    <value>Private</value>
  12.144 +  </data>
  12.145 +  <data name="bttnOkay.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.146 +    <value>Private</value>
  12.147 +  </data>
  12.148 +  <data name="cbEquipAll.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.149 +    <value>False</value>
  12.150 +  </data>
  12.151 +  <data name="cbEquipAll.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.152 +    <value>Private</value>
  12.153 +  </data>
  12.154 +  <data name="cbEquipAll.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.155 +    <value>Private</value>
  12.156 +  </data>
  12.157 +  <data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.158 +    <value>False</value>
  12.159 +  </data>
  12.160 +  <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.161 +    <value>(Default)</value>
  12.162 +  </data>
  12.163 +  <data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.164 +    <value>False</value>
  12.165 +  </data>
  12.166 +  <data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.167 +    <value>False</value>
  12.168 +  </data>
  12.169 +  <data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  12.170 +    <value>8, 8</value>
  12.171 +  </data>
  12.172 +  <data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.173 +    <value>True</value>
  12.174 +  </data>
  12.175 +  <data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.176 +    <value>80</value>
  12.177 +  </data>
  12.178 +  <data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.179 +    <value>True</value>
  12.180 +  </data>
  12.181 +  <data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  12.182 +    <value>Private</value>
  12.183 +  </data>
  12.184 +  <data name="$this.Name">
  12.185 +    <value>FrmEditUnitEquipment</value>
  12.186 +  </data>
  12.187 +</root>
  12.188 \ No newline at end of file
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/FrmMain.cs	Fri Dec 19 15:57:51 2008 +0000
    13.3 @@ -0,0 +1,1265 @@
    13.4 +using System;
    13.5 +using System.Drawing;
    13.6 +using System.Drawing.Drawing2D;
    13.7 +using System.Collections;
    13.8 +using System.ComponentModel;
    13.9 +using System.Windows.Forms;
   13.10 +using System.Data;
   13.11 +using System.IO;
   13.12 +using System.Threading;
   13.13 +using IBBoard;
   13.14 +using IBBoard.CustomMath;
   13.15 +using IBBoard.Commands;
   13.16 +using IBBoard.IO;
   13.17 +using IBBoard.Lang;
   13.18 +using IBBoard.WarFoundry.API;
   13.19 +using IBBoard.WarFoundry.API.Commands;
   13.20 +using IBBoard.Windows.Forms;
   13.21 +using IBBoard.Xml;
   13.22 +using log4net;
   13.23 +
   13.24 +namespace IBBoard.WarFoundry
   13.25 +{
   13.26 +	/// <summary>
   13.27 +	/// Summary description for Form1.
   13.28 +	/// </summary>
   13.29 +	public class FrmMain : System.Windows.Forms.Form
   13.30 +	{
   13.31 +		private static readonly string AppTitle = "WarFoundry";
   13.32 +
   13.33 +        private Preferences preferences;
   13.34 +        protected readonly ILog logger = LogManager.GetLogger(typeof(WarFoundryFactory));
   13.35 +
   13.36 +		private CommandStack commandStack;
   13.37 +		private ToolBarButton[] categoryButtons;
   13.38 +        private Type factoryType = typeof(WarFoundryXmlFactory);
   13.39 +
   13.40 +		public ObjectAddDelegate UnitAddedMethod;
   13.41 +		public ObjectRemoveDelegate UnitRemovedMethod;
   13.42 +		public DoubleValChangedDelegate PointsValueChangedMethod;
   13.43 +		//public FailedUnitRequirementDelegate FailedUnitRequirementMethod;
   13.44 +
   13.45 +		private FrmArmyTree armyTree;
   13.46 +		private FrmDebugOutput debugWindow;
   13.47 +
   13.48 +		private IBBoard.Windows.Forms.ColorableStatusBar statusBar;
   13.49 +		private System.Windows.Forms.ToolBar toolBar;
   13.50 +		private System.Windows.Forms.MainMenu mainMenu;
   13.51 +		private IBBoard.Windows.Forms.IBBMenuItem menuFile;
   13.52 +		private IBBoard.Windows.Forms.IBBMenuItem menuHelp;
   13.53 +		private IBBoard.Windows.Forms.IBBToolBarButton bttnNewArmy;
   13.54 +		private System.Windows.Forms.ImageList buttonIcons;
   13.55 +		private IBBoard.Windows.Forms.IBBToolBarButton bttnSaveArmy;
   13.56 +		private System.Windows.Forms.OpenFileDialog openArmyDialog;
   13.57 +		private System.Windows.Forms.SaveFileDialog saveArmyDialog;
   13.58 +		private IBBoard.Windows.Forms.IBBMenuItem miExit;
   13.59 +		private IBBoard.Windows.Forms.IBBToolBarButton bttnOpenArmy;
   13.60 +		private IBBoard.Windows.Forms.IBBMenuItem miAbout;
   13.61 +		private System.ComponentModel.IContainer components;
   13.62 +		private IBBoard.Windows.Forms.IBBMenuItem miNewArmy;
   13.63 +		private IBBoard.Windows.Forms.IBBMenuItem miOpenArmy;
   13.64 +		private IBBoard.Windows.Forms.IBBMenuItem miCloseArmy;
   13.65 +		private IBBoard.Windows.Forms.IBBMenuItem miSaveArmy;
   13.66 +		private IBBoard.Windows.Forms.IBBMenuItem miSaveArmyAs;
   13.67 +		private IBBoard.Windows.Forms.IBBMenuItem miChangeSystem;
   13.68 +		private IBBoard.Windows.Forms.IBBToolBarButton bttnSep1;
   13.69 +		private IBBoard.Windows.Forms.IBBToolBarButton bttnUndo;
   13.70 +		private IBBoard.Windows.Forms.IBBToolBarButton bttnRedo;
   13.71 +		private IBBoard.Windows.Forms.IBBMenuItem menuEdit;
   13.72 +		private IBBoard.Windows.Forms.IBBMenuItem miUndo;
   13.73 +		private IBBoard.Windows.Forms.IBBMenuItem miRedo;
   13.74 +		private IBBoard.Windows.Forms.IBBMenuItem miDebugWindow;
   13.75 +		private System.Windows.Forms.MenuItem miSep1;
   13.76 +		private System.Windows.Forms.MenuItem miSep2;
   13.77 +		private System.Windows.Forms.MenuItem miSep3;
   13.78 +		private IBBoard.Windows.Forms.ColorableStatusBarPanel sbMainPanel;
   13.79 +		private IBBoard.Windows.Forms.ColorableStatusBarPanel sbErrorPanel;
   13.80 +		private IBBoard.Windows.Forms.ColorableStatusBarPanel sbPointsPanel;
   13.81 +		private System.Windows.Forms.ContextMenu undoMenu;
   13.82 +		private System.Windows.Forms.ContextMenu redoMenu;
   13.83 +		private IBBoard.Windows.Forms.IBBMenuItem miReloadFiles;
   13.84 +		private System.Windows.Forms.Timer statusBarTimer;
   13.85 +		private System.Windows.Forms.Panel pnlRight;
   13.86 +
   13.87 +		public FrmMain(string[] args)
   13.88 +		{
   13.89 +			this.Closing+=new CancelEventHandler(FrmMain_Closing);
   13.90 +			CommandStack.CommandStackUpdated+=new MethodInvoker(commandStack_CommandStackUpdated);
   13.91 +
   13.92 +			InitializeComponent();
   13.93 +
   13.94 +            Preferences = new Preferences("WarFoundry");
   13.95 +            Translation.InitialiseTranslations(Constants.ExecutablePath, Preferences["language"].ToString());
   13.96 +
   13.97 +			//pnlRight.Left = ClientSize.Width - pnlRight.Width - 2;
   13.98 +			//pnlRight.Top = toolBar.Height + 5;
   13.99 +			//pnlRight.Height = ClientRectangle.Bottom - statusBar.Height - pnlRight.Top - 3;
  13.100 +
  13.101 +			foreach (Control ctrl in Controls)
  13.102 +			{
  13.103 +				Translation.TranslateControl(ctrl);
  13.104 +			}
  13.105 +
  13.106 +			foreach(Component comp in components.Components)
  13.107 +			{
  13.108 +				Translation.TranslateComponent(comp);
  13.109 +			}
  13.110 +
  13.111 +			foreach (IBBMenuItem mi in Menu.MenuItems)
  13.112 +			{
  13.113 +				Translation.TranslateComponent(mi);
  13.114 +			}
  13.115 +
  13.116 +			Translation.TranslateComponent(openArmyDialog);
  13.117 +			Translation.TranslateComponent(saveArmyDialog);
  13.118 +
  13.119 +			WarFoundryCore.GameSystemChanged+= new GameSystemChangedDelegate(FrmMain_GameSystemChanged);
  13.120 +            WarFoundryCore.ArmyChanged += new ArmyChangedDelegate(FrmMain_ArmyChanged);
  13.121 +			UnitAddedMethod = new ObjectAddDelegate(FrmMain_UnitAddedMethod);
  13.122 +			UnitRemovedMethod = new ObjectRemoveDelegate(FrmMain_UnitRemovedMethod);
  13.123 +			PointsValueChangedMethod = new DoubleValChangedDelegate(FrmMain_PointsValueChangedMethod);
  13.124 +			//FailedUnitRequirementMethod = new FailedUnitRequirementDelegate(FrmMain_FailedUnitRequirement);
  13.125 +
  13.126 +			sbErrorPanel.Color = Color.Red;
  13.127 +
  13.128 +			armyTree = new FrmArmyTree(CommandStack);
  13.129 +			armyTree.MdiParent = this;
  13.130 +			armyTree.Show();
  13.131 +			armyTree.StartPosition = FormStartPosition.Manual;
  13.132 +			armyTree.Location = new Point(this.DisplayRectangle.Width - armyTree.Width - 10, 10);
  13.133 +			Translation.TranslateControl(armyTree);
  13.134 +
  13.135 +            if (args.Length == 1)
  13.136 +			{
  13.137 +				logger.Debug("Attempting to load from file");				
  13.138 +				FileInfo file = new FileInfo(args[0]);
  13.139 +				
  13.140 +				try
  13.141 +				{
  13.142 +					if (file.Extension.Equals("."+Factory.GetArmyFileExtension()))
  13.143 +					{
  13.144 +						WarFoundryCore.CurrentArmy = Factory.CreateArmyFromFile(file);
  13.145 +						logger.InfoFormat("Loaded army from {0}", file.FullName);
  13.146 +					}
  13.147 +					else if (file.Extension.Equals("."+Factory.GetSystemFileExtension()))
  13.148 +					{
  13.149 +						WarFoundryCore.CurrentGameSystem = Factory.CreateGameSystemFromFile(file);
  13.150 +						logger.InfoFormat("Loaded game system from {0}", file.FullName);
  13.151 +					}
  13.152 +				}
  13.153 +				catch (InvalidFileException ex)
  13.154 +				{
  13.155 +					MessageBox.Show(Translation.GetTranslation("InvalidFileLoadError", "The file loaded ({0}) was not a valid WarFoundry file", file.FullName), Translation.GetTranslation("InvalidFileLoadTitle", "Invalid data file", null), MessageBoxButtons.OK, MessageBoxIcon.Error);
  13.156 +					logger.Error(ex);
  13.157 +				}
  13.158 +			}
  13.159 +			else
  13.160 +			{
  13.161 +				string gameSystemID = Preferences.GetStringProperty("currSystem");
  13.162 +
  13.163 +				if (gameSystemID!=null && !"".Equals(gameSystemID))
  13.164 +				{
  13.165 +					logger.Debug("Attempting to load current game system from properties");
  13.166 +					GameSystem sys = Factory.GetGameSystem(gameSystemID);
  13.167 +					
  13.168 +					if (sys!=null)
  13.169 +					{
  13.170 +						WarFoundryCore.CurrentGameSystem = sys;
  13.171 +						logger.InfoFormat("Loaded game system {0} from properties", gameSystemID);
  13.172 +					}
  13.173 +				}
  13.174 +			}
  13.175 +		}
  13.176 +
  13.177 +		public static string DataPath
  13.178 +		{
  13.179 +			get { return Constants.ExecutablePath+Constants.DirectoryChar+"data"; }
  13.180 +		}
  13.181 +
  13.182 +		public static String ArmiesPath
  13.183 +		{
  13.184 +			get { return Constants.UserDataPath+Constants.DirectoryChar+"armies"; }
  13.185 +        }
  13.186 +
  13.187 +        public Preferences Preferences
  13.188 +        {
  13.189 +            get { return preferences; }
  13.190 +            set { preferences = value; }
  13.191 +        }
  13.192 +
  13.193 +		public CommandStack CommandStack
  13.194 +		{
  13.195 +			get 
  13.196 +			{
  13.197 +				if (commandStack == null)
  13.198 +				{					
  13.199 +					commandStack = new CommandStack();
  13.200 +				}
  13.201 +
  13.202 +				return commandStack; 
  13.203 +			}
  13.204 +		}
  13.205 +
  13.206 +		/// <summary>
  13.207 +		/// Clean up any resources being used.
  13.208 +		/// </summary>
  13.209 +		protected override void Dispose( bool disposing )
  13.210 +		{
  13.211 +			if( disposing )
  13.212 +			{
  13.213 +				if (components != null) 
  13.214 +				{
  13.215 +					components.Dispose();
  13.216 +				}
  13.217 +			}
  13.218 +			base.Dispose( disposing );
  13.219 +		}
  13.220 +
  13.221 +		#region Windows Form Designer generated code
  13.222 +		/// <summary>
  13.223 +		/// Required method for Designer support - do not modify
  13.224 +		/// the contents of this method with the code editor.
  13.225 +		/// </summary>
  13.226 +		private void InitializeComponent()
  13.227 +		{
  13.228 +            this.components = new System.ComponentModel.Container();
  13.229 +            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmMain));
  13.230 +            this.statusBar = new IBBoard.Windows.Forms.ColorableStatusBar();
  13.231 +            this.sbMainPanel = new IBBoard.Windows.Forms.ColorableStatusBarPanel();
  13.232 +            this.sbErrorPanel = new IBBoard.Windows.Forms.ColorableStatusBarPanel();
  13.233 +            this.sbPointsPanel = new IBBoard.Windows.Forms.ColorableStatusBarPanel();
  13.234 +            this.toolBar = new System.Windows.Forms.ToolBar();
  13.235 +            this.bttnNewArmy = new IBBoard.Windows.Forms.IBBToolBarButton();
  13.236 +            this.bttnOpenArmy = new IBBoard.Windows.Forms.IBBToolBarButton();
  13.237 +            this.bttnSaveArmy = new IBBoard.Windows.Forms.IBBToolBarButton();
  13.238 +            this.bttnSep1 = new IBBoard.Windows.Forms.IBBToolBarButton();
  13.239 +            this.bttnUndo = new IBBoard.Windows.Forms.IBBToolBarButton();
  13.240 +            this.undoMenu = new System.Windows.Forms.ContextMenu();
  13.241 +            this.bttnRedo = new IBBoard.Windows.Forms.IBBToolBarButton();
  13.242 +            this.redoMenu = new System.Windows.Forms.ContextMenu();
  13.243 +            this.buttonIcons = new System.Windows.Forms.ImageList(this.components);
  13.244 +            this.mainMenu = new System.Windows.Forms.MainMenu(this.components);
  13.245 +            this.menuFile = new IBBoard.Windows.Forms.IBBMenuItem();
  13.246 +            this.miNewArmy = new IBBoard.Windows.Forms.IBBMenuItem();
  13.247 +            this.miOpenArmy = new IBBoard.Windows.Forms.IBBMenuItem();
  13.248 +            this.miSaveArmy = new IBBoard.Windows.Forms.IBBMenuItem();
  13.249 +            this.miSaveArmyAs = new IBBoard.Windows.Forms.IBBMenuItem();
  13.250 +            this.miCloseArmy = new IBBoard.Windows.Forms.IBBMenuItem();
  13.251 +            this.miSep1 = new System.Windows.Forms.MenuItem();
  13.252 +            this.miChangeSystem = new IBBoard.Windows.Forms.IBBMenuItem();
  13.253 +            this.miSep2 = new System.Windows.Forms.MenuItem();
  13.254 +            this.miReloadFiles = new IBBoard.Windows.Forms.IBBMenuItem();
  13.255 +            this.miSep3 = new System.Windows.Forms.MenuItem();
  13.256 +            this.miExit = new IBBoard.Windows.Forms.IBBMenuItem();
  13.257 +            this.menuEdit = new IBBoard.Windows.Forms.IBBMenuItem();
  13.258 +            this.miUndo = new IBBoard.Windows.Forms.IBBMenuItem();
  13.259 +            this.miRedo = new IBBoard.Windows.Forms.IBBMenuItem();
  13.260 +            this.menuHelp = new IBBoard.Windows.Forms.IBBMenuItem();
  13.261 +            this.miAbout = new IBBoard.Windows.Forms.IBBMenuItem();
  13.262 +            this.miDebugWindow = new IBBoard.Windows.Forms.IBBMenuItem();
  13.263 +            this.openArmyDialog = new System.Windows.Forms.OpenFileDialog();
  13.264 +            this.saveArmyDialog = new System.Windows.Forms.SaveFileDialog();
  13.265 +            this.pnlRight = new System.Windows.Forms.Panel();
  13.266 +            this.statusBarTimer = new System.Windows.Forms.Timer(this.components);
  13.267 +            ((System.ComponentModel.ISupportInitialize)(this.sbMainPanel)).BeginInit();
  13.268 +            ((System.ComponentModel.ISupportInitialize)(this.sbErrorPanel)).BeginInit();
  13.269 +            ((System.ComponentModel.ISupportInitialize)(this.sbPointsPanel)).BeginInit();
  13.270 +            this.SuspendLayout();
  13.271 +            // 
  13.272 +            // statusBar
  13.273 +            // 
  13.274 +            this.statusBar.Location = new System.Drawing.Point(0, 548);
  13.275 +            this.statusBar.Name = "statusBar";
  13.276 +            this.statusBar.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] {
  13.277 +            this.sbMainPanel,
  13.278 +            this.sbErrorPanel,
  13.279 +            this.sbPointsPanel});
  13.280 +            this.statusBar.ShowPanels = true;
  13.281 +            this.statusBar.Size = new System.Drawing.Size(792, 22);
  13.282 +            this.statusBar.TabIndex = 1;
  13.283 +            this.statusBar.PanelClick += new System.Windows.Forms.StatusBarPanelClickEventHandler(this.statusBar_PanelClick);
  13.284 +            this.statusBar.DrawItem += new System.Windows.Forms.StatusBarDrawItemEventHandler(this.statusBar_DrawItem);
  13.285 +            // 
  13.286 +            // sbMainPanel
  13.287 +            // 
  13.288 +            this.sbMainPanel.AutoSize = System.Windows.Forms.StatusBarPanelAutoSize.Spring;
  13.289 +            this.sbMainPanel.Color = System.Drawing.SystemColors.WindowText;
  13.290 +            this.sbMainPanel.Name = "sbMainPanel";
  13.291 +            this.sbMainPanel.Style = System.Windows.Forms.StatusBarPanelStyle.OwnerDraw;
  13.292 +            this.sbMainPanel.Width = 475;
  13.293 +            // 
  13.294 +            // sbErrorPanel
  13.295 +            // 
  13.296 +            this.sbErrorPanel.Color = System.Drawing.SystemColors.WindowText;
  13.297 +            this.sbErrorPanel.Name = "sbErrorPanel";
  13.298 +            this.sbErrorPanel.Style = System.Windows.Forms.StatusBarPanelStyle.OwnerDraw;
  13.299 +            this.sbErrorPanel.Width = 150;
  13.300 +            // 
  13.301 +            // sbPointsPanel
  13.302 +            // 
  13.303 +            this.sbPointsPanel.Color = System.Drawing.SystemColors.WindowText;
  13.304 +            this.sbPointsPanel.Name = "sbPointsPanel";
  13.305 +            this.sbPointsPanel.Style = System.Windows.Forms.StatusBarPanelStyle.OwnerDraw;
  13.306 +            this.sbPointsPanel.ToolTipText = "Current Points Total";
  13.307 +            this.sbPointsPanel.Width = 150;
  13.308 +            // 
  13.309 +            // toolBar
  13.310 +            // 
  13.311 +            this.toolBar.Appearance = System.Windows.Forms.ToolBarAppearance.Flat;
  13.312 +            this.toolBar.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] {
  13.313 +            this.bttnNewArmy,
  13.314 +            this.bttnOpenArmy,
  13.315 +            this.bttnSaveArmy,
  13.316 +            this.bttnSep1,
  13.317 +            this.bttnUndo,
  13.318 +            this.bttnRedo});
  13.319 +            this.toolBar.ButtonSize = new System.Drawing.Size(16, 16);
  13.320 +            this.toolBar.DropDownArrows = true;
  13.321 +            this.toolBar.ImageList = this.buttonIcons;
  13.322 +            this.toolBar.Location = new System.Drawing.Point(0, 0);
  13.323 +            this.toolBar.Name = "toolBar";
  13.324 +            this.toolBar.ShowToolTips = true;
  13.325 +            this.toolBar.Size = new System.Drawing.Size(792, 28);
  13.326 +            this.toolBar.TabIndex = 2;
  13.327 +            this.toolBar.ButtonClick += new System.Windows.Forms.ToolBarButtonClickEventHandler(this.toolBar_ButtonClick);
  13.328 +            // 
  13.329 +            // bttnNewArmy
  13.330 +            // 
  13.331 +            this.bttnNewArmy.Enabled = false;
  13.332 +            this.bttnNewArmy.ImageIndex = 0;
  13.333 +            this.bttnNewArmy.Name = "";
  13.334 +            // 
  13.335 +            // bttnOpenArmy
  13.336 +            // 
  13.337 +            this.bttnOpenArmy.ImageIndex = 2;
  13.338 +            this.bttnOpenArmy.Name = "";
  13.339 +            // 
  13.340 +            // bttnSaveArmy
  13.341 +            // 
  13.342 +            this.bttnSaveArmy.Enabled = false;
  13.343 +            this.bttnSaveArmy.ImageIndex = 1;
  13.344 +            this.bttnSaveArmy.Name = "";
  13.345 +            // 
  13.346 +            // bttnSep1
  13.347 +            // 
  13.348 +            this.bttnSep1.Name = "";
  13.349 +            this.bttnSep1.Style = System.Windows.Forms.ToolBarButtonStyle.Separator;
  13.350 +            // 
  13.351 +            // bttnUndo
  13.352 +            // 
  13.353 +            this.bttnUndo.DropDownMenu = this.undoMenu;
  13.354 +            this.bttnUndo.Enabled = false;
  13.355 +            this.bttnUndo.ImageIndex = 3;
  13.356 +            this.bttnUndo.Name = "";
  13.357 +            this.bttnUndo.Style = System.Windows.Forms.ToolBarButtonStyle.DropDownButton;
  13.358 +            // 
  13.359 +            // bttnRedo
  13.360 +            // 
  13.361 +            this.bttnRedo.DropDownMenu = this.redoMenu;
  13.362 +            this.bttnRedo.Enabled = false;
  13.363 +            this.bttnRedo.ImageIndex = 4;
  13.364 +            this.bttnRedo.Name = "";
  13.365 +            this.bttnRedo.Style = System.Windows.Forms.ToolBarButtonStyle.DropDownButton;
  13.366 +            // 
  13.367 +            // buttonIcons
  13.368 +            // 
  13.369 +            this.buttonIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("buttonIcons.ImageStream")));
  13.370 +            this.buttonIcons.TransparentColor = System.Drawing.Color.Transparent;
  13.371 +            this.buttonIcons.Images.SetKeyName(0, "");
  13.372 +            this.buttonIcons.Images.SetKeyName(1, "");
  13.373 +            this.buttonIcons.Images.SetKeyName(2, "");
  13.374 +            this.buttonIcons.Images.SetKeyName(3, "");
  13.375 +            this.buttonIcons.Images.SetKeyName(4, "");
  13.376 +            this.buttonIcons.Images.SetKeyName(5, "");
  13.377 +            this.buttonIcons.Images.SetKeyName(6, "");
  13.378 +            // 
  13.379 +            // mainMenu
  13.380 +            // 
  13.381 +            this.mainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
  13.382 +            this.menuFile,
  13.383 +            this.menuEdit,
  13.384 +            this.menuHelp});
  13.385 +            // 
  13.386 +            // menuFile
  13.387 +            // 
  13.388 +            this.menuFile.Index = 0;
  13.389 +            this.menuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
  13.390 +            this.miNewArmy,
  13.391 +            this.miOpenArmy,
  13.392 +            this.miSaveArmy,
  13.393 +            this.miSaveArmyAs,
  13.394 +            this.miCloseArmy,
  13.395 +            this.miSep1,
  13.396 +            this.miChangeSystem,
  13.397 +            this.miSep2,
  13.398 +            this.miReloadFiles,
  13.399 +            this.miSep3,
  13.400 +            this.miExit});
  13.401 +            this.menuFile.Text = "&file";
  13.402 +            // 
  13.403 +            // miNewArmy
  13.404 +            // 
  13.405 +            this.miNewArmy.Index = 0;
  13.406 +            this.miNewArmy.Text = "&new army";
  13.407 +            this.miNewArmy.Click += new System.EventHandler(this.miNewArmy_Click);
  13.408 +            // 
  13.409 +            // miOpenArmy
  13.410 +            // 
  13.411 +            this.miOpenArmy.Index = 1;
  13.412 +            this.miOpenArmy.Text = "&open army";
  13.413 +            this.miOpenArmy.Click += new System.EventHandler(this.miOpenArmy_Click);
  13.414 +            // 
  13.415 +            // miSaveArmy
  13.416 +            // 
  13.417 +            this.miSaveArmy.Enabled = false;
  13.418 +            this.miSaveArmy.Index = 2;
  13.419 +            this.miSaveArmy.Text = "&save army";
  13.420 +            this.miSaveArmy.Click += new System.EventHandler(this.miSaveArmy_Click);
  13.421 +            // 
  13.422 +            // miSaveArmyAs
  13.423 +            // 
  13.424 +            this.miSaveArmyAs.Enabled = false;
  13.425 +            this.miSaveArmyAs.Index = 3;
  13.426 +            this.miSaveArmyAs.Text = "save army &as...";
  13.427 +            this.miSaveArmyAs.Click += new System.EventHandler(this.miSaveArmyAs_Click);
  13.428 +            // 
  13.429 +            // miCloseArmy
  13.430 +            // 
  13.431 +            this.miCloseArmy.Enabled = false;
  13.432 +            this.miCloseArmy.Index = 4;
  13.433 +            this.miCloseArmy.Text = "&close army";
  13.434 +            this.miCloseArmy.Click += new System.EventHandler(this.miCloseArmy_Click);
  13.435 +            // 
  13.436 +            // miSep1
  13.437 +            // 
  13.438 +            this.miSep1.Index = 5;
  13.439 +            this.miSep1.Text = "-";
  13.440 +            // 
  13.441 +            // miChangeSystem
  13.442 +            // 
  13.443 +            this.miChangeSystem.Index = 6;
  13.444 +            this.miChangeSystem.Text = "change &game system";
  13.445 +            this.miChangeSystem.Click += new System.EventHandler(this.miChangeSystem_Click);
  13.446 +            // 
  13.447 +            // miSep2
  13.448 +            // 
  13.449 +            this.miSep2.Index = 7;
  13.450 +            this.miSep2.Text = "-";
  13.451 +            // 
  13.452 +            // miReloadFiles
  13.453 +            // 
  13.454 +            this.miReloadFiles.Index = 8;
  13.455 +            this.miReloadFiles.Text = "&reload files";
  13.456 +            this.miReloadFiles.Click += new System.EventHandler(this.miReloadFiles_Click);
  13.457 +            // 
  13.458 +            // miSep3
  13.459 +            // 
  13.460 +            this.miSep3.Index = 9;
  13.461 +            this.miSep3.Text = "-";
  13.462 +            // 
  13.463 +            // miExit
  13.464 +            // 
  13.465 +            this.miExit.Index = 10;
  13.466 +            this.miExit.Text = "e&xit";
  13.467 +            this.miExit.Click += new System.EventHandler(this.miExit_Click);
  13.468 +            // 
  13.469 +            // menuEdit
  13.470 +            // 
  13.471 +            this.menuEdit.Index = 1;
  13.472 +            this.menuEdit.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
  13.473 +            this.miUndo,
  13.474 +            this.miRedo});
  13.475 +            this.menuEdit.Text = "&edit";
  13.476 +            // 
  13.477 +            // miUndo
  13.478 +            // 
  13.479 +            this.miUndo.Enabled = false;
  13.480 +            this.miUndo.Index = 0;
  13.481 +            this.miUndo.Text = "&undo";
  13.482 +            this.miUndo.Click += new System.EventHandler(this.miUndo_Click);
  13.483 +            // 
  13.484 +            // miRedo
  13.485 +            // 
  13.486 +            this.miRedo.Enabled = false;
  13.487 +            this.miRedo.Index = 1;
  13.488 +            this.miRedo.Text = "&redo";
  13.489 +            this.miRedo.Click += new System.EventHandler(this.miRedo_Click);
  13.490 +            // 
  13.491 +            // menuHelp
  13.492 +            // 
  13.493 +            this.menuHelp.Index = 2;
  13.494 +            this.menuHelp.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
  13.495 +            this.miAbout,
  13.496 +            this.miDebugWindow});
  13.497 +            this.menuHelp.Text = "&help";
  13.498 +            // 
  13.499 +            // miAbout
  13.500 +            // 
  13.501 +            this.miAbout.Enabled = false;
  13.502 +            this.miAbout.Index = 0;
  13.503 +            this.miAbout.Text = "&about";
  13.504 +            // 
  13.505 +            // miDebugWindow
  13.506 +            // 
  13.507 +            this.miDebugWindow.Index = 1;
  13.508 +            this.miDebugWindow.Text = "&debug";
  13.509 +            this.miDebugWindow.Click += new System.EventHandler(this.miDebugWindow_Click);
  13.510 +            // 
  13.511 +            // saveArmyDialog
  13.512 +            // 
  13.513 +            this.saveArmyDialog.Title = "Translatable:saveArmyDialog";
  13.514 +            // 
  13.515 +            // pnlRight
  13.516 +            // 
  13.517 +            this.pnlRight.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
  13.518 +                        | System.Windows.Forms.AnchorStyles.Right)));
  13.519 +            this.pnlRight.BackColor = System.Drawing.SystemColors.AppWorkspace;
  13.520 +            this.pnlRight.Location = new System.Drawing.Point(726, 30);
  13.521 +            this.pnlRight.Name = "pnlRight";
  13.522 +            this.pnlRight.Size = new System.Drawing.Size(64, 516);
  13.523 +            this.pnlRight.TabIndex = 4;
  13.524 +            this.pnlRight.Visible = false;
  13.525 +            this.pnlRight.Paint += new System.Windows.Forms.PaintEventHandler(this.pnlRight_Paint);
  13.526 +            // 
  13.527 +            // statusBarTimer
  13.528 +            // 
  13.529 +            this.statusBarTimer.Interval = 5000;
  13.530 +            this.statusBarTimer.Tick += new System.EventHandler(this.statusBarTimer_Tick);
  13.531 +            // 
  13.532 +            // FrmMain
  13.533 +            // 
  13.534 +            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
  13.535 +            this.ClientSize = new System.Drawing.Size(792, 570);
  13.536 +            this.Controls.Add(this.pnlRight);
  13.537 +            this.Controls.Add(this.toolBar);
  13.538 +            this.Controls.Add(this.statusBar);
  13.539 +            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
  13.540 +            this.IsMdiContainer = true;
  13.541 +            this.Menu = this.mainMenu;
  13.542 +            this.Name = "FrmMain";
  13.543 +            this.Text = "WarFoundry";
  13.544 +            ((System.ComponentModel.ISupportInitialize)(this.sbMainPanel)).EndInit();
  13.545 +            ((System.ComponentModel.ISupportInitialize)(this.sbErrorPanel)).EndInit();
  13.546 +            ((System.ComponentModel.ISupportInitialize)(this.sbPointsPanel)).EndInit();
  13.547 +            this.ResumeLayout(false);
  13.548 +            this.PerformLayout();
  13.549 +
  13.550 +		}
  13.551 +		#endregion
  13.552 +
  13.553 +		/// <summary>
  13.554 +		/// The main entry point for the application.
  13.555 +		/// </summary>
  13.556 +		[STAThread]
  13.557 +		static void Main(string[] args) 
  13.558 +		{
  13.559 +			try
  13.560 +			{
  13.561 +				///TODO: Work out how to auto-embed the Manifest file so that we can have visual styles without having a .manifest file floating around
  13.562 +				//and without using the line below, which causes the toolbar buttons to lose their icons
  13.563 +				//Application.EnableVisualStyles();
  13.564 +				Application.Run(new FrmMain(args));
  13.565 +			}
  13.566 +			catch(Exception ex)
  13.567 +			{
  13.568 +                   LogManager.GetLogger(typeof(FrmMain)).Fatal(ex);
  13.569 +				MessageBox.Show(null, "A major, unexpected and fatal error ocurred while starting the application: \r\n\r\n"+ex.Message+"\r\n\r\n"+ex.StackTrace, "Fatal error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  13.570 +			}
  13.571 +		}
  13.572 +
  13.573 +        public WarFoundryFactory Factory
  13.574 +        {
  13.575 +            get { return WarFoundryFactoryFactory.GetFactoryFactory().GetFactory(Constants.ExecutablePath, factoryType); }
  13.576 +        }
  13.577 +
  13.578 +		private void miExit_Click(object sender, System.EventArgs e)
  13.579 +		{
  13.580 +			Application.Exit();
  13.581 +		}
  13.582 +
  13.583 +		private void miNewArmy_Click(object sender, System.EventArgs e)
  13.584 +		{
  13.585 +			createNewArmy();
  13.586 +		}
  13.587 +
  13.588 +		private void createNewArmy()
  13.589 +		{
  13.590 +			if (closeCurrentArmy())
  13.591 +			{
  13.592 +				FrmNewArmy newArmy = new FrmNewArmy(CurrentGameSystem, Factory);
  13.593 +				DialogResult dr = newArmy.ShowDialog();
  13.594 +
  13.595 +				if (dr == DialogResult.OK)
  13.596 +				{
  13.597 +                    CurrentArmy = new Army(newArmy.SelectedRace, newArmy.ArmyName, newArmy.ArmySize, Factory);
  13.598 +				}
  13.599 +			}
  13.600 +		}
  13.601 +
  13.602 +		private bool openArmy()
  13.603 +		{
  13.604 +			if (closeCurrentArmy())
  13.605 +			{
  13.606 +				if (openArmyDialog.Filter=="")
  13.607 +				{
  13.608 +					string savePath = ArmiesPath;
  13.609 +				
  13.610 +					if (!Directory.Exists(savePath))
  13.611 +					{
  13.612 +						Directory.CreateDirectory(savePath);
  13.613 +					}
  13.614 +
  13.615 +					openArmyDialog.InitialDirectory = savePath;
  13.616 +					openArmyDialog.Filter = Translation.GetTranslation("armyFileFilter")+"|*.army";
  13.617 +					openArmyDialog.Title = Translation.GetTranslation("openArmyDialog");
  13.618 +
  13.619 +				}
  13.620 +
  13.621 +				DialogResult dr = openArmyDialog.ShowDialog(this);
  13.622 +
  13.623 +				if (dr == DialogResult.OK)
  13.624 +				{
  13.625 +					try
  13.626 +					{
  13.627 +						CurrentArmy = Factory.LoadArmy(openArmyDialog.FileName);
  13.628 +						return true;					
  13.629 +					}
  13.630 +					catch (InvalidFileException ex)
  13.631 +					{
  13.632 +						logger.Error(ex);
  13.633 +						MessageBox.Show(this, ex.Message, Translation.GetTranslation("InvalidFileBoxTitle", "Invalid data file"), MessageBoxButtons.OK, MessageBoxIcon.Error);
  13.634 +						return false;
  13.635 +					}
  13.636 +				}
  13.637 +				else
  13.638 +				{
  13.639 +					return false;
  13.640 +				}
  13.641 +			}
  13.642 +			else
  13.643 +			{
  13.644 +				return false;
  13.645 +			}
  13.646 +		}
  13.647 +
  13.648 +		private bool closeCurrentArmy()
  13.649 +		{
  13.650 +			if (CurrentArmy!=null)
  13.651 +			{
  13.652 +				bool canClose = false;
  13.653 +
  13.654 +				if (CommandStack.IsDirty())
  13.655 +				{
  13.656 +					DialogResult dr = MessageBox.Show(this, "The army \""+CurrentArmy.Name+"\" has been modified.\r\nSave changes before closing army?", "Unsaved changes", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button3);
  13.657 +
  13.658 +					if (dr == DialogResult.Yes)
  13.659 +					{
  13.660 +						canClose = saveCurrentArmyOrSaveAs();
  13.661 +					}
  13.662 +					else if (dr == DialogResult.No)
  13.663 +					{
  13.664 +						canClose = true;
  13.665 +					}
  13.666 +					//else they said cancel and we default to "canClose = false" so do nothing
  13.667 +				}
  13.668 +				else
  13.669 +				{
  13.670 +					canClose = true;
  13.671 +				}
  13.672 +
  13.673 +				if (canClose)
  13.674 +				{
  13.675 +					//do close
  13.676 +					disableCategoryButtons();
  13.677 +					CurrentArmy = null;
  13.678 +					return true;
  13.679 +				}
  13.680 +				else
  13.681 +				{
  13.682 +					return false;
  13.683 +				}
  13.684 +			}
  13.685 +			else
  13.686 +			{
  13.687 +				disableCategoryButtons();
  13.688 +				//pretend we succeeded
  13.689 +				return true;
  13.690 +			}
  13.691 +		}
  13.692 +
  13.693 +		private void undoLastAction()
  13.694 +		{
  13.695 +			if (commandStack.CanUndo())
  13.696 +			{
  13.697 +				commandStack.Undo();
  13.698 +			}
  13.699 +		}
  13.700 +
  13.701 +		private void redoAction()
  13.702 +		{
  13.703 +			if (commandStack.CanRedo())
  13.704 +			{
  13.705 +				commandStack.Redo();
  13.706 +			}
  13.707 +		}
  13.708 +
  13.709 +		private bool saveCurrentArmyOrSaveAs()
  13.710 +		{
  13.711 +			if (WarFoundrySaver.GetSaver().CanSave(CurrentArmy))
  13.712 +			{
  13.713 +				return saveCurrentArmy();
  13.714 +			}
  13.715 +			else 
  13.716 +			{
  13.717 +				return saveCurrentArmyAs();
  13.718 +			}
  13.719 +		}
  13.720 +
  13.721 +		private bool saveCurrentArmy()
  13.722 +		{
  13.723 +            if (WarFoundrySaver.GetSaver().CanSave(CurrentArmy))
  13.724 +			{
  13.725 +                if (WarFoundrySaver.GetSaver().Save(CurrentArmy))
  13.726 +				{
  13.727 +					miSaveArmy.Enabled = false;
  13.728 +					bttnSaveArmy.Enabled = false;
  13.729 +					CommandStack.setCleanMark();
  13.730 +					return true;
  13.731 +				}
  13.732 +				else
  13.733 +				{
  13.734 +					MessageBox.Show(this, Translation.GetTranslation("SaveFailed"), Translation.GetTranslation("SaveFailedTitle"), MessageBoxButtons.OK, MessageBoxIcon.Error);
  13.735 +					return false;
  13.736 +				}
  13.737 +			}
  13.738 +			else
  13.739 +			{
  13.740 +				return false;
  13.741 +			}
  13.742 +		}
  13.743 +
  13.744 +		private bool saveCurrentArmyAs()
  13.745 +		{
  13.746 +			if (saveArmyDialog.Filter == "")
  13.747 +			{
  13.748 +				string savePath = ArmiesPath;
  13.749 +				
  13.750 +				if (!Directory.Exists(savePath))
  13.751 +				{
  13.752 +					Directory.CreateDirectory(savePath);
  13.753 +				}
  13.754 +
  13.755 +				saveArmyDialog.InitialDirectory = savePath;
  13.756 +				saveArmyDialog.Filter = Translation.GetTranslation("armyFileFilter")+"|*.army";
  13.757 +				saveArmyDialog.Title = Translation.GetTranslation("saveArmyDialog");
  13.758 +			}
  13.759 +
  13.760 +			DialogResult dr = saveArmyDialog.ShowDialog(this);
  13.761 +
  13.762 +			if (dr == DialogResult.OK)
  13.763 +			{
  13.764 +				if (WarFoundrySaver.GetSaver().SaveAs(CurrentArmy, saveArmyDialog.FileName))
  13.765 +				{
  13.766 +					miSaveArmy.Enabled = false;
  13.767 +					bttnSaveArmy.Enabled = false;
  13.768 +					CommandStack.setCleanMark();
  13.769 +					return true;
  13.770 +				}
  13.771 +				else
  13.772 +				{
  13.773 +					MessageBox.Show(this, Translation.GetTranslation("SaveFailed"), Translation.GetTranslation("SaveFailedTitle"), MessageBoxButtons.OK, MessageBoxIcon.Error);
  13.774 +					return false;
  13.775 +				}
  13.776 +			}
  13.777 +			else
  13.778 +			{
  13.779 +				return false;
  13.780 +			}
  13.781 +		}
  13.782 +
  13.783 +		private void toolBar_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
  13.784 +		{
  13.785 +			if (e.Button == bttnUndo)
  13.786 +			{
  13.787 +				undoLastAction();
  13.788 +			}
  13.789 +			else if (e.Button == bttnRedo)
  13.790 +			{
  13.791 +				redoAction();
  13.792 +			}
  13.793 +			else if (e.Button == bttnNewArmy)
  13.794 +			{
  13.795 +				createNewArmy();
  13.796 +			}
  13.797 +			else if (e.Button == bttnOpenArmy)
  13.798 +			{
  13.799 +				openArmy();
  13.800 +			}
  13.801 +			else if (e.Button == bttnSaveArmy)
  13.802 +			{
  13.803 +				saveCurrentArmyOrSaveAs();
  13.804 +			}
  13.805 +			else
  13.806 +			{
  13.807 +				//it must be one of our extra buttons for the categories
  13.808 +				addUnitFromCategory((Category)e.Button.Tag);
  13.809 +			}
  13.810 +		}
  13.811 +
  13.812 +		private GameSystem CurrentGameSystem
  13.813 +		{
  13.814 +			get { return WarFoundryCore.CurrentGameSystem; }
  13.815 +            set { WarFoundryCore.CurrentGameSystem = value; }
  13.816 +		}
  13.817 +
  13.818 +		private static Army CurrentArmy
  13.819 +		{
  13.820 +			get { return WarFoundryCore.CurrentArmy; }
  13.821 +			set { WarFoundryCore.CurrentArmy = value; }
  13.822 +		}
  13.823 +
  13.824 +		private void SelectGameSystem()
  13.825 +		{
  13.826 +			FrmSelectSystem selectSystem = new FrmSelectSystem(Factory);
  13.827 +			DialogResult dr = selectSystem.ShowDialog(this);
  13.828 +
  13.829 +			if (dr==DialogResult.OK)
  13.830 +			{
  13.831 +				closeCurrentArmy();
  13.832 +				CurrentGameSystem = selectSystem.GameSystem;
  13.833 +			}
  13.834 +		}
  13.835 +
  13.836 +		private void miChangeSystem_Click(object sender, System.EventArgs e)
  13.837 +		{
  13.838 +			SelectGameSystem();
  13.839 +		}
  13.840 +
  13.841 +		private void FrmMain_GameSystemChanged(GameSystem oldSystem, GameSystem newSystem)
  13.842 +		{
  13.843 +            miNewArmy.Enabled = newSystem != null;
  13.844 +            bttnNewArmy.Enabled = newSystem != null;
  13.845 +			setAppTitle();
  13.846 +			removeCategoryButtons();
  13.847 +			addCategoryButtons();
  13.848 +		}
  13.849 +
  13.850 +		private void FrmMain_ArmyChanged(Army oldArmy, Army newArmy)
  13.851 +		{		
  13.852 +			setAppTitle();
  13.853 +
  13.854 +            if (oldArmy != null)
  13.855 +            {
  13.856 +                oldArmy.UnitAdded += UnitAddedMethod;
  13.857 +                oldArmy.UnitRemoved += UnitRemovedMethod;
  13.858 +                oldArmy.PointsValueChanged += PointsValueChangedMethod;
  13.859 +            }
  13.860 +
  13.861 +			if (CurrentArmy==null)
  13.862 +			{
  13.863 +				miSaveArmyAs.Enabled = false;
  13.864 +				miCloseArmy.Enabled = false;
  13.865 +				disableCategoryButtons();
  13.866 +			}
  13.867 +			else
  13.868 +			{
  13.869 +                newArmy.UnitAdded += UnitAddedMethod;
  13.870 +                newArmy.UnitRemoved += UnitRemovedMethod;
  13.871 +                newArmy.PointsValueChanged += PointsValueChangedMethod;
  13.872 +				//TODO: Clear all buttons
  13.873 +				miSaveArmyAs.Enabled = true;
  13.874 +				miCloseArmy.Enabled = true;
  13.875 +				enableCategoryButtons();
  13.876 +
  13.877 +                if (newArmy.Race.HasCategoryOverrides())
  13.878 +				{
  13.879 +					removeCategoryButtons();
  13.880 +                    addCategoryButtons(newArmy.Race.Categories);
  13.881 +				}
  13.882 +			}
  13.883 +
  13.884 +			CommandStack.Reset();
  13.885 +
  13.886 +			miSaveArmy.Enabled = false;
  13.887 +			bttnSaveArmy.Enabled = false;
  13.888 +
  13.889 +			setPointsPanelText();
  13.890 +		}
  13.891 +
  13.892 +		private void addCategoryButtons()
  13.893 +		{
  13.894 +			if (CurrentGameSystem!=null)
  13.895 +			{
  13.896 +				addCategoryButtons(CurrentGameSystem.Categories);
  13.897 +			}
  13.898 +		}
  13.899 +
  13.900 +		private void addCategoryButtons(Category[] cats)
  13.901 +		{
  13.902 +			int catCount = cats.Length;
  13.903 +			Category cat;
  13.904 +			categoryButtons = new ToolBarButton[catCount+1];
  13.905 +
  13.906 +			ToolBarButton sep = new ToolBarButton();
  13.907 +			sep.Style = ToolBarButtonStyle.Separator;
  13.908 +			categoryButtons[0] = sep;
  13.909 +
  13.910 +			IBBToolBarButton button;
  13.911 +
  13.912 +			for (int i = 0; i<catCount; i++)
  13.913 +			{
  13.914 +				cat = cats[i];
  13.915 +				button = new IBBToolBarButton();
  13.916 +				///button.Name = "bttnAddCategory" + cat.Name[0].ToString();
  13.917 +				button.Text = cat.Name.ToString();//String.Format(Translation.GetTranslation("bttnAddCategory"), cat.Name);
  13.918 +				button.Tag = cat;
  13.919 +				button.ImageIndex = 6;
  13.920 +				button.Enabled = false;
  13.921 +				categoryButtons[i+1] = button;
  13.922 +			}
  13.923 +
  13.924 +			this.Invoke(new ToolBarButtonRangeDelegate(toolBar.Buttons.AddRange), new object[]{categoryButtons});
  13.925 +		}
  13.926 +
  13.927 +		private void removeCategoryButtons()
  13.928 +		{
  13.929 +			if (categoryButtons!=null)
  13.930 +			{
  13.931 +				for (int i = 0; i<categoryButtons.Length; i++)
  13.932 +				{
  13.933 +					this.Invoke(new ToolBarButtonDelegate(toolBar.Buttons.Remove), new object[]{categoryButtons[i]});
  13.934 +				}
  13.935 +			}
  13.936 +		}
  13.937 +
  13.938 +		private void enableCategoryButtons()
  13.939 +		{
  13.940 +			setCategoryButtonState(true);
  13.941 +		}
  13.942 +
  13.943 +		private void disableCategoryButtons()
  13.944 +		{
  13.945 +			setCategoryButtonState(false);
  13.946 +		}
  13.947 +
  13.948 +		private void setCategoryButtonState(bool state)
  13.949 +		{
  13.950 +			if (categoryButtons!=null)
  13.951 +			{
  13.952 +				for (int i = 0; i<categoryButtons.Length; i++)
  13.953 +				{
  13.954 +					categoryButtons[i].Enabled = state;
  13.955 +				}
  13.956 +			}
  13.957 +		}
  13.958 +
  13.959 +		private void miSaveArmyAs_Click(object sender, System.EventArgs e)
  13.960 +		{
  13.961 +			saveCurrentArmyAs();
  13.962 +		}
  13.963 +
  13.964 +		private void commandStack_CommandStackUpdated()
  13.965 +		{
  13.966 +			bttnUndo.Enabled = commandStack.CanUndo();
  13.967 +			miUndo.Enabled = bttnUndo.Enabled;
  13.968 +			bttnRedo.Enabled = commandStack.CanRedo();
  13.969 +			miRedo.Enabled = bttnRedo.Enabled;
  13.970 +			MenuItem[] menuItems = null;
  13.971 +			int redoLength = commandStack.RedoLength;
  13.972 +			int maxRedo = Math.Min(10, redoLength);
  13.973 +			
  13.974 +			if (redoLength > 0)
  13.975 +			{
  13.976 +				menuItems = new MenuItem[maxRedo];
  13.977 +				Command com;
  13.978 +				MenuItem mi;
  13.979 +
  13.980 +				for (int i = 0; i < maxRedo; i++)
  13.981 +				{
  13.982 +					com = commandStack.PeekRedoCommand(i+1);
  13.983 +
  13.984 +					if (com == null)
  13.985 +					{
  13.986 +						break; 
  13.987 +					}
  13.988 +
  13.989 +					mi = new MenuItem(com.Description);
  13.990 +					mi.Click+=new EventHandler(redoMenu_Click);
  13.991 +					menuItems[i] = mi;
  13.992 +				}
  13.993 +			}
  13.994 +
  13.995 +			redoMenu.MenuItems.Clear();
  13.996 +
  13.997 +			if (menuItems!=null && menuItems[0]!=null)
  13.998 +			{
  13.999 +				bttnRedo.ToolTipText = menuItems[0].Text;
 13.1000 +				redoMenu.MenuItems.AddRange(menuItems);
 13.1001 +			}
 13.1002 +
 13.1003 +			int undoLength = commandStack.UndoLength;
 13.1004 +			int maxUndo = Math.Min(10, undoLength);
 13.1005 +			MenuItem[] menuItemsUndo = null;
 13.1006 +			
 13.1007 +			if (undoLength > 0)
 13.1008 +			{
 13.1009 +				menuItemsUndo = new MenuItem[maxUndo];
 13.1010 +				Command com;
 13.1011 +				MenuItem mi;
 13.1012 +
 13.1013 +				for (int i = 0; i < maxUndo; i++)
 13.1014 +				{
 13.1015 +					com = commandStack.PeekUndoCommand(i+1);
 13.1016 +
 13.1017 +					if (com == null)
 13.1018 +					{
 13.1019 +						break; 
 13.1020 +					}
 13.1021 +
 13.1022 +					mi = new MenuItem(com.UndoDescription);
 13.1023 +					mi.Click+=new EventHandler(undoMenu_Click);
 13.1024 +					menuItemsUndo[i] = mi;
 13.1025 +				}
 13.1026 +			}
 13.1027 +
 13.1028 +			undoMenu.MenuItems.Clear();
 13.1029 +
 13.1030 +			if (menuItemsUndo!=null && menuItemsUndo[0]!=null)
 13.1031 +			{
 13.1032 +				bttnUndo.ToolTipText = menuItemsUndo[0].Text;
 13.1033 +				undoMenu.MenuItems.AddRange(menuItemsUndo);
 13.1034 +			}
 13.1035 +
 13.1036 +            bool canSave = WarFoundrySaver.GetSaver().CanSave(CurrentArmy);
 13.1037 +			bttnSaveArmy.Enabled = commandStack.IsDirty() && CurrentArmy!=null && canSave;
 13.1038 +			miSaveArmy.Enabled = commandStack.IsDirty() && CurrentArmy!=null && canSave;
 13.1039 +		}
 13.1040 +
 13.1041 +		private void miSaveArmy_Click(object sender, System.EventArgs e)
 13.1042 +		{
 13.1043 +			//we should only be saving when the army can be saved (i.e. it has been opened from a file or Save As-ed)
 13.1044 +			//so use the "just save" version
 13.1045 +			saveCurrentArmy();
 13.1046 +		}
 13.1047 +
 13.1048 +		private void setAppTitle()
 13.1049 +		{
 13.1050 +			string str = AppTitle;
 13.1051 +
 13.1052 +			if (CurrentGameSystem!=null)
 13.1053 +			{
 13.1054 +				str+= " - "+CurrentGameSystem.Name;
 13.1055 +			}
 13.1056 +
 13.1057 +			if (CurrentArmy!=null)
 13.1058 +			{
 13.1059 +				str+= " - "+CurrentArmy.Name;
 13.1060 +			}
 13.1061 +
 13.1062 +			this.Text = str;
 13.1063 +		}
 13.1064 +
 13.1065 +		private void addUnitFromCategory(Category cat)
 13.1066 +		{
 13.1067 +			FrmNewUnit newUnit = new FrmNewUnit(CurrentArmy.Race, cat, CurrentArmy);
 13.1068 +			DialogResult dr = newUnit.ShowDialog(this);
 13.1069 +
 13.1070 +			if (dr == DialogResult.OK)
 13.1071 +			{
 13.1072 +                CreateAndAddUnitCommand cmd = new CreateAndAddUnitCommand(newUnit.SelectedUnit, cat, CurrentArmy, Factory);
 13.1073 +				commandStack.Execute(cmd);
 13.1074 +			}
 13.1075 +		}
 13.1076 +
 13.1077 +		private void FrmMain_UnitAddedMethod(object unitObj)
 13.1078 +		{
 13.1079 +			if (unitObj is Unit)
 13.1080 +			{
 13.1081 +				Unit unit = (Unit)unitObj;
 13.1082 +				sbErrorPanel.Text = "";
 13.1083 +			}
 13.1084 +		}
 13.1085 +
 13.1086 +		private void FrmMain_UnitRemovedMethod(object unitObj)
 13.1087 +		{
 13.1088 +			if (unitObj is Unit)
 13.1089 +			{
 13.1090 +				Unit unit = (Unit)unitObj;
 13.1091 +				sbErrorPanel.Text = "";
 13.1092 +
 13.1093 +				//check if window is open, and close it if it is
 13.1094 +				foreach (Form frm in this.MdiChildren)
 13.1095 +				{
 13.1096 +					if (frm is FrmUnit)
 13.1097 +					{
 13.1098 +						if (((FrmUnit)frm).Unit == unit)
 13.1099 +						{
 13.1100 +							frm.Close();
 13.1101 +							break;
 13.1102 +						}
 13.1103 +					}
 13.1104 +				}
 13.1105 +			}
 13.1106 +		}
 13.1107 +
 13.1108 +		/*private void FrmMain_FailedUnitRequirement(FailedUnitRequirement failedRequirement)
 13.1109 +		{
 13.1110 +			sbErrorPanel.Text = Translation.GetTranslation("UnitRequirementFailed", "Unit Requirement Failed");
 13.1111 +			sbErrorPanel.Tag = failedRequirement.Description;
 13.1112 +		}*/
 13.1113 +
 13.1114 +		/*public void MdiChildMoved()
 13.1115 +		{
 13.1116 +			Point mouseAt = PointToClient(ActiveMdiChild.Location);
 13.1117 +
 13.1118 +			if (Comparisons.ValueWithinAmount(pnlRight.Right, ActiveMdiChild.Right, 10))
 13.1119 +			{
 13.1120 +				pnlRight.Visible = true;
 13.1121 +				//pnlRight.Container.Add(ActiveMdiChild);
 13.1122 +			}
 13.1123 +			else
 13.1124 +			{
 13.1125 +				pnlRight.Visible = false;
 13.1126 +			}
 13.1127 +		}*/
 13.1128 +
 13.1129 +		public void pnlRight_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
 13.1130 +		{
 13.1131 +			HatchBrush dockCueBrush = new HatchBrush(HatchStyle.LightDownwardDiagonal, Color.White, Color.Gray);
 13.1132 +			Pen dockCuePen = new Pen(dockCueBrush, 10);
 13.1133 +			e.Graphics.DrawRectangle(dockCuePen, new Rectangle(pnlRight.Left, pnlRight.Top, pnlRight.Width, pnlRight.Height));
 13.1134 +		}
 13.1135 +
 13.1136 +		private void miUndo_Click(object sender, System.EventArgs e)
 13.1137 +		{
 13.1138 +			undoLastAction();
 13.1139 +		}
 13.1140 +
 13.1141 +		private void miRedo_Click(object sender, System.EventArgs e)
 13.1142 +		{
 13.1143 +			redoAction();
 13.1144 +		}
 13.1145 +
 13.1146 +		private void miCloseArmy_Click(object sender, EventArgs e)
 13.1147 +		{
 13.1148 +			closeCurrentArmy();
 13.1149 +		}
 13.1150 +
 13.1151 +		private void miOpenArmy_Click(object sender, EventArgs e)
 13.1152 +		{
 13.1153 +			openArmy();
 13.1154 +		}
 13.1155 +
 13.1156 +		private void FrmMain_PointsValueChangedMethod(WarFoundryObject obj, double oldVal, double newVal)
 13.1157 +		{
 13.1158 +			if (obj is Army)
 13.1159 +			{
 13.1160 +				setPointsPanelText();
 13.1161 +			}
 13.1162 +		}
 13.1163 +
 13.1164 +		private void setPointsPanelText()
 13.1165 +		{	
 13.1166 +			if (CurrentArmy==null)
 13.1167 +			{
 13.1168 +				sbPointsPanel.Text = "";
 13.1169 +				sbPointsPanel.ResetColor();
 13.1170 +			}
 13.1171 +			else 
 13.1172 +			{
 13.1173 +				sbPointsPanel.Text = String.Format(Translation.GetTranslation("statusPanelPoints"), CurrentArmy.PointsTotal, CurrentArmy.MaxPoints);
 13.1174 +
 13.1175 +				if (CurrentArmy.PointsTotal>CurrentArmy.MaxPoints)
 13.1176 +				{
 13.1177 +					sbPointsPanel.Color = Color.Red;
 13.1178 +				}
 13.1179 +				else
 13.1180 +				{
 13.1181 +					sbPointsPanel.ResetColor();
 13.1182 +				}
 13.1183 +			}
 13.1184 +		}
 13.1185 +
 13.1186 +		private void redoMenu_Click(object sender, EventArgs e)
 13.1187 +		{
 13.1188 +			if (sender is MenuItem)
 13.1189 +			{
 13.1190 +				MenuItem mi = (MenuItem)sender;
 13.1191 +
 13.1192 +				if (mi.Parent == redoMenu)
 13.1193 +				{
 13.1194 +					//we know it's an redo menu item so find it's index and redo everything					
 13.1195 +					int max = mi.Index;
 13.1196 +
 13.1197 +					for (int i = 0; i <= max; i++)
 13.1198 +					{
 13.1199 +						commandStack.Redo();
 13.1200 +					}
 13.1201 +				}
 13.1202 +			}
 13.1203 +		}
 13.1204 +
 13.1205 +		private void undoMenu_Click(object sender, EventArgs e)
 13.1206 +		{
 13.1207 +			if (sender is MenuItem)
 13.1208 +			{
 13.1209 +				MenuItem mi = (MenuItem)sender;
 13.1210 +
 13.1211 +				if (mi.Parent == undoMenu)
 13.1212 +				{
 13.1213 +					//we know it's an undo menu item so find it's index and undo everything
 13.1214 +					int max = mi.Index;
 13.1215 +					for (int i = 0; i <= max; i++)
 13.1216 +					{
 13.1217 +						commandStack.Undo();
 13.1218 +					}
 13.1219 +				}
 13.1220 +			}
 13.1221 +		}
 13.1222 +
 13.1223 +		private void statusBar_DrawItem(object sender, System.Windows.Forms.StatusBarDrawItemEventArgs sbdevent)
 13.1224 +		{
 13.1225 +			statusBar.ColorableStatusBarDrawItem(sender, sbdevent);
 13.1226 +		}
 13.1227 +
 13.1228 +		private void miDebugWindow_Click(object sender, EventArgs e)
 13.1229 +		{
 13.1230 +			if (debugWindow == null || debugWindow.IsDisposed)
 13.1231 +			{
 13.1232 +				debugWindow = new FrmDebugOutput();
 13.1233 +			}
 13.1234 +
 13.1235 +			debugWindow.Show();
 13.1236 +			debugWindow.Focus();
 13.1237 +		}
 13.1238 +
 13.1239 +		private void FrmMain_Closing(object sender, CancelEventArgs e)
 13.1240 +		{
 13.1241 +			if (!closeCurrentArmy())
 13.1242 +			{
 13.1243 +				e.Cancel = true;
 13.1244 +			}
 13.1245 +		}
 13.1246 +
 13.1247 +		private void miReloadFiles_Click(object sender, System.EventArgs e)
 13.1248 +		{
 13.1249 +			Factory.LoadAllGameSystems();
 13.1250 +			sbMainPanel.Text = Translation.GetTranslation("GameSystemFilesReloaded", "Game system and race files reloaded");
 13.1251 +			statusBarTimer.Enabled = true;
 13.1252 +		}
 13.1253 +
 13.1254 +		private void statusBarTimer_Tick(object sender, System.EventArgs e)
 13.1255 +		{
 13.1256 +			sbMainPanel.Text = "";
 13.1257 +			statusBarTimer.Enabled = false;
 13.1258 +		}
 13.1259 +
 13.1260 +		private void statusBar_PanelClick(object sender, StatusBarPanelClickEventArgs e)
 13.1261 +		{
 13.1262 +			if (e.StatusBarPanel == sbErrorPanel && sbErrorPanel.Text!="")
 13.1263 +			{
 13.1264 +				MessageBox.Show(this, sbErrorPanel.TagString, Translation.GetTranslation("FailedRequirementMessage"), MessageBoxButtons.OK, MessageBoxIcon.Warning);
 13.1265 +			}
 13.1266 +		}
 13.1267 +	}
 13.1268 +}
    14.1 Binary file FrmMain.resources has changed
    15.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2 +++ b/FrmMain.resx	Fri Dec 19 15:57:51 2008 +0000
    15.3 @@ -0,0 +1,280 @@
    15.4 +<?xml version="1.0" encoding="utf-8"?>
    15.5 +<root>
    15.6 +  <!-- 
    15.7 +    Microsoft ResX Schema 
    15.8 +    
    15.9 +    Version 2.0
   15.10 +    
   15.11 +    The primary goals of this format is to allow a simple XML format 
   15.12 +    that is mostly human readable. The generation and parsing of the 
   15.13 +    various data types are done through the TypeConverter classes 
   15.14 +    associated with the data types.
   15.15 +    
   15.16 +    Example:
   15.17 +    
   15.18 +    ... ado.net/XML headers & schema ...
   15.19 +    <resheader name="resmimetype">text/microsoft-resx</resheader>
   15.20 +    <resheader name="version">2.0</resheader>
   15.21 +    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
   15.22 +    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
   15.23 +    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
   15.24 +    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
   15.25 +    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
   15.26 +        <value>[base64 mime encoded serialized .NET Framework object]</value>
   15.27 +    </data>
   15.28 +    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
   15.29 +        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
   15.30 +        <comment>This is a comment</comment>
   15.31 +    </data>
   15.32 +                
   15.33 +    There are any number of "resheader" rows that contain simple 
   15.34 +    name/value pairs.
   15.35 +    
   15.36 +    Each data row contains a name, and value. The row also contains a 
   15.37 +    type or mimetype. Type corresponds to a .NET class that support 
   15.38 +    text/value conversion through the TypeConverter architecture. 
   15.39 +    Classes that don't support this are serialized and stored with the 
   15.40 +    mimetype set.
   15.41 +    
   15.42 +    The mimetype is used for serialized objects, and tells the 
   15.43 +    ResXResourceReader how to depersist the object. This is currently not 
   15.44 +    extensible. For a given mimetype the value must be set accordingly:
   15.45 +    
   15.46 +    Note - application/x-microsoft.net.object.binary.base64 is the format 
   15.47 +    that the ResXResourceWriter will generate, however the reader can 
   15.48 +    read any of the formats listed below.
   15.49 +    
   15.50 +    mimetype: application/x-microsoft.net.object.binary.base64
   15.51 +    value   : The object must be serialized with 
   15.52 +            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
   15.53 +            : and then encoded with base64 encoding.
   15.54 +    
   15.55 +    mimetype: application/x-microsoft.net.object.soap.base64
   15.56 +    value   : The object must be serialized with 
   15.57 +            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
   15.58 +            : and then encoded with base64 encoding.
   15.59 +
   15.60 +    mimetype: application/x-microsoft.net.object.bytearray.base64
   15.61 +    value   : The object must be serialized into a byte array 
   15.62 +            : using a System.ComponentModel.TypeConverter
   15.63 +            : and then encoded with base64 encoding.
   15.64 +    -->
   15.65 +  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
   15.66 +    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
   15.67 +    <xsd:element name="root" msdata:IsDataSet="true">
   15.68 +      <xsd:complexType>
   15.69 +        <xsd:choice maxOccurs="unbounded">
   15.70 +          <xsd:element name="metadata">
   15.71 +            <xsd:complexType>
   15.72 +              <xsd:sequence>
   15.73 +                <xsd:element name="value" type="xsd:string" minOccurs="0" />
   15.74 +              </xsd:sequence>
   15.75 +              <xsd:attribute name="name" use="required" type="xsd:string" />
   15.76 +              <xsd:attribute name="type" type="xsd:string" />
   15.77 +              <xsd:attribute name="mimetype" type="xsd:string" />
   15.78 +              <xsd:attribute ref="xml:space" />
   15.79 +            </xsd:complexType>
   15.80 +          </xsd:element>
   15.81 +          <xsd:element name="assembly">
   15.82 +            <xsd:complexType>
   15.83 +              <xsd:attribute name="alias" type="xsd:string" />
   15.84 +              <xsd:attribute name="name" type="xsd:string" />
   15.85 +            </xsd:complexType>
   15.86 +          </xsd:element>
   15.87 +          <xsd:element name="data">
   15.88 +            <xsd:complexType>
   15.89 +              <xsd:sequence>
   15.90 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
   15.91 +                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
   15.92 +              </xsd:sequence>
   15.93 +              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
   15.94 +              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
   15.95 +              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
   15.96 +              <xsd:attribute ref="xml:space" />
   15.97 +            </xsd:complexType>
   15.98 +          </xsd:element>
   15.99 +          <xsd:element name="resheader">
  15.100 +            <xsd:complexType>
  15.101 +              <xsd:sequence>
  15.102 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
  15.103 +              </xsd:sequence>
  15.104 +              <xsd:attribute name="name" type="xsd:string" use="required" />
  15.105 +            </xsd:complexType>
  15.106 +          </xsd:element>
  15.107 +        </xsd:choice>
  15.108 +      </xsd:complexType>
  15.109 +    </xsd:element>
  15.110 +  </xsd:schema>
  15.111 +  <resheader name="resmimetype">
  15.112 +    <value>text/microsoft-resx</value>
  15.113 +  </resheader>
  15.114 +  <resheader name="version">
  15.115 +    <value>2.0</value>
  15.116 +  </resheader>
  15.117 +  <resheader name="reader">
  15.118 +    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  15.119 +  </resheader>
  15.120 +  <resheader name="writer">
  15.121 +    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  15.122 +  </resheader>
  15.123 +  <metadata name="undoMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  15.124 +    <value>17, 17</value>
  15.125 +  </metadata>
  15.126 +  <metadata name="redoMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  15.127 +    <value>122, 17</value>
  15.128 +  </metadata>
  15.129 +  <metadata name="buttonIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  15.130 +    <value>224, 17</value>
  15.131 +  </metadata>
  15.132 +  <data name="buttonIcons.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
  15.133 +    <value>
  15.134 +        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
  15.135 +        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
  15.136 +        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAM
  15.137 +        GQAAAk1TRnQBSQFMAgEBBwEAAQkBAAEEAQABEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA
  15.138 +        AwABIAMAAQEBAAEYBgABGBgAAQYBmgFOAQYBmgFOAQYBmgFOAQYBmgFOHgABawFwAW4BawFwAW4BawFw
  15.139 +        AW4BawFwAW4BawFwAW4BawFwAW4BawFwAW4BawFwAW4BawFwAW4BawFwAW4BawFwAW4BawFwAW4BawFw
  15.140 +        AW4BawFwAW4BawFwAW4BawFwAW5jAAEGAZoBTgEPAagBWgEsAdYBwAECAZkBmgEGAZoBTh4AAWsBcAFu
  15.141 +        Hv8DAAn/AWsBcAFuYwABBgGaAU4BIwHHAa8BBQGdAZEBBgGaAU4hAAFrAXABbgP/AbYBuAG3AbYBuAG3
  15.142 +        AbYBuAG3AbYBuAG3AbYBuAG3AbYBuAG3AbYBuAG3AbYBuAG3A/8DAAn/AWsBcAFuEgABpAFlATQBpAFl
  15.143 +        ATQBpAFlATQBpAFlATRFAAEGAZoBTgE6Ad0BuAEGAZoBTg8AAQYBmgFOAQYBmgFODwABawFwAW4D7wGt
  15.144 +        AbABrwGuAbACrgGwAa8BrQGwAa4BrQGwAa8BrQGwAa8BrQGwAa8BrQGwAa8B7wHuAe8DAAHuAe8B7gHv
  15.145 +        Au4B7wHuAe8BawFwAW4SAAGkAWUBNAHmAc4BtwHmAc4BtwGkAWUBNEUAAQYBmgFOATcB2QGzAQYBmgFO
  15.146 +        AQYBmgFODAABBgGaAU4BBgGaAU4BBgGaAU4MAAFrAXABbgPcAtsB3AHbBtwB2wHcAdsD3AHbBNwB2wHc
  15.147 +        AdsC3AHbAwAB2wTcAdsD3AFrAXABbhIAAaQBZQE0AeYBzgG3AdkBrQGGAaQBZQE0RQABBgGaAU4BRgHi
  15.148 +        Ab4BBQGmAZkBBgGaAU4BBgGaAU4BBgGaAU4GAAEGAZoBTgE0AeIBigEGAZoBTgEGAZoBTgkAAWsBcAFu
  15.149 +        AaEBpAGjAaEBpAGiAaEBpAGjAaEBpAGjAaEBpAGjAaEBpAGjAaEBpAGjAaEBpAGjAaEBpAGjAaEBpAGj
  15.150 +        AaEBpAGjAaEBpAGjAaEBpAGjAaEBpAGjAWsBcAFuEgABpAFlATQB5gHOAbcB2QGtAYYBpAFlATRFAAEK
  15.151 +        AZ0BUgFkAewBsgEkAdYBzQELAaEBkwEGAZoBTgEGAZoBTgEGAZoBTgEGAZoBTgEGAZoBTgEeAdQBzAE0
  15.152 +        AeIBigEGAZoBTgEGAZoBTgYAAWsBcAFuA/cD4wPuBvoByAHUAc4BjgFsAT8BiwFnATgBtAGuAZoD+gP8
  15.153 +        A+4D4wPwAWsBcAFuBgABpAFlATQBpAFlATQBpAFlATQBpAFlATQBpAFlATQB2QGtAYYB2QGtAYYBpAFl
  15.154 +        ATQBpAFlATQBpAFlATQBpAFlATQBpAFlATQ5AAEMAZ8BVQFjAekBsQExAeABugEXAdQBywEiAdYBmwEj
  15.155 +        AdoBoQEjAdoBoQEjAdoBoQEjAdoBoQEjAd4B2QEWAdIBcwE0AeIBigEGAZoBTgEGAZoBTgMAAWsBcAFu
  15.156 +        A/kD7gP6A+QBvwHLAcUBiwFnATgB4wHLAawB3AG/AZgBjwFrATsBrAGmAZID5AP6A+4D8QFrAXABbgYA
  15.157 +        AaQBZQE0AeUBzAG0AdsBtwGVAdsBtgGUAdoBtAGSAdoBswGQAdkBrQGGAdgBqgGDAdcBqAF/AdcBpgF9
  15.158 +        AeABvgGfAaQBZQE0OQABBgGaAU4BMAHCAZ0BYAHtAbEBJgHfAaUBGgHXAa8BGgHXAa8BCQHQAcgBFAHQ
  15.159 +        AXcBFgHSAXMBFgHSAXMBFgHSAXMBFgHSAXMBNAHiAYoBBgGaAU4BBgGaAU4BawFwAW4D+QP6A+QBvwHL
  15.160 +        AcUBiwFnATgB3AG/AZgBwAGfAXMBwAGfAXMB3wHIAasBiwFnATgBrAGmAZID5AP0A/EBawFwAW4GAAGk
  15.161 +        AWUBNAHoAdMBwAHnAdEBuwHnAdEBvAHmAc4BtwHmAc4BtwHmAc4BtwHmAc4BtwHmAc0BtgHmAcwBtQHm
  15.162 +        AcwBtgGkAWUBNDkAAQYBmgFOAQYBmgFOAUYB2AGpAWUB7wGxASQB3gGkASoB3QGXASQB2wGgASQB2wGg
  15.163 +        ARoB1wGvARYB0gFzARYB0gFzARYB0gFzARgB0wF1AWwB8wGuAQYBmgFOAWsBcAFuA/oB6gLpAcQBzwHK
  15.164 +        AYsBZwE4AdwBvwGYAb8BnwFxAb8BnwFxAb8BnwFxAcABnwFzAdgBuwGWAYsBZwE4Aa8BqQGVAeoB6QHq
  15.165 +        A/IBawFwAW4GAAGkAWUBNAGkAWUBNAGkAWUBNAGkAWUBNAGkAWUBNAHmAc4BtwHmAc4BtwGkAWUBNAGk
  15.166 +        AWUBNAGkAWUBNAGkAWUBNAGkAWUBNDwAAQYBmgFOAQYBmgFOAUUB2QGsAWcB7wGvAVAB6QGhASQB2wGg
  15.167 +        ASQB2wGgASQB2wGgASQB2wGgARYB0gFzARYB0gFzAWwB8wGuAQYBmgFOAQABhAF3AWsBcAFuAfwB+wH8
  15.168 +        AuwB6wGLAWcBOAGLAWcBOAGLAWcBOAGLAWcBOAHKAacBeQG9AZIBWAGLAWcBOAGLAWcBOAGLAWcBOAGL
  15.169 +        AWcBOAPsA/MBawFwAW4SAAGkAWUBNAHmAc4BtwHmAc4BtwGkAWUBNEsAAQYBmgFOAQYBmgFOAQwBmwGP
  15.170 +        AUkB3gGpAWoB8QGuAWsB8gGuAXMB9QGzAWEB7wGmARYB0gFzAWwB8wGuAQYBmgFOAQYBmgFOAwABawF1
  15.171 +        AXID/QPuA+0B3gHiAd8BsAGYAXcBiwFnATgBygGnAXkBzgGzAY8BjgFrAT0BwwG8AawB7gLtAu4C7QHu
  15.172 +        Ae0B8wH0AfMBawFwAW4SAAGkAWUBNAHmAc4BtwHmAc4BtwGkAWUBNFEAAQYBmgFOAQYBmgFOAQYBmgFO
  15.173 +        AQYBmgFOAQYBmgFOAWwB8wGuAWwB8wGuAQYBmgFOAQYBmgFOBgABbgFxAWsB3QHmAeID/wHWAeEC3QHW
  15.174 +        AckBtgGZAW4BiwFnATgB4gHLAasB0wG3AZIBmwF9AVQB5QHfAdUJ/wP0AWsBcAFuEgABpAFlATQB5gHO
  15.175 +        AbcB5gHOAbcBpAFlATRdAAEGAZoBTgFsAfMBrgEGAZoBTgEGAZoBTgkAAYgBfwFrAXMBcQFmAXUBcAFi
  15.176 +        AYUBbQFKAZoBdAFBAZ8BeAFEAdkBvwGeAesB2QHBAa8BhgFRAX0BagFOAWsBcAFuAWsBcAFuAWsBcAFu
  15.177 +        AWsBcAFuAWsBcAFuAWsBcAFuEgABpAFlATQBpAFlATQBpAFlATQBpAFlATRdAAEGAZoBTgEGAZoBTgEG
  15.178 +        AZoBTgwAAZIBcAFCAbsBlgFiAdEBrQGBAeYBzgGxAe8B3wHQAewB2wHFAd8BwgGbAaABiwFoAYgBbgFD
  15.179 +        AVoBfwFqjQABBgGaAU4BBgGaAU4PAAF3AYUBbAGRAXkBTQGLAWcBOAGLAWcBOAGLAWcBOAGLAWcBOAGK
  15.180 +        AWkBPQGAAXEBSgF6AXgBWKUAAWsBcAFuAWsBcAFuAWsBcAFuAWsBcAFuAWsBcAFuAWsBcAFuAWsBcAFu
  15.181 +        AWsBcAFuAWsBcAFuAWsBcAFuAWsBcAFuAWsBcAFuAWsBcAFuAWsBcAFuAWsBcAFuAWsBcAFuUQABGAGm
  15.182 +        AcMBGgGnAcQBAAGgAcQGAAOeJIEDngYAAWsBcAFuA90J3AbVFc8DygFrAXABbgGJAWABPgGkAWUBNAGk
  15.183 +        AWUBNAGkAWUBNAGkAWUBNAGkAWUBNAGkAWUBNAGkAWUBNAGkAWUBNAGkAWUBNAGkAWUBNAGkAWUBNAGk
  15.184 +        AWUBNAGkAWUBNAGGAWABPyUAAaABxAFmAdsB6gERAaYBwgYAA4Ek/wOBBgABawFwAW4DzQPDAakCqgO0
  15.185 +        A8IDxAPIA8sBqAGnAagD0QKnAagD0QK2AbcDygFrAXABbgFTAVcBVQGpAasBqQHXAa8BiQHNAZsBawHN
  15.186 +        AZoBawHNAZoBagHNAZkBaQHNAZgBaAHMAZgBZgHNAZgBZQHMAZcBZQHMAZYBZAHMAZUBYwHeAboBmgGW
  15.187 +        AXEBUwF5AV0BRSIAAaABxAFDAcQB2wFDAcUB2AEjAaYBwAMAA4ED/wbtA+4G7wbwA/EG8gP/A4EGAAFr
  15.188 +        AXABbgPOA8UDnwOvA7wDxAPIA9ADqQPSA6kD0gO5A8oBawFwAW4BUwFXAVUBvwLAAZsBdgFYAd0BuwGb
  15.189 +        Ac4BngFwAc8BnQFwAc4BnQFuAc4BnAFuAc4BnAFtAc4BmwFsAc0BmwFrAc4BmgFqAc0BmQFpAc0BmQFo
  15.190 +        AdsBtgGUAaQBZQE0EwABoAHEDwABDgGqAcsBXQHaAekBIwGmAcADAAOBA/8G7QbuA+8G8AbxA/ID/wOB
  15.191 +        BgABawFwAW4DzgzJA8UGyQ/FA9YBawFwAW4BUwFXAVUDyQGkAWUBNAHjAccBrQHXAbABiwHYAbEBjAHX
  15.192 +        AbABiwHXAa8BigHWAa4BiAHVAawBhQHUAakBgQHSAaYBfAHQAaIBdgHPAZ8BcgHdAbsBnAGkAWUBNBAA
  15.193 +        AaABxAEAAaABxA0AAZ4BwQECAawByAGIAecB8gERAaIBwgMAA4ED/wPsA+0G7gbvA/AJ8QP/A4EGAAFr
  15.194 +        AXABbgP+Ff8G9AbrA+MD8AFrAXABbgFTAVcBVQG/AsABpAFlATQB4wHHAa4B2AGxAYwB2AGxAYwB2AGx
  15.195 +        AYwB2AGxAYwB2AGxAYwB2AGxAYwB2AGxAYwB2AGxAYwB2AGxAYwB1gGuAYkB4AHCAaYBpAFlATQJAAEF
  15.196 +        AXkBfQEAAaABxAF2Ae0B+wEAAaABxAcAAaABxAEAAZkBuQEAAaABxAFtAeYB9QF2AeIB7wEZAaMBwQMA
  15.197 +        A4ED/wbsBu0G7gbvBvAD/wOBBgABawFwAW4D9wPjA+4G+gHIAdQBzgGOAWwBPwGLAWcBOAG0Aa4BmgP6
  15.198 +        A/wD7gPjA/ABawFwAW4BUwFXAVUDyQGkAWUBNAHrAdgBxgHoAdIBvgHoAdIBvgHoAdIBvgHoAdIBvgHo
  15.199 +        AdIBvgHoAdIBvgHoAdIBvgHoAdIBvgHoAdIBvgHoAdIBvgHrAdgBxgGkAWUBNAYAAQUBeQF9AQABoAHE
  15.200 +        AXYB7QH7AXYB7QH7AQABoAHEAQABoAHEAQABoAHEAQABoAHEAQEBqQHEAW4B4QHuAQ8ByQHfAWkB5AHy
  15.201 +        ARoBpAHAAwADgQP/BuwG7QbuCe8D8AP/A4EGAAFrAXABbgP5A+4D+gPkAb8BywHFAYsBZwE4AeMBywGs
  15.202 +        AdwBvwGYAY8BawE7AawBpgGSA+QD+gPuA/EBawFwAW4BUwFXAVUBvwLAAZoBegFhAaQBZQE0AaQBZQE0
  15.203 +        AaQBZQE0AaQBZQE0AaQBZQE0AaQBZQE0AaQBZQE0AaQBZQE0AaQBZQE0AaQBZQE0AaQBZQE0AaQBZQE0
  15.204 +        AZ0BawFDAwABBQF5AX0BAAGgAcQBdgHtAfsBBAHDAdoBdgHtAfsBaQHqAfkBaQHqAfkBaQHqAfkBaQHq
  15.205 +        AfkBBQHdAfcBCgHIAd8BBwHCAdgBbwHcAesBGwGjAb8DAAOBA/8D6wbsBu0G7gHiAu4BsQHwAfMBkgHw
  15.206 +        AfUBmgHwAfUBdwKWBgABawFwAW4D+QP6A+QBvwHLAcUBiwFnATgB3AG/AZgBwAGfAXMBwAGfAXMB3wHI
  15.207 +        AasBiwFnATgBrAGmAZID5AP0A/EBawFwAW4BVwFbAVkDyQamAaQBqQGnA/8B9AL1AcoCzAHKAswBygLM
  15.208 +        AdcC2AH0AvUB9AL1A/8BpAGpAacDAAEFAXkBfgEAAaABxAF5Ae0B+wEyAeIB+AEsAd8B9AEEAcAB1gEE
  15.209 +        AcAB1gEEAcAB1gEdAdIB6AEdAdIB6AEdAdIB6AELAcgB3wFqAeUB8wEbAasBxQEVAaABvAMAA4ED/wbr
  15.210 +        BuwG7QHgAe4B7wGWAe8B9AFjAfEB+AFGAfMB+wFFAfMB+wFdAe8B9wE2Ad0B5gMAAWsBcAFuA/oB6gLp
  15.211 +        AcQBzwHKAYsBZwE4AdwBvwGYAb8BnwFxAb8BnwFxAb8BnwFxAcABnwFzAdgBuwGWAYsBZwE4Aa8BqQGV
  15.212 +        AeoB6QHqA/IBawFwAW4BWwFfAV0BvwLAAZUBlwGWAZUBlwGWAaQBqQGnA/8B9AL1AfQC9QH0AvUB9AL1
  15.213 +        AfQC9QH0AvUB9AL1A/8BpAGpAacEAAGgAcQBrQHzAfsBLwHgAfYBMgHiAfgBMgHiAfcBMgHiAfcBLwHg
  15.214 +        AfUBKQHbAfEBHQHSAegBHQHSAegBHQHSAegBNgHZAewBQAHNAeEBFgGhAb0BBQF5AX0DAAOBA/8G6wns
  15.215 +        A+0BsQHuAfEBZwHxAfgBQAH0Af0BcQH3Af0BcgH3Af0BQwHzAfwBJAHsAfYBCgHzAf8BawFwAW4B/AH7
  15.216 +        AfwC7AHrAYsBZwE4AYsBZwE4AYsBZwE4AYsBZwE4AcoBpwF5Ab0BkgFYAYsBZwE4AYsBZwE4AYsBZwE4
  15.217 +        AYsBZwE4A+wD8wFrAXABbgFbAV8BXQPJBqYBpAGpAacD/wH0AvUBygLMAcoCzAHKAswBygLMAcoCzAH0
  15.218 +        AvUD/wGkAakBpwMAAQUBeQF9AQABoAHEAa0B8wH7AS8B4AH2ATIB4gH3ASkB2wHxAS8B4AH1ASkB2wHx
  15.219 +        ARYBzQHjATYB2QHsAWkB5wH2AUEBzgHjARMBowHBAQUBeQF9BgADgQP/A+oG6wnsAZsB7wHzAU4B8gH6
  15.220 +        AWoB9gH9AbsB+gH+Ab8B+wH+AW4B9gH9ASIB8AH6AQ0B8wH/AWsBdQFyA/0D7gPtAd4B4gHfAbABmAF3
  15.221 +        AYsBZwE4AcoBpwF5Ac4BswGPAY4BawE9AcMBvAGsAe4C7QLuAu0B7gHtAfMB9AHzAWsBcAFuAV8BYwFh
  15.222 +        Ab8CwAGVAZcBlgGVAZcBlgGkAakBpwP/AfQC9QH0AvUB9AL1AfQC9QH0AvUB9AL1AfQC9QP/AaQBqQGn
  15.223 +        BgABBQF5AX0BAAGgAcQBrQHzAfsBMQHhAfYBIAHjAfoBcwHsAfoBbwHrAfoBbgHoAfcBbAHoAfcBFAGh
  15.224 +        AbwBFAGjAcEBBQF5AX0JAAOBA/8G6gbrBuwBnAHuAfIBTgHyAfoBZwH2Af0BtQH6Af4BuAH6Af4BawH1
  15.225 +        Af0BIgHvAfoBDQHzAf8BbgFxAWsB3QHmAeID/wHWAeEC3QHWAckBtgGZAW4BiwFnATgB4gHLAasB0wG3
  15.226 +        AZIBmwF9AVQB5QHfAdUJ/wP0AWsBcAFuAWUBaQFnA8kGpgGkAakBpxv/AaQBqQGnCQABBQF5AX0BAAGg
  15.227 +        AcQBrQHzAfsBJQHkAfsBAAGgAcQBAAGgAcQBEwGhAb4BFQGfAbsBGwGhAbsBBgF6AXwMAAOBA/8D7Abq
  15.228 +        CesBtAHtAfABagHwAfcBOgH0AfwBaAH2Af0BagH2Af0BPAHyAfsBHgHvAfkBCQHzAf8BiAF/AWsBcwFx
  15.229 +        AWYBdQFwAWIBhQFtAUoBmgF0AUEBnwF4AUQB2QG/AZ4B6wHZAcEBrwGGAVEBfQFqAU4BawFwAW4BawFw
  15.230 +        AW4BawFwAW4BawFwAW4BawFwAW4BawFwAW4BaAFsAWoBvwLAAZUBlwGWAZUBlwGWAZgBnAGaAaQBqQGn
  15.231 +        AaQBqQGnAaQBqQGnAaQBqQGnAaQBqQGnAaQBqQGnAaQBqQGnAaQBqQGnAaQBqQGnAZIBmQGWDAABBQF5
  15.232 +        AX0BAAGgAcQBrQHzAfsBAAGgAcQbAAOBGP8BmwHuAfIBaQHwAfcBTQHyAfoBRgHvAfcBKAHrAfQBDQHz
  15.233 +        Af8DAAGSAXABQgG7AZYBYgHRAa0BgQHmAc4BsQHvAd8B0AHsAdsBxQHfAcIBmwGgAYsBaAGIAW4BQwFa
  15.234 +        AX8BahIAAWsBbwFtEs4BxQLGAWEBZQFjAVMBVwFVHwABnQG/AQABoAHEAQABoAHEGwADnhiBAXwCjAFy
  15.235 +        Ap8BagGuAa8BNgHkAe0BCQHzAf8BAgHzAf8DAAF3AYUBbAGRAXkBTQGLAWcBOAGLAWcBOAGLAWcBOAGL
  15.236 +        AWcBOAGKAWkBPQGAAXEBSgF6AXgBWBUAAVMBVwFVAWsBbwFtAWsBbwFtAWsBbwFtAWsBbwFtAWsBbwFt
  15.237 +        AWUBaQFnAWUBaQFnAV8BYgFhKAABoAHEGwABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEB
  15.238 +        FgAD/wEAAcMB/wIAAv8CAAGDAf8CAAL/AgABhwH/AgAB/AE/AgABjwGfAgAB/AE/AgABhwGPAgAB/AE/
  15.239 +        AgABgQGHAgAB/AE/AgABgAEDAgABwAEDAgABgAEBAgABwAEDAgABgAMAAcABAwIAAYADAAHAAQMCAAHA
  15.240 +        AwAB/AE/AgAB4AEBAgAB/AE/AgAB+AEDAgAB/AE/AgAB/wGHAgAB/AE/AgAB/wGPAQABPwL/AgAB/wGf
  15.241 +        AQABfwL/AgAC/wIAA/8B4wEAAQMDAAEBAf8B4wEAAQMEAAH/AeEBAAEDBAAB/QHxAQABAwQAAfkB4QEA
  15.242 +        AQMEAAHhAYEBAAEDBAABwAEBAQABAwQAAYABAQEAAQMDAAEBAQABAQEAAQEDAAEBAQABAQUAAQEBAAED
  15.243 +        BQABAQGAAQcFAAEBAcABDwUAAQEB4QH/AQABAQEAAT8BAAE/AfEB/wEAAQEBAAF/AQABfwH9Af8L
  15.244 +</value>
  15.245 +  </data>
  15.246 +  <metadata name="mainMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  15.247 +    <value>334, 17</value>
  15.248 +  </metadata>
  15.249 +  <metadata name="openArmyDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  15.250 +    <value>438, 17</value>
  15.251 +  </metadata>
  15.252 +  <metadata name="saveArmyDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  15.253 +    <value>573, 17</value>
  15.254 +  </metadata>
  15.255 +  <metadata name="statusBarTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  15.256 +    <value>707, 17</value>
  15.257 +  </metadata>
  15.258 +  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  15.259 +  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
  15.260 +    <value>
  15.261 +        AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABMLAAATCwAAAAAAAAAA
  15.262 +        AABOTk4jTVBP/4yQjv+Hi4n/VlpY/2JmZf95fnz/goeF/4WKiP+Fioj/hYqI/4WKiP+Fioj/VVhW/05O
  15.263 +        TgEAAAAATk5OIlVYV//T1tb/2N7c/7rAvf9+goD/XmBf/5mZmf+rq6v/sbGx/7Gxsf+ysrL/q6ur/3h8
  15.264 +        e/9MTEwXTk5OBU5OThFSVVT/a21s/8XJyP/W29n/zdTR/6mtq/9+f37/o6Oi/9LS0v/m5ub/6enp/5OT
  15.265 +        k/9FSEb/Ojs6iU5OTiBOTk4EfIF//8bGxv9ydHP/jJCO/8nNzP/V29r/wsjG/42Rj/9wcXD/tLS0/9XV
  15.266 +        1f9zdHT/kpaU/2ttbPozNDN6AAAAAIWKiP/5+fn/1dXV/5ydnf9gYWD/kJKP/8vPzf/R2NX/usC+/3x+
  15.267 +        ff+ZmZn/UFBQ/7S5t//AxML/VVdWrQAAAACFioj//////9nZ2f+pqan/m5ub/4ODgv9mZWT/pael/87T
  15.268 +        0f/K0c7/naGg/4CDgv/M0s//kZWU+0VGRYUAAAAAhYqI///////s7Oz/7Ozs/+rq6v/i4uL/ysrK/3Ny
  15.269 +        cf9gYF//tLe1/5yfnf+2u7n/vMHA/1tbWPg9PTqdAAAAAIWKiP//////29vb/7Gxsf+xsbH/sbGx/66u
  15.270 +        rv+kpKT/ioqK/2RjYf+QlJL/z9XT/4iLif9SUUz/VlRQzwAAAACFioj//////+zs7P/s7Oz/7Ozs/+zs
  15.271 +        7P/s7Oz/4uLi/6qqqv9sc3L/yc7L/6itqv9eYF3/dXd0/HR1cf8AAAAAhYqI///////b29v/sbGx/7Gx
  15.272 +        sf+xsbH/sbGx/6Wlpf9aW1r/rLCu/7G2tP9cXl7/XmJh/05OS+tQUE36AAAAAIWKiP//////7Ozs/+zs
  15.273 +        7P/s7Oz/7Ozs/+zs7P/l5eX/x8fH/3h3df9ERUP/kpKS/32BgP9OTk4uRkZFPgAAAACFioj/6+vr/wCg
  15.274 +        xP+8vLz/AKDE/7i4uP8AoMT/uLi4/wCdwP+pqan/AJGy/4CFg/+Fioj/Tk5OAU5OTgIAAAAAhYqI/wCg
  15.275 +        xP89sev/AKDE/z2x6/8AoMT/PbHr/wCgxP89sev/AKDE/z2x6/8AoMT/hYqI/wAAAAAAAAAAAAAAAAAA
  15.276 +        AAAAoMT/xuj5/wCgxP/G6Pn/AKDE/8bo+f8AoMT/xuj5/wCgxP/G6Pn/AKDE/wAAAAAAAAAAAAAAAAAA
  15.277 +        AAAAAAAAAAAAAACgxP8AAAAAAKDE/wAAAAAAoMT/AAAAAACgxP8AAAAAAKDE/wAAAAAAAAAAAAAAAAAA
  15.278 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  15.279 +        AAAAAAAAgAMAAIADAACAAQAAgAEAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIADAACAAwAAgAMAAMAH
  15.280 +        ///qr////////w==
  15.281 +</value>
  15.282 +  </data>
  15.283 +</root>
  15.284 \ No newline at end of file
    16.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.2 +++ b/FrmNewArmy.cs	Fri Dec 19 15:57:51 2008 +0000
    16.3 @@ -0,0 +1,238 @@
    16.4 +using System;
    16.5 +using System.Drawing;
    16.6 +using System.Collections;
    16.7 +using System.ComponentModel;
    16.8 +using System.Windows.Forms;
    16.9 +using IBBoard;
   16.10 +using IBBoard.Lang;
   16.11 +using IBBoard.Windows.Forms;
   16.12 +using IBBoard.WarFoundry.API;
   16.13 +
   16.14 +namespace IBBoard.WarFoundry
   16.15 +{
   16.16 +	/// <summary>
   16.17 +	/// Summary description for FrmNewArmy.
   16.18 +	/// </summary>
   16.19 +	public class FrmNewArmy : IBBForm
   16.20 +	{
   16.21 +		/// <summary>
   16.22 +		/// Required designer variable.
   16.23 +		/// </summary>
   16.24 +		private System.ComponentModel.Container components = null;
   16.25 +		private IBBoard.Windows.Forms.IBBButton bttnCancel;
   16.26 +		private IBBoard.Windows.Forms.IBBLabel lblRaceList;
   16.27 +		private IBBoard.Windows.Forms.IBBButton bttnSelectRace;
   16.28 +		private System.Windows.Forms.ListBox lstRaces;
   16.29 +		private Race[] races;
   16.30 +		private IBBoard.Windows.Forms.IBBLabel lblArmyName;
   16.31 +		private IBBoard.Windows.Forms.IBBLabel lblArmySize;
   16.32 +		private System.Windows.Forms.NumericUpDown armySize;
   16.33 +		private System.Windows.Forms.TextBox txtArmyName;
   16.34 +
   16.35 +		public FrmNewArmy(GameSystem system, WarFoundryFactory factory)
   16.36 +		{
   16.37 +			InitializeComponent();
   16.38 +
   16.39 +			Translation.TranslateControl(this);
   16.40 +
   16.41 +			races = factory.GetRaces(system);
   16.42 +			
   16.43 +			for (int i = 0; i<races.Length; i++)
   16.44 +			{
   16.45 +				lstRaces.Items.Add(races[i].Name);
   16.46 +			}
   16.47 +		}
   16.48 +
   16.49 +		/// <summary>
   16.50 +		/// Clean up any resources being used.
   16.51 +		/// </summary>
   16.52 +		protected override void Dispose( bool disposing )
   16.53 +		{
   16.54 +			if( disposing )
   16.55 +			{
   16.56 +				if(components != null)
   16.57 +				{
   16.58 +					components.Dispose();
   16.59 +				}
   16.60 +			}
   16.61 +			base.Dispose( disposing );
   16.62 +		}
   16.63 +
   16.64 +		#region Windows Form Designer generated code
   16.65 +		/// <summary>
   16.66 +		/// Required method for Designer support - do not modify
   16.67 +		/// the contents of this method with the code editor.
   16.68 +		/// </summary>
   16.69 +		private void InitializeComponent()
   16.70 +		{
   16.71 +			System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(FrmNewArmy));
   16.72 +			this.lstRaces = new System.Windows.Forms.ListBox();
   16.73 +			this.bttnCancel = new IBBoard.Windows.Forms.IBBButton();
   16.74 +			this.lblRaceList = new IBBoard.Windows.Forms.IBBLabel();
   16.75 +			this.bttnSelectRace = new IBBoard.Windows.Forms.IBBButton();
   16.76 +			this.lblArmyName = new IBBoard.Windows.Forms.IBBLabel();
   16.77 +			this.txtArmyName = new System.Windows.Forms.TextBox();
   16.78 +			this.lblArmySize = new IBBoard.Windows.Forms.IBBLabel();
   16.79 +			this.armySize = new System.Windows.Forms.NumericUpDown();
   16.80 +			((System.ComponentModel.ISupportInitialize)(this.armySize)).BeginInit();
   16.81 +			this.SuspendLayout();
   16.82 +			// 
   16.83 +			// lstRaces
   16.84 +			// 
   16.85 +			this.lstRaces.Location = new System.Drawing.Point(88, 8);
   16.86 +			this.lstRaces.Name = "lstRaces";
   16.87 +			this.lstRaces.Size = new System.Drawing.Size(272, 121);
   16.88 +			this.lstRaces.TabIndex = 7;
   16.89 +			this.lstRaces.SelectedIndexChanged += new System.EventHandler(this.lstRaces_SelectedIndexChanged);
   16.90 +			// 
   16.91 +			// bttnCancel
   16.92 +			// 
   16.93 +			this.bttnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
   16.94 +			this.bttnCancel.FlatStyle = System.Windows.Forms.FlatStyle.System;
   16.95 +			this.bttnCancel.Location = new System.Drawing.Point(8, 200);
   16.96 +			this.bttnCancel.Name = "bttnCancel";
   16.97 +			this.bttnCancel.Size = new System.Drawing.Size(80, 24);
   16.98 +			this.bttnCancel.TabIndex = 6;
   16.99 +			this.bttnCancel.Text = "Cancel";
  16.100 +			this.bttnCancel.Click += new System.EventHandler(this.bttnCancel_Click);
  16.101 +			// 
  16.102 +			// lblRaceList
  16.103 +			// 
  16.104 +			this.lblRaceList.Location = new System.Drawing.Point(0, 8);
  16.105 +			this.lblRaceList.Name = "lblRaceList";
  16.106 +			this.lblRaceList.Size = new System.Drawing.Size(88, 80);
  16.107 +			this.lblRaceList.TabIndex = 5;
  16.108 +			this.lblRaceList.Text = "race list";
  16.109 +			this.lblRaceList.TextAlign = System.Drawing.ContentAlignment.TopRight;
  16.110 +			// 
  16.111 +			// bttnSelectRace
  16.112 +			// 
  16.113 +			this.bttnSelectRace.Enabled = false;
  16.114 +			this.bttnSelectRace.FlatStyle = System.Windows.Forms.FlatStyle.System;
  16.115 +			this.bttnSelectRace.Location = new System.Drawing.Point(256, 200);
  16.116 +			this.bttnSelectRace.Name = "bttnSelectRace";
  16.117 +			this.bttnSelectRace.Size = new System.Drawing.Size(104, 24);
  16.118 +			this.bttnSelectRace.TabIndex = 4;
  16.119 +			this.bttnSelectRace.Text = "create race";
  16.120 +			this.bttnSelectRace.Click += new System.EventHandler(this.bttnSelectRace_Click);
  16.121 +			// 
  16.122 +			// lblArmyName
  16.123 +			// 
  16.124 +			this.lblArmyName.Location = new System.Drawing.Point(0, 136);
  16.125 +			this.lblArmyName.Name = "lblArmyName";
  16.126 +			this.lblArmyName.Size = new System.Drawing.Size(88, 32);
  16.127 +			this.lblArmyName.TabIndex = 8;
  16.128 +			this.lblArmyName.Text = "army name";
  16.129 +			this.lblArmyName.TextAlign = System.Drawing.ContentAlignment.TopRight;
  16.130 +			// 
  16.131 +			// txtArmyName
  16.132 +			// 
  16.133 +			this.txtArmyName.Location = new System.Drawing.Point(88, 136);
  16.134 +			this.txtArmyName.Name = "txtArmyName";
  16.135 +			this.txtArmyName.Size = new System.Drawing.Size(272, 20);
  16.136 +			this.txtArmyName.TabIndex = 9;
  16.137 +			this.txtArmyName.Text = "";
  16.138 +			this.txtArmyName.TextChanged += new System.EventHandler(this.txtArmyName_TextChanged);
  16.139 +			// 
  16.140 +			// lblArmySize
  16.141 +			// 
  16.142 +			this.lblArmySize.Location = new System.Drawing.Point(0, 168);
  16.143 +			this.lblArmySize.Name = "lblArmySize";
  16.144 +			this.lblArmySize.Size = new System.Drawing.Size(88, 32);
  16.145 +			this.lblArmySize.TabIndex = 10;
  16.146 +			this.lblArmySize.Text = "army size";
  16.147 +			this.lblArmySize.TextAlign = System.Drawing.ContentAlignment.TopRight;
  16.148 +			// 
  16.149 +			// armySize
  16.150 +			// 
  16.151 +			this.armySize.Increment = new System.Decimal(new int[] {
  16.152 +																	   50,
  16.153 +																	   0,
  16.154 +																	   0,
  16.155 +																	   0});
  16.156 +			this.armySize.Location = new System.Drawing.Point(88, 168);
  16.157 +			this.armySize.Maximum = new System.Decimal(new int[] {
  16.158 +																	 1000000,
  16.159 +																	 0,
  16.160 +																	 0,
  16.161 +																	 0});
  16.162 +			this.armySize.Name = "armySize";
  16.163 +			this.armySize.TabIndex = 11;
  16.164 +			this.armySize.ThousandsSeparator = true;
  16.165 +			this.armySize.Value = new System.Decimal(new int[] {
  16.166 +																   2000,
  16.167 +																   0,
  16.168 +																   0,
  16.169 +																   0});
  16.170 +			// 
  16.171 +			// FrmNewArmy
  16.172 +			// 
  16.173 +			this.AcceptButton = this.bttnSelectRace;
  16.174 +			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
  16.175 +			this.CancelButton = this.bttnCancel;
  16.176 +			this.ClientSize = new System.Drawing.Size(370, 228);
  16.177 +			this.Controls.Add(this.armySize);
  16.178 +			this.Controls.Add(this.lblArmySize);
  16.179 +			this.Controls.Add(this.txtArmyName);
  16.180 +			this.Controls.Add(this.lblArmyName);
  16.181 +			this.Controls.Add(this.bttnCancel);
  16.182 +			this.Controls.Add(this.lblRaceList);
  16.183 +			this.Controls.Add(this.bttnSelectRace);
  16.184 +			this.Controls.Add(this.lstRaces);
  16.185 +			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
  16.186 +			this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
  16.187 +			this.MaximizeBox = false;
  16.188 +			this.MinimizeBox = false;
  16.189 +			this.Name = "FrmNewArmy";
  16.190 +			this.ShowInTaskbar = false;
  16.191 +			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
  16.192 +			this.Text = "FrmNewArmy";
  16.193 +			((System.ComponentModel.ISupportInitialize)(this.armySize)).EndInit();
  16.194 +			this.ResumeLayout(false);
  16.195 +
  16.196 +		}
  16.197 +		#endregion
  16.198 +
  16.199 +		public Race SelectedRace
  16.200 +		{
  16.201 +			get { return races[lstRaces.SelectedIndex]; }
  16.202 +		}
  16.203 +
  16.204 +		public string ArmyName
  16.205 +		{
  16.206 +			get { return txtArmyName.Text; }
  16.207 +		}
  16.208 +
  16.209 +		public int ArmySize
  16.210 +		{
  16.211 +			get { return (int)armySize.Value; }
  16.212 +		}
  16.213 +
  16.214 +		private void bttnCancel_Click(object sender, System.EventArgs e)
  16.215 +		{
  16.216 +			DialogResult = DialogResult.Cancel;
  16.217 +			this.Close();
  16.218 +		}
  16.219 +
  16.220 +		private void bttnSelectRace_Click(object sender, System.EventArgs e)
  16.221 +		{
  16.222 +			DialogResult = DialogResult.OK;
  16.223 +			this.Close();
  16.224 +		}
  16.225 +
  16.226 +		private void txtArmyName_TextChanged(object sender, System.EventArgs e)
  16.227 +		{
  16.228 +			setSelectRaceEnabledVal();
  16.229 +		}
  16.230 +
  16.231 +		private void setSelectRaceEnabledVal()
  16.232 +		{
  16.233 +			bttnSelectRace.Enabled = (lstRaces.SelectedIndex>-1 && txtArmyName.Text.Trim()!="" && armySize.Value > 0);
  16.234 +		}
  16.235 +
  16.236 +		private void lstRaces_SelectedIndexChanged(object sender, System.EventArgs e)
  16.237 +		{
  16.238 +			setSelectRaceEnabledVal();
  16.239 +		}
  16.240 +	}
  16.241 +}
    17.1 Binary file FrmNewArmy.resources has changed
    18.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.2 +++ b/FrmNewArmy.resx	Fri Dec 19 15:57:51 2008 +0000
    18.3 @@ -0,0 +1,499 @@
    18.4 +<?xml version="1.0" encoding="utf-8"?>
    18.5 +<root>
    18.6 +  <!-- 
    18.7 +    Microsoft ResX Schema 
    18.8 +    
    18.9 +    Version 1.3
   18.10 +    
   18.11 +    The primary goals of this format is to allow a simple XML format 
   18.12 +    that is mostly human readable. The generation and parsing of the 
   18.13 +    various data types are done through the TypeConverter classes 
   18.14 +    associated with the data types.
   18.15 +    
   18.16 +    Example:
   18.17 +    
   18.18 +    ... ado.net/XML headers & schema ...
   18.19 +    <resheader name="resmimetype">text/microsoft-resx</resheader>
   18.20 +    <resheader name="version">1.3</resheader>
   18.21 +    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
   18.22 +    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
   18.23 +    <data name="Name1">this is my long string</data>
   18.24 +    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
   18.25 +    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
   18.26 +        [base64 mime encoded serialized .NET Framework object]
   18.27 +    </data>
   18.28 +    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
   18.29 +        [base64 mime encoded string representing a byte array form of the .NET Framework object]
   18.30 +    </data>
   18.31 +                
   18.32 +    There are any number of "resheader" rows that contain simple 
   18.33 +    name/value pairs.
   18.34 +    
   18.35 +    Each data row contains a name, and value. The row also contains a 
   18.36 +    type or mimetype. Type corresponds to a .NET class that support 
   18.37 +    text/value conversion through the TypeConverter architecture. 
   18.38 +    Classes that don't support this are serialized and stored with the 
   18.39 +    mimetype set.
   18.40 +    
   18.41 +    The mimetype is used forserialized objects, and tells the 
   18.42 +    ResXResourceReader how to depersist the object. This is currently not 
   18.43 +    extensible. For a given mimetype the value must be set accordingly:
   18.44 +    
   18.45 +    Note - application/x-microsoft.net.object.binary.base64 is the format 
   18.46 +    that the ResXResourceWriter will generate, however the reader can 
   18.47 +    read any of the formats listed below.
   18.48 +    
   18.49 +    mimetype: application/x-microsoft.net.object.binary.base64
   18.50 +    value   : The object must be serialized with 
   18.51 +            : System.Serialization.Formatters.Binary.BinaryFormatter
   18.52 +            : and then encoded with base64 encoding.
   18.53 +    
   18.54 +    mimetype: application/x-microsoft.net.object.soap.base64
   18.55 +    value   : The object must be serialized with 
   18.56 +            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
   18.57 +            : and then encoded with base64 encoding.
   18.58 +
   18.59 +    mimetype: application/x-microsoft.net.object.bytearray.base64
   18.60 +    value   : The object must be serialized into a byte array 
   18.61 +            : using a System.ComponentModel.TypeConverter
   18.62 +            : and then encoded with base64 encoding.
   18.63 +    -->
   18.64 +  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
   18.65 +    <xsd:element name="root" msdata:IsDataSet="true">
   18.66 +      <xsd:complexType>
   18.67 +        <xsd:choice maxOccurs="unbounded">
   18.68 +          <xsd:element name="data">
   18.69 +            <xsd:complexType>
   18.70 +              <xsd:sequence>
   18.71 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
   18.72 +                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
   18.73 +              </xsd:sequence>
   18.74 +              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
   18.75 +              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
   18.76 +              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
   18.77 +            </xsd:complexType>
   18.78 +          </xsd:element>
   18.79 +          <xsd:element name="resheader">
   18.80 +            <xsd:complexType>
   18.81 +              <xsd:sequence>
   18.82 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
   18.83 +              </xsd:sequence>
   18.84 +              <xsd:attribute name="name" type="xsd:string" use="required" />
   18.85 +            </xsd:complexType>
   18.86 +          </xsd:element>
   18.87 +        </xsd:choice>
   18.88 +      </xsd:complexType>
   18.89 +    </xsd:element>
   18.90 +  </xsd:schema>
   18.91 +  <resheader name="resmimetype">
   18.92 +    <value>text/microsoft-resx</value>
   18.93 +  </resheader>
   18.94 +  <resheader name="version">
   18.95 +    <value>1.3</value>
   18.96 +  </resheader>
   18.97 +  <resheader name="reader">
   18.98 +    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   18.99 +  </resheader>
  18.100 +  <resheader name="writer">
  18.101 +    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  18.102 +  </resheader>
  18.103 +  <data name="lstRaces.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.104 +    <value>Private</value>
  18.105 +  </data>
  18.106 +  <data name="lstRaces.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.107 +    <value>False</value>
  18.108 +  </data>
  18.109 +  <data name="lstRaces.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.110 +    <value>Private</value>
  18.111 +  </data>
  18.112 +  <data name="bttnCancel.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.113 +    <value>False</value>
  18.114 +  </data>
  18.115 +  <data name="bttnCancel.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.116 +    <value>Private</value>
  18.117 +  </data>
  18.118 +  <data name="bttnCancel.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.119 +    <value>Private</value>
  18.120 +  </data>
  18.121 +  <data name="lblRaceList.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.122 +    <value>False</value>
  18.123 +  </data>
  18.124 +  <data name="lblRaceList.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.125 +    <value>Private</value>
  18.126 +  </data>
  18.127 +  <data name="lblRaceList.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.128 +    <value>Private</value>
  18.129 +  </data>
  18.130 +  <data name="bttnSelectRace.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.131 +    <value>False</value>
  18.132 +  </data>
  18.133 +  <data name="bttnSelectRace.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.134 +    <value>Private</value>
  18.135 +  </data>
  18.136 +  <data name="bttnSelectRace.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.137 +    <value>Private</value>
  18.138 +  </data>
  18.139 +  <data name="lblArmyName.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.140 +    <value>False</value>
  18.141 +  </data>
  18.142 +  <data name="lblArmyName.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.143 +    <value>Private</value>
  18.144 +  </data>
  18.145 +  <data name="lblArmyName.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.146 +    <value>Private</value>
  18.147 +  </data>
  18.148 +  <data name="txtArmyName.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.149 +    <value>Private</value>
  18.150 +  </data>
  18.151 +  <data name="txtArmyName.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.152 +    <value>False</value>
  18.153 +  </data>
  18.154 +  <data name="txtArmyName.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.155 +    <value>Private</value>
  18.156 +  </data>
  18.157 +  <data name="lblArmySize.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.158 +    <value>False</value>
  18.159 +  </data>
  18.160 +  <data name="lblArmySize.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.161 +    <value>Private</value>
  18.162 +  </data>
  18.163 +  <data name="lblArmySize.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.164 +    <value>Private</value>
  18.165 +  </data>
  18.166 +  <data name="armySize.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.167 +    <value>False</value>
  18.168 +  </data>
  18.169 +  <data name="armySize.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.170 +    <value>Private</value>
  18.171 +  </data>
  18.172 +  <data name="armySize.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.173 +    <value>Private</value>
  18.174 +  </data>
  18.175 +  <data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.176 +    <value>False</value>
  18.177 +  </data>
  18.178 +  <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.179 +    <value>(Default)</value>
  18.180 +  </data>
  18.181 +  <data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.182 +    <value>False</value>
  18.183 +  </data>
  18.184 +  <data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.185 +    <value>False</value>
  18.186 +  </data>
  18.187 +  <data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  18.188 +    <value>8, 8</value>
  18.189 +  </data>
  18.190 +  <data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.191 +    <value>True</value>
  18.192 +  </data>
  18.193 +  <data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.194 +    <value>80</value>
  18.195 +  </data>
  18.196 +  <data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.197 +    <value>True</value>
  18.198 +  </data>
  18.199 +  <data name="$this.Name">
  18.200 +    <value>FrmNewArmy</value>
  18.201 +  </data>
  18.202 +  <data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  18.203 +    <value>Private</value>
  18.204 +  </data>
  18.205 +  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" mimetype="application/x-microsoft.net.object.bytearray.base64">
  18.206 +    <value>
  18.207 +        AAABAAQAEBAAAAEAIABoBAAARgAAABgYAAABACAAiAkAAK4EAAAgIAAAAQAgAKgQAAA2DgAAMDAAAAEA
  18.208 +        IACoJQAA3h4AACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.209 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnp6eo4GB
  18.210 +        gf+BgYH/gYGB/4GBgf+BgYH/gYGB/4GBgf+BgYH/gYGB/4GBgf+BgYH/gYGB/56enpUAAAAAAAAAAIGB
  18.211 +        gf////////////////////////////////////////////////////////////////+BgYH/AAAAAAAA
  18.212 +        AACBgYH//////+3t7f/t7e3/7u7u/+/v7//v7+//8PDw//Dw8P/x8fH/8vLy//Ly8v//////gYGB/wAA
  18.213 +        AAAAAAAAgYGB///////t7e3/7e3t/+7u7v/u7u7/7+/v//Dw8P/w8PD/8fHx//Hx8f/y8vL//////4GB
  18.214 +        gf8AAAAAAAAAAIGBgf//////7Ozs/+3t7f/u7u7/7u7u/+/v7//v7+//8PDw//Hx8f/x8fH/8fHx////
  18.215 +        //+BgYH/AAAAAAAAAACBgYH//////+zs7P/s7Oz/7e3t/+3t7f/u7u7/7u7u/+/v7//v7+//8PDw//Dw
  18.216 +        8P//////gYGB/wAAAAAAAAAAgYGB///////s7Oz/7Ozs/+3t7f/t7e3/7u7u/+7u7v/v7+//7+/v/+/v
  18.217 +        7//w8PD//////4GBgf8AAAAAAAAAAIGBgf//////6+vr/+zs7P/s7Oz/7e3t/+3t7f/u7u7/7u7u/+Lu
  18.218 +        7v+x8PP/kvD1/5rw9f93lpb/AAAAAAAAAACBgYH//////+vr6//r6+v/7Ozs/+zs7P/t7e3/7e3t/+Du
  18.219 +        7/+W7/T/Y/H4/0bz+/9F8/v/Xe/3/Tbd5nYAAAABgYGB///////r6+v/6+vr/+zs7P/s7Oz/7Ozs/+3t
  18.220 +        7f+x7vH/Z/H4/0D0/f9x9/3/cvf9/0Pz/P4k7Pa2CvP/JYGBgf//////6urq/+vr6//r6+v/7Ozs/+zs
  18.221 +        7P/s7Oz/m+/z/07y+v9q9v3/u/r+/7/7/v9u9v3/IvD60g3z/1CBgYH//////+rq6v/q6ur/6+vr/+vr
  18.222 +        6//s7Oz/7Ozs/5zu8v9O8vr/Z/b9/7X6/v+4+v7/a/X9/yLv+tEN8/9cgYGB///////s7Oz/6urq/+rq
  18.223 +        6v/r6+v/6+vr/+vr6/+07fD/avD3/zr0/P9o9v3/avb9/zzy+/0e7/mpCfP/N4GBgf//////////////
  18.224 +        /////////////////////////////5vu8v9p8Pf/TfL6/0bv9/oo6/S2DfP/YQAAAAmenp6jgYGB/4GB
  18.225 +        gf+BgYH/gYGB/4GBgf+BgYH/gYGB/4GBgf98jIz/cp+f/2qur/825O2KCfP/RQLz/w8AAAAA//8AAAAD
  18.226 +        AAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAACgA
  18.227 +        AAAYAAAAMAAAAAEAIAAAAAAAYAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.228 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.229 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAA
  18.230 +        AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.231 +        AACDiIaDhYqI/4WKiP+Fioj/hYqI/4WKiP+Fioj/hYqI/4WKiP+Fioj/hYqI/4WKiP+Fioj/hYqI/4WK
  18.232 +        iP+Fioj/hYqI/2tubWEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFioj/////////////////////////
  18.233 +        /////////////////////////////////////////////////////////////4WKiP8AAAAAAAAAAAAA
  18.234 +        AAAAAAAAAAAAAAAAAACFioj//////+jo6P/r6+v/6+vr/+7v7v/v7+//8PDw//Hw8f/y8fH/8vLy//Lz
  18.235 +        8//z9PT/9PT0//T19f/29vX//////4WKiP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFioj//////+jo
  18.236 +        6P/r6+v/6+vr/+7u7f/v7u7/7+/v/+/v7//w8fD/8fHx//Lx8v/y8/L/8/Tz//Tz9P/19PX//////4WK
  18.237 +        iP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFioj//////+jo6P/q6ur/6+vr/+3s7P/t7e3/7e7u/+/u
  18.238 +        7v/w8O//8PDw//Hx8P/x8vL/8vLy//Py8//09PP//////4WKiP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.239 +        AACFioj//////+jo6P/q6ur/6+vr/+vr7P/s7Oz/7e3s/+7u7v/u7u7/7+7u//Dw8P/x8fH/8fHx//Ly
  18.240 +        8v/z8/L//////4WKiP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFioj//////+fn5///////6+vr/+rq
  18.241 +        6//r6+v/7Ozs/+3s7f/t7u3/7u7u/+/u7//v8PD/8PDw//Hx8f/y8fH//////4WKiP8AAAAAAAAAAAAA
  18.242 +        AAAAAAAAAAAAAAAAAACFioj//////62vrv/p6en/6urq/+np6f/q6er/6+rr/+vs6//s7Oz/7e3t/+3u
  18.243 +        7v/u7u7/7+/v//Dw8P/w8fD//////4WKiP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFioj//////+bm
  18.244 +        5v/p6en/6enp/+jo6f/p6On/6unq/+rq6//r7Oz/7Ozs/+3t7f/u7e3/7u7u/+7u7//v8PD//////4WK
  18.245 +        iP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFioj//////+bm5v/o6Oj/6enp/+fn5//n6Oj/6Onp/+np
  18.246 +        6f/q6ur/6+vr/+vr6//s7Oz/7e3s/+7u7f/u7u///////4WKiP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.247 +        AACFioj//////+Xl5f/n5+f/6Ojo/+fm5//n5+f/6Ofo/+np6P/p6en/6urq/+vr6v/r6+v/6+zs/+3s
  18.248 +        7P/t7e3//////4WKiP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFioj//////+Tk5P//////5+fn/+Xm
  18.249 +        5f/l5ub/5ufn/+jn5//o6Oj/6eno/+np6f/q6ur/6+vr/+zs7P/t7O3//////4WKiP8AAAAAAAAAAAAA
  18.250 +        AAAAAAAAAAAAAAAAAACFioj//////6yvrf/m5ub/5ubm/+Tk5P/l5OT/5ubm/+bm5v/n5+f/6Ofn/+no
  18.251 +        6P/q6en/6urq/+rr6v/s7Oz//////4SKiP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFioj//////+Li
  18.252 +        4v/m5ub/5eXl/+Pj4//k4+T/5OTk/+Xl5f/m5ub/5+bm/+jo5//o6Oj/5+np/9/p6//O6e3/0/n+/3+U
  18.253 +        lP9P6fwKAAAAAQAAAAAAAAAAAAAAAAAAAACFioj//////+Hh4f/k5OT/5OTk/+Li4v/i4+P/5OPj/+Tk
  18.254 +        5P/l5eX/5ubl/+bm5//i5+f/zOjq/6To8P+C6fX/je76/2nByv9P6fw4T+n8DgAAAAAAAAAAAAAAAAAA
  18.255 +        AACFioj//////+Dg4P/j4+P/4uLi/+Hh4f/h4uH/4uLi/+Pj4//k5OT/5OXl/+Pl5f/K5+n/k+jy/4Dp
  18.256 +        9v+37/X/3vP2/4Xk7P9R6fuUT+n8KAAAAAAAAAAAAAAAAAAAAACFioj//////9/f3//i4uL/4eHh/+Hh
  18.257 +        4f/h4eH/4eHi/+Li4v/j4uP/5OPj/+Dk5P+95uv/fuj0/6Lt9f/z9PX/9fX2/7vs8v9c6vrBT+n8OgAA
  18.258 +        AAAAAAAAAAAAAAAAAACFioj//////97e3v/h4eH/4ODg/+Hh4f/i4uL/4uLi/+Pj4//k5OT/5OTk/+Pk
  18.259 +        5P/J5en/hefz/47s9v/h8vX/8/X2/7Ts8v9f6vq3T+n8KwAAAAAAAAAAAAAAAAAAAACFioj/////////
  18.260 +        ///////////////////////////////////////////////////6/v7/0Pn+/47v/P+O7vf/mO72/2/Y
  18.261 +        5P9S6fteAAAABwAAAAAAAAAAAAAAAAAAAACFioiChYqI/4WKiP+Fioj/hYqI/4WKiP+Fioj/hYqI/4WK
  18.262 +        iP+Fioj/hYqI/4WKiP+Fioj/g4uK/3ubnf9vsLb/brK5/3Cssp9P6fwKAAAAAAAAAAAAAAAAAAAAAAAA
  18.263 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.264 +        AAEAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.265 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.266 +        AAD///8A////AOAABwDgAAcA4AAHAOAABwDgAAcA4AAHAOAABwDgAAcA4AAHAOAABwDgAAcA4AAHAOAA
  18.267 +        BwDgAAMA4AABAOAAAQDgAAEA4AABAOAAAwDgAAMA////AP///wAoAAAAIAAAAEAAAAABACAAAAAAAIAQ
  18.268 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAPAAAAFgAAABcAAAAXAAAAFwAA
  18.269 +        ABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAA
  18.270 +        ABQAAAAPAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAdAAAAMAAAAEAAAABHAAAASgAA
  18.271 +        AEoAAABKAAAASgAAAEoAAABKAAAASgAAAEoAAABKAAAASgAAAEoAAABKAAAASgAAAEoAAABKAAAASgAA
  18.272 +        AEoAAABKAAAAQgAAAEYAAAA7AAAAKQAAAAwAAAAAAAAAAAAAAAAAAAAAAAAADQAAACM3Nzd4V1dX9lhY
  18.273 +        WP9YWFj/WFhY/1hYWP9YWFj/WFhY/1hYWP9YWFj/WFhY/1hYWP9YWFj/WFhY/1hYWP9YWFj/WFhY/1hY
  18.274 +        WP9YWFj/WFhY/1hYWP9YWFj/WFhY9zMzM4EAAAAxAAAAGwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADlNT
  18.275 +        U/H4+Pj/9vb2//f39//09PT/+Pj4//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3
  18.276 +        9//39/f/9/f3//f39//39/f/9/f3//f39//4+Pj/UlJS8gAAABgAAAAHAAAAAAAAAAAAAAAAAAAAAAAA
  18.277 +        AAAAAAAAUVFR//n5+f/o6Oj/6enp/+Xl5f/v7+//7Ozs/+3t7f/u7u7/7+/v//Dw8P/y8vL/8/Pz//T0
  18.278 +        9P/19fX/9vb2//f39//39/f/9/f3//f39//29vb/9fX1//j4+P9MTEz/AAAAAAAAAAAAAAAAAAAAAAAA
  18.279 +        AAAAAAAAAAAAAAAAAABUVFT/+fn5/+jo6P/p6en/5eXl/+/v7//s7Oz/7e3t/+7u7v/w8PD/8fHx//Ly
  18.280 +        8v/z8/P/9PT0//X19f/29vb/9/f3//j4+P/4+Pj/+Pj4//f39//29vb/+Pj4/0xMTP8AAAAAAAAAAAAA
  18.281 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdXV//5+fn/6Ojo/+np6f/l5eX/7+/v/+zs7P/t7e3/7u7u//Dw
  18.282 +        8P/x8fH/8vLy//Pz8//09PT/9fX1//f39//4+Pj/+fn5//n5+f/4+Pj/9/f3//b29v/4+Pj/TExM/wAA
  18.283 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWlpa//n5+f/o6Oj/6enp/+Xl5f/v7+//7Ozs/+3t
  18.284 +        7f/u7u7/8PDw//Hx8f/y8vL/8/Pz//T09P/19fX/9/f3//j4+P/5+fn/+fn5//j4+P/39/f/9vb2//j4
  18.285 +        +P9MTEz/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeXl7/+vr6/+jo6P/p6en/5eXl/+/v
  18.286 +        7//s7Oz/7e3t/+7u7v/w8PD/8fHx//Ly8v/z8/P/9PT0//X19f/29vb/9/f3//j4+P/4+Pj/9/f3//f3
  18.287 +        9//19fX/+Pj4/0xMTP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGFhYf/6+vr/6Ojo/+np
  18.288 +        6f/l5eX/7+/v/+zs7P/t7e3/7u7u/+/v7//w8PD/8fHx//Pz8//09PT/9fX1//b29v/29vb/9/f3//f3
  18.289 +        9//39/f/9vb2//X19f/4+Pj/TExM/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGRk//r6
  18.290 +        +v/n5+f/6+vr/+Xl5f/u7u7/7Ozs/+3t7f/u7u7/7+/v//Dw8P/x8fH/8vLy//Pz8//09PT/9fX1//X1
  18.291 +        9f/29vb/9vb2//b29v/19fX/9PT0//j4+P9MTEz/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.292 +        AABoaGj/+/v7/+fn5/+ysrL/5ubm/+7u7v/r6+v/7Ozs/+3t7f/u7u7/8PDw//Hx8f/x8fH/8vLy//Pz
  18.293 +        8//09PT/9PT0//X19f/19fX/9fX1//T09P/z8/P/+Pj4/0xMTP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.294 +        AAAAAAAAAAAAAGtra//7+/v/5+fn/+jo6P/k5OT/7u7u/+vr6//s7Oz/7e3t/+7u7v/v7+//8PDw//Hx
  18.295 +        8f/y8vL/8vLy//Pz8//z8/P/9PT0//T09P/z8/P/8/Pz//Pz8//4+Pj/TExM/wAAAAAAAAAAAAAAAAAA
  18.296 +        AAAAAAAAAAAAAAAAAAAAAAAAbm5u//v7+//m5ub/5+fn/+Tk5P/u7u7/6urq/+vr6//s7Oz/7e3t/+7u
  18.297 +        7v/v7+//8PDw//Hx8f/x8fH/8vLy//Ly8v/z8/P/8/Pz//Ly8v/y8vL/8vLy//j4+P9OTk7/AAAAAAAA
  18.298 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABycnL/+/v7/+bm5v/n5+f/4+Pj/+3t7f/q6ur/6+vr/+zs
  18.299 +        7P/t7e3/7u7u/+7u7v/v7+//8PDw//Dw8P/x8fH/8fHx//Ly8v/y8vL/8fHx//Hx8f/x8fH/+Pj4/1BQ
  18.300 +        UP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHV1df/8/Pz/5ubm/+fn5//j4+P/7e3t/+rq
  18.301 +        6v/q6ur/6+vr/+zs7P/t7e3/7u7u/+7u7v/v7+//8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw
  18.302 +        8P/4+Pj/UVFR/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHh4//z8/P/l5eX/5ubm/+Li
  18.303 +        4v/t7e3/6enp/+rq6v/q6ur/6+vr/+zs7P/t7e3/7e3t/+7u7v/v7+//7+/v/+/v7//v7+//7+/v/+/v
  18.304 +        7//v7+//7+/v//n5+f9TU1P/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7e3v//Pz8/+Tk
  18.305 +        5P/l5eX/4eHh/+zs7P/o6Oj/6enp/+rq6v/q6ur/6+vr/+zs7P/t7e3/7e3t/+7u7v/u7u7/7u7u/+vu
  18.306 +        7v/a7/D/xPDx/7jv8v++8PL/1/n6/1FcXf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5+
  18.307 +        fv/8/Pz/5OTk/+Xl5f/h4eH/7Ozs/+jo6P/o6Oj/6enp/+rq6v/q6ur/6+vr/+zs7P/s7Oz/7e3t/+3t
  18.308 +        7f/a7e7/t+7x/57v8/+O8PX/hfD1/4Xw9f+V9/z/PI2R/wv0/zAAAAADAAAAAAAAAAAAAAAAAAAAAAAA
  18.309 +        AAAAAAAAgYGB//39/f/j4+P/5+fn/+Hh4f/r6+v/5+fn/+jo6P/o6Oj/6enp/+rq6v/q6ur/6+vr/+vr
  18.310 +        6//s7Oz/2O3u/63u8f+N7/T/c/H3/2Dy+f9X8fn/V/H5/2X2/f8ysLb/DvP/bQjz/z8AAAADAAAAAAAA
  18.311 +        AAAAAAAAAAAAAAAAAACEhIT//f39/+Pj4/+xsbH/4eHh/+rq6v/m5ub/5+fn/+jo6P/o6Oj/6enp/+np
  18.312 +        6f/q6ur/6urq/+Tr6/+27fD/je/0/2jw9/9M8vr/OPP9/0H0/f9B9P3/OfT+/yrP1/8V8/+bDvP/bQv0
  18.313 +        /zAAAAAAAAAAAAAAAAAAAAAAAAAAAIeHh//9/f3/4uLi/+Pj4//g4OD/6urq/+Xl5f/m5ub/5+fn/+fn
  18.314 +        5//o6Oj/6Ojo/+np6f/p6en/zevt/5zt8f9y8Pb/TPL6/0H0/f9f9v3/cff9/3H3/f9g9/7/MuXu/xz0
  18.315 +        /8IU9P+ODPP/WADo/wsAAAAAAAAAAAAAAAAAAAAAioqK//39/f/h4eH/4uLi/9/f3//q6ur/5OTk/+Xl
  18.316 +        5f/m5ub/5ubm/+fn5//n5+f/6Ojo/+jo6P+76+3/i+3y/17w9/838vz/X/b9/4j4/v+k+f7/pPn+/4n5
  18.317 +        //9S6vH/H/T/4Bf0/6cO8/9tB/j/IwAAAAAAAAAAAAAAAAAAAACNjY3//f39/+Dg4P/h4eH/3t7e/+np
  18.318 +        6f/k5OT/5OTk/+Xl5f/l5eX/5ubm/+fn5//n5+f/5+fn/7Pq7f+D7vP/VvD4/0H0/f9x9/3/pPn+/9b8
  18.319 +        /v/V/P7/pPr//2bs8v8t9f/kGvT/tA/0/3cK9f81AAAAAAAAAAAAAAAAAAAAAI+Pj//+/v7/4ODg/+Dg
  18.320 +        4P/d3d3/6Ojo/+Pj4//j4+P/5OTk/+Xl5f/l5eX/5ubm/+bm5v/m5ub/s+rt/4Lt8v9W8Pj/QPP8/3H3
  18.321 +        /f+k+f7/1fz+/9X8/v+k+v//Zuzy/y31/+Qa9P+0D/T/dwny/zoAAAAAAAAAAAAAAAAAAAAAkZGR//7+
  18.322 +        /v/f39//4ODg/9zc3P/n5+f/4uLi/+Li4v/j4+P/5OTk/+Tk5P/l5eX/5eXl/+Xl5f+56ev/iuzx/17v
  18.323 +        9v838vz/X/b9/4f3/f+j+f7/o/n+/4j5//9S6vH/H/T/3xf0/6YO8/9tBvT/LQAAAAAAAAAAAAAAAAAA
  18.324 +        AACTk5P//v7+/97e3v/f39//3Nzc/+bm5v/h4eH/4uLi/+Li4v/j4+P/4+Pj/+Tk5P/k5OT/5OTk/8fl
  18.325 +        5/+Z6u7/cO70/0zx+f9A8/z/Xvb9/3H3/f9x9/3/X/f+/zLl7v8c9P/CFPT/jgzz/1gM8/8WAAAAAAAA
  18.326 +        AAAAAAAAAAAAAJSUlP/+/v7/3d3d/97e3v/b29v/5ubm/+Dg4P/h4eH/4eHh/+Li4v/i4uL/4+Pj/+Pj
  18.327 +        4//j4+P/3eTk/7Dn6v+J6/D/Zu30/0zx+f838vz/QPP8/0Dz/P869P7/K9DY/xbz/5oO8/9tCfL/OwAA
  18.328 +        AAIAAAAAAAAAAAAAAAAAAAAAmJiY7/39/f/+/v7//v7+//r6+v/+/v7//v7+//39/f/9/f3//f39//39
  18.329 +        /f/8/Pz//Pz8//z8/P/7+/v/4/r7/7n5/P+W+P3/evf9/2X2/f9c9v7/W/X9/2b2/f81trz4DvP/bQf0
  18.330 +        /0UA//8SAAAAAAAAAAAAAAAAAAAAAAAAAACVlZVSmpqa8pubm/+dnZ3/n5+f/52dnf+bm5v/l5eX/5SU
  18.331 +        lP+QkJD/jY2N/4mJif+Ghob/goKC/35+fv97e3v/bIOE/1uSlf9NnaH/RKar/z+qr/89qK3/QKWq+Cu7
  18.332 +        wo4J8v87APP/FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.333 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwjv/yAF9f8yCfL/Owny
  18.334 +        /zsF9f8yCO//IAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.335 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.336 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAB/gAAADwAAAA+AAAAfwAAAP8AAAD/AA
  18.337 +        AA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAfwAAAD8AAAAfAA
  18.338 +        AADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAAHwAAAB8AAAA////A//////KAAAADAAAABgAAAAAQAgAAAA
  18.339 +        AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA
  18.340 +        AAIAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
  18.341 +        AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAABAAA
  18.342 +        AAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADQAA
  18.343 +        ABoAAAAiAAAAJwAAAB8AAAAeAAAAHgAAAB4AAAAeAAAAHgAAAB4AAAAeAAAAHgAAAB4AAAAeAAAAHgAA
  18.344 +        AB4AAAAeAAAAHgAAAB4AAAAeAAAAHgAAAB4AAAAeAAAAHgAAAB4AAAAeAAAAHgAAAB4AAAAeAAAAHgAA
  18.345 +        AB4AAAAeAAAAJgAAACgAAAAlAAAAGwAAAA8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.346 +        AAgAAAAWAAAAIwAAADAICAhAEBAQTxEREUcSEhJGEhISRhISEkYSEhJGEhISRhISEkYSEhJGEhISRhIS
  18.347 +        EkYSEhJGEhISRhISEkYSEhJGEhISRhISEkYSEhJGEhISRhISEkYSEhJGEhISRhISEkYSEhJGEhISRhIS
  18.348 +        EkYSEhJGEhISRhISEkYSEhJGEBAQTQ8PD1IHBwdGAAAANgAAACoAAAAdAAAACgAAAAAAAAAAAAAAAAAA
  18.349 +        AAAAAAAAAAAAAAAAAA4AAAAcAAAAKzw8PIdRUVH5VVVV+lVVVfpVVVX6VVVV+lVVVfpVVVX6VVVV+lVV
  18.350 +        VfpVVVX6VVVV+lVVVfpVVVX6VVVV+lZWVvpWVlb6VlZW+lZWVvpWVlb6VlZW+lZWVvpWVlb6VlZW+lZW
  18.351 +        VvpWVlb6VlZW+lZWVvpWVlb6VlZW+lZWVvpWVlb6VlZW+lZWVvtQUFD6QkJCmgAAADIAAAAkAAAAFQAA
  18.352 +        AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAXAAAAJFJSUurq6ur/+Pj4//j4+P/4+Pj/9vb2//j4
  18.353 +        +P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4
  18.354 +        +P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/z8/P/UFBQ9gAA
  18.355 +        ACsAAAAeAAAAEAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAE1NTU/Pz8/P/6urq/+fn
  18.356 +        5//o6Oj/5eXl/+7u7v/q6ur/6+vr/+zs7P/t7e3/7e3t/+7u7v/v7+//7+/v//Dw8P/x8fH/8fHx//Ly
  18.357 +        8v/z8/P/9PT0//T09P/19fX/9fX1//b29v/29vb/9vb2//b29v/29vb/9vb2//X19f/19fX/9PT0//T0
  18.358 +        9P/39/f/Tk5O/AAAABgAAAAOAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFVV
  18.359 +        VfH09PT/6urq/+fn5//o6Oj/5eXl/+7u7v/q6ur/6+vr/+zs7P/t7e3/7e3t/+7u7v/v7+//8PDw//Dw
  18.360 +        8P/x8fH/8vLy//Ly8v/z8/P/9PT0//X19f/19fX/9vb2//b29v/39/f/9/f3//f39//39/f/9vb2//b2
  18.361 +        9v/19fX/9fX1//T09P/39/f/Tk5O+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.362 +        AAAAAAAAAAAAAFhYWPH09PT/6urq/+jo6P/o6Oj/5eXl/+7u7v/r6+v/6+vr/+zs7P/t7e3/7u7u/+7u
  18.363 +        7v/v7+//8PDw//Hx8f/x8fH/8vLy//Pz8//z8/P/9PT0//X19f/19fX/9vb2//f39//39/f/+Pj4//j4
  18.364 +        +P/39/f/9/f3//b29v/29vb/9fX1//T09P/39/f/Tk5O+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.365 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFpaWvH09PT/6urq/+jo6P/o6Oj/5eXl/+7u7v/r6+v/6+vr/+zs
  18.366 +        7P/t7e3/7u7u/+7u7v/v7+//8PDw//Hx8f/x8fH/8vLy//Pz8//09PT/9PT0//X19f/29vb/9/f3//f3
  18.367 +        9//4+Pj/+Pj4//j4+P/4+Pj/9/f3//f39//29vb/9fX1//X19f/39/f/Tk5O+wAAAAAAAAAAAAAAAAAA
  18.368 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXPH09PT/6urq/+jo6P/o6Oj/5eXl/+7u
  18.369 +        7v/r6+v/6+vr/+zs7P/t7e3/7u7u/+7u7v/v7+//8PDw//Hx8f/x8fH/8vLy//Pz8//09PT/9fX1//X1
  18.370 +        9f/29vb/9/f3//f39//4+Pj/+fn5//n5+f/4+Pj/+Pj4//f39//29vb/9fX1//X19f/39/f/Tk5O+wAA
  18.371 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5eXvH09PT/6urq/+jo
  18.372 +        6P/o6Oj/5eXl/+7u7v/r6+v/6+vr/+zs7P/t7e3/7u7u/+7u7v/v7+//8PDw//Hx8f/x8fH/8vLy//Pz
  18.373 +        8//09PT/9fX1//X19f/29vb/9/f3//j4+P/4+Pj/+fn5//n5+f/4+Pj/+Pj4//f39//29vb/9fX1//X1
  18.374 +        9f/39/f/Tk5O+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBg
  18.375 +        YPH09PT/6urq/+jo6P/o6Oj/5eXl/+7u7v/r6+v/6+vr/+zs7P/t7e3/7u7u/+7u7v/v7+//8PDw//Hx
  18.376 +        8f/x8fH/8vLy//Pz8//09PT/9PT0//X19f/29vb/9/f3//f39//4+Pj/+fn5//n5+f/4+Pj/+Pj4//f3
  18.377 +        9//29vb/9fX1//X19f/39/f/Tk5O+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.378 +        AAAAAAAAAAAAAGJiYvH19fX/6urq/+jo6P/o6Oj/5eXl/+7u7v/r6+v/6+vr/+zs7P/t7e3/7u7u/+7u
  18.379 +        7v/v7+//8PDw//Hx8f/x8fH/8vLy//Pz8//09PT/9PT0//X19f/29vb/9vb2//f39//4+Pj/+Pj4//j4
  18.380 +        +P/4+Pj/9/f3//f39//29vb/9fX1//T09P/39/f/Tk5O+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.381 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVlZfH19fX/6urq/+jo6P/o6Oj/5eXl/+7u7v/q6ur/6+vr/+zs
  18.382 +        7P/t7e3/7e3t/+7u7v/v7+//8PDw//Dw8P/x8fH/8vLy//Pz8//z8/P/9PT0//X19f/19fX/9vb2//f3
  18.383 +        9//39/f/9/f3//f39//39/f/9/f3//b29v/29vb/9fX1//T09P/39/f/Tk5O+wAAAAAAAAAAAAAAAAAA
  18.384 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdnZ/H19fX/6urq/+fn5//o6Oj/5eXl/+7u
  18.385 +        7v/q6ur/6+vr/+zs7P/t7e3/7e3t/+7u7v/v7+//8PDw//Dw8P/x8fH/8vLy//Ly8v/z8/P/9PT0//T0
  18.386 +        9P/19fX/9fX1//b29v/29vb/9/f3//f39//29vb/9vb2//b29v/19fX/9fX1//T09P/39/f/Tk5O+wAA
  18.387 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlpafH19fX/6urq/+fn
  18.388 +        5//o6Oj/5eXl/+3t7f/q6ur/6+vr/+zs7P/s7Oz/7e3t/+7u7v/v7+//7+/v//Dw8P/x8fH/8fHx//Ly
  18.389 +        8v/z8/P/8/Pz//T09P/19fX/9fX1//X19f/29vb/9vb2//b29v/29vb/9fX1//X19f/19fX/9PT0//Pz
  18.390 +        8//39/f/Tk5O+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtr
  18.391 +        a/H19fX/6enp/+fn5//o6Oj/5eXl/+3t7f/q6ur/6+vr/+zs7P/s7Oz/7e3t/+7u7v/u7u7/7+/v//Dw
  18.392 +        8P/w8PD/8fHx//Ly8v/y8vL/8/Pz//Pz8//09PT/9PT0//X19f/19fX/9fX1//X19f/19fX/9fX1//X1
  18.393 +        9f/09PT/9PT0//Pz8//39/f/Tk5O+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.394 +        AAAAAAAAAAAAAG1tbfH29vb/6enp/9HR0f/z8/P/5OTk/+3t7f/q6ur/6+vr/+vr6//s7Oz/7e3t/+3t
  18.395 +        7f/u7u7/7+/v/+/v7//w8PD/8fHx//Hx8f/y8vL/8vLy//Pz8//z8/P/9PT0//T09P/09PT/9PT0//X1
  18.396 +        9f/09PT/9PT0//T09P/09PT/8/Pz//Pz8//39/f/Tk5O+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.397 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAG9vb/H29vb/6enp/729vf/Z2dn/5OTk/+3t7f/q6ur/6urq/+vr
  18.398 +        6//s7Oz/7Ozs/+3t7f/u7u7/7u7u/+/v7//w8PD/8PDw//Hx8f/x8fH/8vLy//Ly8v/z8/P/8/Pz//Pz
  18.399 +        8//09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/8vLy//Ly8v/39/f/Tk5O+wAAAAAAAAAAAAAAAAAA
  18.400 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFxcfH29vb/6enp/+fn5//n5+f/5OTk/+3t
  18.401 +        7f/p6en/6urq/+vr6//r6+v/7Ozs/+3t7f/t7e3/7u7u/+/v7//v7+//8PDw//Dw8P/x8fH/8fHx//Ly
  18.402 +        8v/y8vL/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//y8vL/8vLy//Hx8f/39/f/Tk5O+wAA
  18.403 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJycvH29vb/6enp/+bm
  18.404 +        5v/n5+f/5OTk/+3t7f/p6en/6urq/+rq6v/r6+v/7Ozs/+zs7P/t7e3/7u7u/+7u7v/v7+//7+/v//Dw
  18.405 +        8P/w8PD/8fHx//Hx8f/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8fHx//Hx
  18.406 +        8f/39/f/T09P+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHV1
  18.407 +        dfH29vb/6Ojo/+bm5v/n5+f/4+Pj/+3t7f/p6en/6enp/+rq6v/r6+v/6+vr/+zs7P/t7e3/7e3t/+7u
  18.408 +        7v/u7u7/7+/v/+/v7//w8PD/8PDw//Hx8f/x8fH/8fHx//Hx8f/y8vL/8vLy//Ly8v/y8vL/8fHx//Hx
  18.409 +        8f/x8fH/8fHx//Hx8f/39/f/UFBQ+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.410 +        AAAAAAAAAAAAAHh4ePH29vb/6Ojo/+bm5v/m5ub/4+Pj/+3t7f/o6Oj/6enp/+rq6v/q6ur/6+vr/+zs
  18.411 +        7P/s7Oz/7e3t/+3t7f/u7u7/7u7u/+/v7//v7+//8PDw//Dw8P/w8PD/8fHx//Hx8f/x8fH/8fHx//Hx
  18.412 +        8f/x8fH/8fHx//Hx8f/w8PD/8PDw//Hx8f/39/f/UlJS+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.413 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHp6evH39/f/6enp/+Xl5f/m5ub/4+Pj/+zs7P/o6Oj/6enp/+np
  18.414 +        6f/q6ur/6+vr/+vr6//s7Oz/7Ozs/+3t7f/t7e3/7u7u/+7u7v/v7+//7+/v/+/v7//w8PD/8PDw//Dw
  18.415 +        8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/7+/v//Dw8P/39/f/U1NT+wAAAAAAAAAAAAAAAAAA
  18.416 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fPH39/f/6Ojo/+Xl5f/m5ub/4uLi/+zs
  18.417 +        7P/o6Oj/6Ojo/+np6f/p6en/6urq/+vr6//r6+v/7Ozs/+zs7P/t7e3/7e3t/+7u7v/u7u7/7u7u/+/v
  18.418 +        7//v7+//7+/v/+/v7//w8PD/8PDw//Dw8P/w8PD/7+/v/+/v7//v7+//7+/v/+/v7//39/f/VFRU+wAA
  18.419 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH19ffH39/f/6Ojo/+Xl
  18.420 +        5f/l5eX/4uLi/+zs7P/n5+f/6Ojo/+np6f/p6en/6urq/+rq6v/r6+v/6+vr/+zs7P/s7Oz/7e3t/+3t
  18.421 +        7f/t7e3/7u7u/+7u7v/u7u7/7+/v/+/v7//v7+//7+/v/+/v7//v7+//6+/v/+bv7//m7u7/6+7u/+/v
  18.422 +        7//4+Pj/VVVV+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/
  18.423 +        f/H39/f/6Ojo/+Tk5P/l5eX/4uLi/+vr6//n5+f/5+fn/+jo6P/p6en/6enp/+rq6v/q6ur/6+vr/+vr
  18.424 +        6//s7Oz/7Ozs/+zs7P/t7e3/7e3t/+3t7f/u7u7/7u7u/+7u7v/u7u7/5O7u/9Tu7//F7vH/vO/x/7fv
  18.425 +        8v+27/L/ue7x/8Lu8f/b9/j/U1tc+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.426 +        AAAAAAAAAAAAAIGBgfH39/f/5+fn/+Tk5P/l5eX/4eHh/+vr6//m5ub/5+fn/+jo6P/o6Oj/6enp/+np
  18.427 +        6f/q6ur/6urq/+vr6//r6+v/6+vr/+zs7P/s7Oz/7e3t/+3t7f/t7e3/7e3t/+rt7f/R7e//vu7w/67u
  18.428 +        8f+i7vL/mu/z/5Xv9P+U7/T/l+/z/57v9P+w9vr/Q3x//Abz/x0AAAACAAAAAAAAAAAAAAAAAAAAAAAA
  18.429 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIODg/H39/f/5+fn/+Hh4f/p6en/4eHh/+rq6v/m5ub/5+fn/+fn
  18.430 +        5//o6Oj/6Ojo/+np6f/p6en/6urq/+rq6v/q6ur/6+vr/+vr6//s7Oz/7Ozs/+zs7P/s7Oz/5e3t/8jt
  18.431 +        7/+y7vH/n+/z/4/v9P+C8PX/efD2/3Xw9v9z8Pb/dvD2/37w9v+P9vv/O5OY/Qrz/0wH8/8wAAAACAAA
  18.432 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIWFhfH39/f/5+fn/6+vr//e3t7/4ODg/+rq
  18.433 +        6v/l5eX/5ubm/+fn5//n5+f/6Ojo/+jo6P/p6en/6enp/+np6f/q6ur/6urq/+vr6//r6+v/6+vr/+vr
  18.434 +        6//m7Oz/x+3u/67t8f+X7vP/g+/1/3Lw9v9k8ff/XPH4/1bx+f9V8fn/WPH5/2Dx+P9w9fz/M6mv/Q/z
  18.435 +        /20L8/9TB/P/NQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIaGhvH39/f/5ubm/9nZ
  18.436 +        2f/h4eH/4ODg/+rq6v/l5eX/5ubm/+bm5v/n5+f/5+fn/+jo6P/o6Oj/6enp/+np6f/p6en/6urq/+rq
  18.437 +        6v/q6ur/6+vr/+vr6//O7O3/se3w/5bu8v9/7/T/afD3/1jx+P9J8fr/P/L7/zry/P848vz/PPL8/0Ty
  18.438 +        +/9U9f3/Lr7G/hP0/4wP8/9vC/P/UQbz/ygAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiI
  18.439 +        iPH39/f/5ubm/+Li4v/j4+P/39/f/+rq6v/l5eX/5eXl/+bm5v/m5ub/5+fn/+fn5//n5+f/6Ojo/+jo
  18.440 +        6P/p6en/6enp/+np6f/q6ur/6urq/9zq6/+76+7/ne3x/4Lv9P9p8Pf/U/H5/0Dy+/868/z/R/T9/1D0
  18.441 +        /f9R9P3/TPT9/0Hz/P879P7/KdHa/hf0/6kT9P+JDvP/aAnz/0UE8/8TAAAAAAAAAAAAAAAAAAAAAAAA
  18.442 +        AAAAAAAAAAAAAIuLi/H39/f/5eXl/+Li4v/i4uL/39/f/+rq6v/k5OT/5eXl/+Xl5f/m5ub/5ubm/+bm
  18.443 +        5v/n5+f/5+fn/+jo6P/o6Oj/6Ojo/+np6f/p6en/6enp/8vq6/+s7O//ju3y/3Hv9f9Y8Pj/QPL7/0Dz
  18.444 +        /P9V9P3/ZvX9/3H2/f9z9/3/bPX9/131/f9L9v7/JeLs/xv0/8IW9P+gEfT/fQzz/1gH8/8zAAAAAgAA
  18.445 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAI2NjfH39/f/5eXl/+Hh4f/i4uL/3t7e/+np6f/k5OT/5OTk/+Xl
  18.446 +        5f/l5eX/5eXl/+bm5v/m5ub/5+fn/+fn5//n5+f/6Ojo/+jo6P/o6Oj/5Onp/8Dq7P+f7PD/gO7z/2Pv
  18.447 +        9v9J8fr/OvP8/1X0/f9u9v3/hPf9/5L4/f+V+f3/jPj9/3r3/f9j9/7/Oefv/x70/9cZ9P+zE/T/jQ7z
  18.448 +        /2cJ8/9AAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI+Pj/H39/f/5eXl/+Hh4f/h4eH/3t7e/+np
  18.449 +        6f/j4+P/5OTk/+Tk5P/k5OT/5eXl/+Xl5f/m5ub/5ubm/+bm5v/n5+f/5+fn/+fn5//o6Oj/2ujp/7fq
  18.450 +        7P+X7PD/d+70/1vw9/8/8vv/R/T8/2b1/f+E9/3/oPn9/7b6/v+6+v7/q/r+/5L4/f91+P7/Sejw/yP1
  18.451 +        /+Qb9P/AFfT/mRD0/3IK8/9KBPP/EwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCQkPH39/f/5eXl/+Dg
  18.452 +        4P/h4eH/3d3d/+jo6P/i4uL/4+Pj/+Pj4//k5OT/5OTk/+Xl5f/l5eX/5eXl/+bm5v/m5ub/5ubm/+fn
  18.453 +        5//n5+f/1efo/7Lp7P+S7PH/c+70/1Xw+P858vv/T/T8/3H2/f+S+P3/tvr+/9X8/v/g/P7/xfv+/6P5
  18.454 +        /f+C+P7/U+rx/yz1/+Uc9P/IFvT/oBD0/3cL8/9PBfP/HQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJGR
  18.455 +        kfH4+Pj/5OTk/+Dg4P/g4OD/3d3d/+fn5//i4uL/4uLi/+Pj4//j4+P/5OTk/+Tk5P/l5eX/5eXl/+Xl
  18.456 +        5f/m5ub/5ubm/+bm5v/m5ub/1efo/7Hp7P+R6/D/cO70/1Pw+P848vv/UPT8/3L2/f+V+P3/uvr+/+D8
  18.457 +        /v/v/f7/zPv+/6f5/v+E+P7/Verx/y71/+Uc9P/KFvT/oRH0/3kL8/9QBfP/JgAAAAAAAAAAAAAAAAAA
  18.458 +        AAAAAAAAAAAAAJOTk/H4+Pj/5OTk/9/f3//g4OD/3Nzc/+fn5//h4eH/4uLi/+Li4v/j4+P/4+Pj/+Tk
  18.459 +        5P/k5OT/5OTk/+Xl5f/l5eX/5eXl/+Xl5f/m5ub/1ubn/7To6/+T6u//c+3z/1bv9/878fv/TPT8/2v1
  18.460 +        /f+M9/3/q/r9/8X7/v/M+/7/ufr+/5z5/f98+P7/UOnx/yj1/+Ub9P/FFvT/nRD0/3UK8/9NBfP/HwAA
  18.461 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJSUlPH4+Pj/4+Pj/9/f3//f39//3Nzc/+bm5v/h4eH/4eHh/+Li
  18.462 +        4v/i4uL/4+Pj/+Pj4//j4+P/5OTk/+Tk5P/k5OT/5eXl/+Xl5f/l5eX/2+Xm/7nn6v+Z6u7/eu3y/17v
  18.463 +        9v9D8fr/QPP8/131/P969v3/kff9/6P5/f+n+f3/m/j9/4b3/f9s9/7/Qefw/x/0/98a9P+6FPT/kw/z
  18.464 +        /20J8/9FBPP/FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJaWlvH4+Pj/4+Pj/97e3v/f39//3Nzc/+bm
  18.465 +        5v/g4OD/4eHh/+Hh4f/i4uL/4uLi/+Li4v/j4+P/4+Pj/+Pj4//k5OT/5OTk/+Tk5P/k5OT/5OXl/8Ln
  18.466 +        6P+i6ez/hOvw/2nt9P9P8Pj/OPL7/0r0/P9h9fz/dPb9/4H3/f+D9/3/e/b9/2v1/f9X9v7/L+Xu/xz0
  18.467 +        /80X9P+qEvT/hQ3z/2AI8/86AAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJaWlvH4+Pj/4uLi/97e
  18.468 +        3v/e3t7/3Nzc/+bm5v/g4OD/4ODg/+Hh4f/h4eH/4eHh/+Li4v/i4uL/4uLi/+Pj4//j4+P/4+Pj/+Pj
  18.469 +        4//k5OT/5OTk/83l5v+v5+r/kunu/3fs8f9e7vX/SPD4/zXy+/9H9Pz/VvT8/171/P9g9fz/W/X8/070
  18.470 +        /P8/9f7/KNrj/hn0/7UU9P+VEPT/cgvz/08G8/8rAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJeX
  18.471 +        l/H4+Pj/4uLi/93d3f/e3t7/29vb/+bm5v/f39//4ODg/+Dg4P/g4OD/4eHh/+Hh4f/h4eH/4uLi/+Li
  18.472 +        4v/i4uL/4+Pj/+Pj4//j4+P/4+Pj/9zj4/++5ef/o+js/4jq7/9x7PL/XO71/0vw+P898fr/N/P8/z7z
  18.473 +        /P9A8/z/O/P8/zfx+/9G9P3/LMjQ/hX0/5oR9P98DfP/XAjz/zsD8/8UAAAAAAAAAAAAAAAAAAAAAAAA
  18.474 +        AAAAAAAAAAAAAJeXl/H4+Pj/5OTk/+Dg4P/g4OD/39/f/+fn5//i4uL/4uLi/+Li4v/j4+P/4+Pj/+Pj
  18.475 +        4//k5OT/5OTk/+Tk5P/k5OT/5OTk/+Tk5P/k5OT/5OTk/+Xl5f/T5uf/t+fq/57p7f+H6/D/dO3y/2Pu
  18.476 +        9f9V7/f/TPD4/0fw+f9F8Pn/SPD5/1Hw+P9h9fz/Mra8/RH0/3wN8/9hCfP/QwXz/yMAAAABAAAAAAAA
  18.477 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJmZmdnn5+f/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//n5
  18.478 +        +f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//f39//39/f/3/b3/8T2
  18.479 +        +P+s9fn/l/X6/4X1+v949Pr/b/T7/2n0+/9o9Pv/a/T7/3P0+v937fP/PKas8w3z/1wJ8/9DBfP/KAAA
  18.480 +        AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJWVlTyamprQnZ2d5Z+fn+WhoaHlo6Oj5aOj
  18.481 +        o+WhoaHloKCg5Z6enuWdnZ3lm5ub5ZmZmeWWlpbllJSU5ZKSkuWQkJDljY2N5YuLi+WJiYnlh4eH5YWF
  18.482 +        heWCgoLlgICA5XGKi+djlJbqWJyg7E+kqe5Iq7DwRLC18UCxtvE/sbbxP66z8UCorfBBoqflLLrBgQjz
  18.483 +        /zsF8/8kAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.484 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.485 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8/8OBPP/Igfz/zMJ8/9ACvP/Sgvz/08L8/9QCvP/TQnz
  18.486 +        /0UI8/86BvP/KwPz/xgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.487 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.488 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHz/w0D8/8ZBPP/IgXz
  18.489 +        /ycF8/8oBfP/JATz/x4C8/8TAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.490 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.491 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  18.492 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
  18.493 +        /////wAA+AAAAAAfAADwAAAAAAcAAOAAAAAABwAA8AAAAAAHAAD4AAAAAA8AAPwAAAAAPwAA/AAAAAA/
  18.494 +        AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwA
  18.495 +        AAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/
  18.496 +        AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAHwAA/AAAAAAPAAD8AAAAAAcAAPwA
  18.497 +        AAAAAwAA/AAAAAABAAD8AAAAAAEAAPwAAAAAAQAA/AAAAAAAAAD8AAAAAAAAAPwAAAAAAAAA/AAAAAAA
  18.498 +        AAD8AAAAAAAAAPwAAAAAAQAA/AAAAAABAAD8AAAAAAEAAPwAAAAAAwAA/AAAAAAHAAD8AAAAAA8AAP//
  18.499 +        //4AHwAA/////4B/AAD///////8AAA==
  18.500 +</value>
  18.501 +  </data>
  18.502 +</root>
  18.503 \ No newline at end of file
    19.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.2 +++ b/FrmNewUnit.cs	Fri Dec 19 15:57:51 2008 +0000
    19.3 @@ -0,0 +1,236 @@
    19.4 +using System;
    19.5 +using System.Drawing;
    19.6 +using System.Collections;
    19.7 +using System.ComponentModel;
    19.8 +using System.Windows.Forms;
    19.9 +using IBBoard;
   19.10 +using IBBoard.Lang;
   19.11 +using IBBoard.Windows.Forms;
   19.12 +using IBBoard.WarFoundry.API;
   19.13 +
   19.14 +namespace IBBoard.WarFoundry
   19.15 +{
   19.16 +	/// <summary>
   19.17 +	/// Summary description for FrmNewUnit.
   19.18 +	/// </summary>
   19.19 +	public class FrmNewUnit : IBBForm
   19.20 +	{
   19.21 +		private System.ComponentModel.IContainer components;
   19.22 +		private IBBoard.Windows.Forms.IBBButton bttnCancel;
   19.23 +		private IBBoard.Windows.Forms.IBBLabel lblUnitList;
   19.24 +		private IBBoard.Windows.Forms.IBBButton bttnSelectUnit;
   19.25 +		private System.Windows.Forms.ListBox lstUnits;
   19.26 +		private UnitType[] units;
   19.27 +		private Army army;
   19.28 +		private System.Windows.Forms.ImageList imageList;
   19.29 +		private System.Windows.Forms.Label lblNewUnitWarning;
   19.30 +		private System.Windows.Forms.Label lblWarningIcon;
   19.31 +		private bool[] allowed;
   19.32 +
   19.33 +		public FrmNewUnit(Race race, Category cat, Army army)
   19.34 +		{
   19.35 +			InitializeComponent();
   19.36 +
   19.37 +			Translation.TranslateControl(this, cat.Name);
   19.38 +			units = race.GetUnitTypes(cat);
   19.39 +			allowed = new bool[units.Length];
   19.40 +			this.army = army;
   19.41 +			
   19.42 +			for (int i = 0; i<units.Length; i++)
   19.43 +			{
   19.44 +				allowed[i] = army.CanAddUnitType(units[i]).Count == 0;
   19.45 +				lstUnits.Items.Add(units[i].Name);
   19.46 +			}
   19.47 +		}
   19.48 +
   19.49 +		/// <summary>
   19.50 +		/// Clean up any resources being used.
   19.51 +		/// </summary>
   19.52 +		protected override void Dispose( bool disposing )
   19.53 +		{
   19.54 +			if( disposing )
   19.55 +			{
   19.56 +				if(components != null)
   19.57 +				{
   19.58 +					components.Dispose();
   19.59 +				}
   19.60 +			}
   19.61 +			base.Dispose( disposing );
   19.62 +		}
   19.63 +
   19.64 +		#region Windows Form Designer generated code
   19.65 +		/// <summary>
   19.66 +		/// Required method for Designer support - do not modify
   19.67 +		/// the contents of this method with the code editor.
   19.68 +		/// </summary>
   19.69 +		private void InitializeComponent()
   19.70 +		{
   19.71 +			this.components = new System.ComponentModel.Container();
   19.72 +			System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(FrmNewUnit));
   19.73 +			this.lstUnits = new System.Windows.Forms.ListBox();
   19.74 +			this.bttnCancel = new IBBoard.Windows.Forms.IBBButton();
   19.75 +			this.lblUnitList = new IBBoard.Windows.Forms.IBBLabel();
   19.76 +			this.bttnSelectUnit = new IBBoard.Windows.Forms.IBBButton();
   19.77 +			this.lblNewUnitWarning = new System.Windows.Forms.Label();
   19.78 +			this.imageList = new System.Windows.Forms.ImageList(this.components);
   19.79 +			this.lblWarningIcon = new System.Windows.Forms.Label();
   19.80 +			this.SuspendLayout();
   19.81 +			// 
   19.82 +			// lstUnits
   19.83 +			// 
   19.84 +			this.lstUnits.Location = new System.Drawing.Point(88, 8);
   19.85 +			this.lstUnits.Name = "lstUnits";
   19.86 +			this.lstUnits.Size = new System.Drawing.Size(272, 121);
   19.87 +			this.lstUnits.TabIndex = 7;
   19.88 +			this.lstUnits.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lstUnits_MouseDown);
   19.89 +			this.lstUnits.DoubleClick += new System.EventHandler(this.lstUnits_DoubleClick);
   19.90 +			this.lstUnits.SelectedIndexChanged += new System.EventHandler(this.lstUnits_SelectedIndexChanged);
   19.91 +			// 
   19.92 +			// bttnCancel
   19.93 +			// 
   19.94 +			this.bttnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
   19.95 +			this.bttnCancel.FlatStyle = System.Windows.Forms.FlatStyle.System;
   19.96 +			this.bttnCancel.Location = new System.Drawing.Point(8, 168);
   19.97 +			this.bttnCancel.Name = "bttnCancel";
   19.98 +			this.bttnCancel.Size = new System.Drawing.Size(80, 24);
   19.99 +			this.bttnCancel.TabIndex = 6;
  19.100 +			this.bttnCancel.Text = "Cancel";
  19.101 +			this.bttnCancel.Click += new System.EventHandler(this.bttnCancel_Click);
  19.102 +			// 
  19.103 +			// lblUnitList
  19.104 +			// 
  19.105 +			this.lblUnitList.Location = new System.Drawing.Point(0, 8);
  19.106 +			this.lblUnitList.Name = "lblUnitList";
  19.107 +			this.lblUnitList.Size = new System.Drawing.Size(88, 80);
  19.108 +			this.lblUnitList.TabIndex = 5;
  19.109 +			this.lblUnitList.Text = "unit list";
  19.110 +			this.lblUnitList.TextAlign = System.Drawing.ContentAlignment.TopRight;
  19.111 +			// 
  19.112 +			// bttnSelectUnit
  19.113 +			// 
  19.114 +			this.bttnSelectUnit.Enabled = false;
  19.115 +			this.bttnSelectUnit.FlatStyle = System.Windows.Forms.FlatStyle.System;
  19.116 +			this.bttnSelectUnit.Location = new System.Drawing.Point(256, 168);
  19.117 +			this.bttnSelectUnit.Name = "bttnSelectUnit";
  19.118 +			this.bttnSelectUnit.Size = new System.Drawing.Size(104, 24);
  19.119 +			this.bttnSelectUnit.TabIndex = 4;
  19.120 +			this.bttnSelectUnit.Text = "create unit";
  19.121 +			this.bttnSelectUnit.Click += new System.EventHandler(this.bttnSelectUnit_Click);
  19.122 +			// 
  19.123 +			// lblNewUnitWarning
  19.124 +			// 
  19.125 +			this.lblNewUnitWarning.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
  19.126 +			this.lblNewUnitWarning.ImageList = this.imageList;
  19.127 +			this.lblNewUnitWarning.Location = new System.Drawing.Point(48, 136);
  19.128 +			this.lblNewUnitWarning.Name = "lblNewUnitWarning";
  19.129 +			this.lblNewUnitWarning.Size = new System.Drawing.Size(312, 32);
  19.130 +			this.lblNewUnitWarning.TabIndex = 9;
  19.131 +			this.lblNewUnitWarning.Text = "label1";
  19.132 +			this.lblNewUnitWarning.TextAlign = System.Drawing.ContentAlignment.TopRight;
  19.133 +			this.lblNewUnitWarning.Visible = false;
  19.134 +			// 
  19.135 +			// imageList
  19.136 +			// 
  19.137 +			this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
  19.138 +			this.imageList.ImageSize = new System.Drawing.Size(32, 32);
  19.139 +			this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
  19.140 +			this.imageList.TransparentColor = System.Drawing.Color.Transparent;
  19.141 +			// 
  19.142 +			// lblWarningIcon
  19.143 +			// 
  19.144 +			this.lblWarningIcon.ImageIndex = 0;
  19.145 +			this.lblWarningIcon.ImageList = this.imageList;
  19.146 +			this.lblWarningIcon.Location = new System.Drawing.Point(8, 136);
  19.147 +			this.lblWarningIcon.Name = "lblWarningIcon";
  19.148 +			this.lblWarningIcon.Size = new System.Drawing.Size(40, 32);
  19.149 +			this.lblWarningIcon.TabIndex = 10;
  19.150 +			this.lblWarningIcon.Visible = false;
  19.151 +			// 
  19.152 +			// FrmNewUnit
  19.153 +			// 
  19.154 +			this.AcceptButton = this.bttnSelectUnit;
  19.155 +			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
  19.156 +			this.CancelButton = this.bttnCancel;
  19.157 +			this.ClientSize = new System.Drawing.Size(370, 196);
  19.158 +			this.Controls.Add(this.lblWarningIcon);
  19.159 +			this.Controls.Add(this.lblNewUnitWarning);
  19.160 +			this.Controls.Add(this.bttnCancel);
  19.161 +			this.Controls.Add(this.lblUnitList);
  19.162 +			this.Controls.Add(this.bttnSelectUnit);
  19.163 +			this.Controls.Add(this.lstUnits);
  19.164 +			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
  19.165 +			this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
  19.166 +			this.MaximizeBox = false;
  19.167 +			this.MinimizeBox = false;
  19.168 +			this.Name = "FrmNewUnit";
  19.169 +			this.ShowInTaskbar = false;
  19.170 +			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
  19.171 +			this.Text = "FrmNewUni";
  19.172 +			this.ResumeLayout(false);
  19.173 +
  19.174 +		}
  19.175 +		#endregion
  19.176 +
  19.177 +		public UnitType SelectedUnit
  19.178 +		{
  19.179 +			get { return units[lstUnits.SelectedIndex]; }
  19.180 +		}
  19.181 +
  19.182 +		private void bttnCancel_Click(object sender, System.EventArgs e)
  19.183 +		{
  19.184 +			DialogResult = DialogResult.Cancel;
  19.185 +			this.Close();
  19.186 +		}
  19.187 +
  19.188 +		private void bttnSelectUnit_Click(object sender, System.EventArgs e)
  19.189 +		{
  19.190 +			selectUnit();
  19.191 +		}
  19.192 +
  19.193 +		private void selectUnit()
  19.194 +		{
  19.195 +			DialogResult = DialogResult.OK;
  19.196 +			this.Close();
  19.197 +		}
  19.198 +
  19.199 +		private void setSelectUnitEnabledVal()
  19.200 +		{
  19.201 +			if (lstUnits.SelectedIndex>-1)
  19.202 +			{
  19.203 +				bttnSelectUnit.Enabled = true;
  19.204 +				lblNewUnitWarning.Visible = !allowed[lstUnits.SelectedIndex];
  19.205 +				lblWarningIcon.Visible = lblNewUnitWarning.Visible;
  19.206 +
  19.207 +				if (lblNewUnitWarning.Visible)
  19.208 +				{
  19.209 +					//lblNewUnitWarning.Text = army.GetFailedAddRequirement(units[lstUnits.SelectedIndex]).Description;
  19.210 +                    //FIXME: Add failed requirement text
  19.211 +				}
  19.212 +			}
  19.213 +			else
  19.214 +			{
  19.215 +				bttnSelectUnit.Enabled = false;
  19.216 +			}
  19.217 +		}
  19.218 +
  19.219 +		private void lstUnits_SelectedIndexChanged(object sender, System.EventArgs e)
  19.220 +		{
  19.221 +			setSelectUnitEnabledVal();
  19.222 +		}
  19.223 +
  19.224 +		private void lstUnits_DoubleClick(object sender, EventArgs e)
  19.225 +		{
  19.226 +			if (lstUnits.SelectedIndex>-1)
  19.227 +			{
  19.228 +				selectUnit();
  19.229 +			}
  19.230 +		}
  19.231 +
  19.232 +		private void lstUnits_MouseDown(object sender, MouseEventArgs e)
  19.233 +		{
  19.234 +			//make sure no item is selected when a click is made outside a unit
  19.235 +			int index = lstUnits.IndexFromPoint(e.X, e.Y);
  19.236 +			lstUnits.SelectedIndex = index;
  19.237 +		}
  19.238 +	}
  19.239 +}
    20.1 Binary file FrmNewUnit.resources has changed
    21.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2 +++ b/FrmNewUnit.resx	Fri Dec 19 15:57:51 2008 +0000
    21.3 @@ -0,0 +1,551 @@
    21.4 +<?xml version="1.0" encoding="utf-8"?>
    21.5 +<root>
    21.6 +  <!-- 
    21.7 +    Microsoft ResX Schema 
    21.8 +    
    21.9 +    Version 1.3
   21.10 +    
   21.11 +    The primary goals of this format is to allow a simple XML format 
   21.12 +    that is mostly human readable. The generation and parsing of the 
   21.13 +    various data types are done through the TypeConverter classes 
   21.14 +    associated with the data types.
   21.15 +    
   21.16 +    Example:
   21.17 +    
   21.18 +    ... ado.net/XML headers & schema ...
   21.19 +    <resheader name="resmimetype">text/microsoft-resx</resheader>
   21.20 +    <resheader name="version">1.3</resheader>
   21.21 +    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
   21.22 +    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
   21.23 +    <data name="Name1">this is my long string</data>
   21.24 +    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
   21.25 +    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
   21.26 +        [base64 mime encoded serialized .NET Framework object]
   21.27 +    </data>
   21.28 +    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
   21.29 +        [base64 mime encoded string representing a byte array form of the .NET Framework object]
   21.30 +    </data>
   21.31 +                
   21.32 +    There are any number of "resheader" rows that contain simple 
   21.33 +    name/value pairs.
   21.34 +    
   21.35 +    Each data row contains a name, and value. The row also contains a 
   21.36 +    type or mimetype. Type corresponds to a .NET class that support 
   21.37 +    text/value conversion through the TypeConverter architecture. 
   21.38 +    Classes that don't support this are serialized and stored with the 
   21.39 +    mimetype set.
   21.40 +    
   21.41 +    The mimetype is used forserialized objects, and tells the 
   21.42 +    ResXResourceReader how to depersist the object. This is currently not 
   21.43 +    extensible. For a given mimetype the value must be set accordingly:
   21.44 +    
   21.45 +    Note - application/x-microsoft.net.object.binary.base64 is the format 
   21.46 +    that the ResXResourceWriter will generate, however the reader can 
   21.47 +    read any of the formats listed below.
   21.48 +    
   21.49 +    mimetype: application/x-microsoft.net.object.binary.base64
   21.50 +    value   : The object must be serialized with 
   21.51 +            : System.Serialization.Formatters.Binary.BinaryFormatter
   21.52 +            : and then encoded with base64 encoding.
   21.53 +    
   21.54 +    mimetype: application/x-microsoft.net.object.soap.base64
   21.55 +    value   : The object must be serialized with 
   21.56 +            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
   21.57 +            : and then encoded with base64 encoding.
   21.58 +
   21.59 +    mimetype: application/x-microsoft.net.object.bytearray.base64
   21.60 +    value   : The object must be serialized into a byte array 
   21.61 +            : using a System.ComponentModel.TypeConverter
   21.62 +            : and then encoded with base64 encoding.
   21.63 +    -->
   21.64 +  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
   21.65 +    <xsd:element name="root" msdata:IsDataSet="true">
   21.66 +      <xsd:complexType>
   21.67 +        <xsd:choice maxOccurs="unbounded">
   21.68 +          <xsd:element name="data">
   21.69 +            <xsd:complexType>
   21.70 +              <xsd:sequence>
   21.71 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
   21.72 +                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
   21.73 +              </xsd:sequence>
   21.74 +              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
   21.75 +              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
   21.76 +              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
   21.77 +            </xsd:complexType>
   21.78 +          </xsd:element>
   21.79 +          <xsd:element name="resheader">
   21.80 +            <xsd:complexType>
   21.81 +              <xsd:sequence>
   21.82 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
   21.83 +              </xsd:sequence>
   21.84 +              <xsd:attribute name="name" type="xsd:string" use="required" />
   21.85 +            </xsd:complexType>
   21.86 +          </xsd:element>
   21.87 +        </xsd:choice>
   21.88 +      </xsd:complexType>
   21.89 +    </xsd:element>
   21.90 +  </xsd:schema>
   21.91 +  <resheader name="resmimetype">
   21.92 +    <value>text/microsoft-resx</value>
   21.93 +  </resheader>
   21.94 +  <resheader name="version">
   21.95 +    <value>1.3</value>
   21.96 +  </resheader>
   21.97 +  <resheader name="reader">
   21.98 +    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   21.99 +  </resheader>
  21.100 +  <resheader name="writer">
  21.101 +    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  21.102 +  </resheader>
  21.103 +  <data name="lstUnits.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.104 +    <value>Private</value>
  21.105 +  </data>
  21.106 +  <data name="lstUnits.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.107 +    <value>False</value>
  21.108 +  </data>
  21.109 +  <data name="lstUnits.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.110 +    <value>Private</value>
  21.111 +  </data>
  21.112 +  <data name="bttnCancel.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.113 +    <value>False</value>
  21.114 +  </data>
  21.115 +  <data name="bttnCancel.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.116 +    <value>Private</value>
  21.117 +  </data>
  21.118 +  <data name="bttnCancel.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.119 +    <value>Private</value>
  21.120 +  </data>
  21.121 +  <data name="lblUnitList.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.122 +    <value>False</value>
  21.123 +  </data>
  21.124 +  <data name="lblUnitList.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.125 +    <value>Private</value>
  21.126 +  </data>
  21.127 +  <data name="lblUnitList.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.128 +    <value>Private</value>
  21.129 +  </data>
  21.130 +  <data name="bttnSelectUnit.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.131 +    <value>False</value>
  21.132 +  </data>
  21.133 +  <data name="bttnSelectUnit.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.134 +    <value>Private</value>
  21.135 +  </data>
  21.136 +  <data name="bttnSelectUnit.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.137 +    <value>Private</value>
  21.138 +  </data>
  21.139 +  <data name="lblNewUnitWarning.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.140 +    <value>False</value>
  21.141 +  </data>
  21.142 +  <data name="lblNewUnitWarning.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.143 +    <value>Private</value>
  21.144 +  </data>
  21.145 +  <data name="lblNewUnitWarning.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.146 +    <value>Private</value>
  21.147 +  </data>
  21.148 +  <data name="imageList.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.149 +    <value>Private</value>
  21.150 +  </data>
  21.151 +  <data name="imageList.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.152 +    <value>Private</value>
  21.153 +  </data>
  21.154 +  <data name="imageList.Location" type="System.Drawing.Point, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  21.155 +    <value>17, 17</value>
  21.156 +  </data>
  21.157 +  <data name="imageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
  21.158 +    <value>
  21.159 +        AAEAAAD/////AQAAAAAAAAAMAgAAAFpTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0xLjAuNTAw
  21.160 +        MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZT
  21.161 +        eXN0ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMA
  21.162 +        AACIDAAAAk1TRnQBSQFMAwEBAAEEAQABBAEAASABAAEgAQAE/wEhARAI/wFCAU0BNgcAATYDAAEoAwAB
  21.163 +        gAMAASADAAEBAQABIAYAAUD/AP8AJwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB
  21.164 +        /wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf//AKAAAf8D
  21.165 +        AAH/AgABKAH/AgABKwH/AgABKQH/AgABKQH/AgABKQH/AgABKQH/AgABKQH/AgABKQH/AgABKQH/AgAB
  21.166 +        KQH/AgABKQH/AgABKQH/AgABKQH/AgABKQH/AgABKQH/AgABKQH/AgABKQH/AgABKQH/AgABKQH/AgAB
  21.167 +        KQH/AgABKQH/AgABKwH/AgABKwH/AgABKAH/AwAB//8AlAAB/wIAAWoB/wIAAZ0B/wIAAZ8B/wIAAZ8B
  21.168 +        /wIAAZ8B/wIAAZ8B/wIAAZ8B/wIAAZ8B/wIAAZ8B/wIAAZ8B/wIAAZ8B/wIAAZ8B/wIAAZ8B/wIAAZ8B
  21.169 +        /wIAAZ8B/wIAAZ8B/wIAAZ8B/wIAAZ8B/wIAAZ8B/wIAAZ8B/wIAAZ8B/wIAAZ8B/wIAAZ8B/wIAAZ8B
  21.170 +        /wIAAZ8B/wIAAZ8B/wIAAZ0B/wIAAXAB//8AkAAB/wIAAZwB/wI7AcQB/wJwAeAB/wJ1AeIB/wJ0AeIB
  21.171 +        /wJxAeEB/wJvAeEB/wJsAeAB/wJpAd8B/wJmAd8B/wJkAd4B/wJhAd4B/wJeAd0B/wJcAdwB/wJZAdwB
  21.172 +        /wJWAdsB/wJTAdsB/wJRAdoB/wJOAdoB/wJLAdkB/wJIAdgB/wJFAdgB/wJDAdcB/wJAAdcB/wI+AdYB
  21.173 +        /wI2AdQB/wIbAbwB/wIAAZ4B//8AkwABoAH/AnkB3QH/AhQB0AH/AgABzAH/AgABzAH/AgABzAH/AgAB
  21.174 +        zAH/AgABzAH/AgABzAH/AgABzAH/AgABzAH/AgABzAH/AgABzAH/AgABzAH/AgABzAH/AgABzAH/AgAB
  21.175 +        zAH/AgABzAH/AgABzAH/AgABzAH/AgABzAH/AgABzAH/AgABzAH/AgABzAH/AgABzAH/AgoBzgH/AjgB
  21.176 +        zwH/AgABnwH//wCTAAGhAf8CVgHHAf8COgHYAf8CAAHMAf8CowHbAf8C0gHgAf8C0gHgAf8C0wHhAf8C
  21.177 +        1AHiAf8C1AHiAf8C1QHjAf8C1gHkAf8C1wHlAf8C2AHmAf8C2AHmAf8C2QHnAf8C2QHnAf8C2gHoAf8C
  21.178 +        2gHoAf8C2wHpAf8C3AHqAf8C3QHrAf8C3gHsAf8CwQHnAf8CAAHMAf8CGwHRAf8CKQG/Af8CAAGiAf//
  21.179 +        AJMAAZ4B/wIWAacB/wJ1Ad0B/wIIAc4B/wJQAdMB/wPgAf8D4QH/A+EB/wPiAf8D4wH/A+MB/wPkAf8D
  21.180 +        5QH/A+YB/wPmAf8D5wH/A+gB/wPpAf8D6gH/A+oB/wPrAf8D7AH/A+0B/wJpAdsB/wIDAc0B/wI7AdMB
  21.181 +        /wIMAaUB/wIAAaAB//8AlwABoQH/AlIBxAH/AkQB2gH/AgIBzAH/ArMB2wH/A+AB/wPhAf8D4QH/A+IB
  21.182 +        /wPjAf8D4wH/A+QB/wM8Af8DNwH/A+YB/wPnAf8D6AH/A+kB/wPqAf8D6gH/A+sB/wLNAecB/wIHAc0B
  21.183 +        /wIkAdMB/wIsAbsB/wIAAaAB//8AmwABngH/Ag8BpgH/AnkB3AH/Ag4BzwH/AjsB0QH/A98B/wPgAf8D
  21.184 +        4AH/A+EB/wPiAf8D4gH/A+MB/wM3Af8DNQH/A+YB/wPmAf8D5wH/A+gB/wPpAf8D6gH/A+oB/wJSAdcB
  21.185 +        /wIIAc4B/wJDAdIB/wIIAaIB/wIAAaAB//8AnwABoAH/AkYBvQH/AlEB3AH/AgABzAH/AqIB2gH/A98B
  21.186 +        /wPgAf8D4AH/A+EB/wPiAf8D4gH/A9cB/wPXAf8D5QH/A+YB/wPmAf8D5wH/A+gB/wPpAf8CugHjAf8C
  21.187 +        AQHMAf8CLwHVAf8CKQG3Af8CAAGgAf//AKMAAaIB/wIIAaIB/wJ5AdoB/wIXAdEB/wIqAdAB/wLdAd8B
  21.188 +        /wPfAf8D4AH/A+AB/wPhAf8D4gH/AyUB/wMlAf8D5AH/A+UB/wPlAf8D5gH/A+cB/wPoAf8COwHTAf8C
  21.189 +        DgHPAf8CSQHRAf8CBQGiAf8CAAGhAf//AKcAAZ8B/wI7AbgB/wJeAd4B/wIAAcwB/wKNAdcB/wPfAf8D
  21.190 +        3wH/A+AB/wPgAf8D4QH/AxsB/wMbAf8D4wH/A+QB/wPlAf8D5QH/A+YB/wKkAd8B/wIAAcwB/wI8AdcB
  21.191 +        /wIkAbEB/wIAAaEB//8ArQACAwGiAf8CcwHXAf8CIgHTAf8CGwHOAf8C1wHdAf8D3wH/A98B/wPgAf8D
  21.192 +        4AH/Aw0B/wMNAf8D4gH/A+MB/wPkAf8D5QH/AuIB5AH/AigB0QH/AhgB0QH/AksBzgH/AgIBogH/AgAB
  21.193 +        pAH//wCvAAGgAf8CLwGxAf8CagHfAf8CAQHMAf8CeQHVAf8D3gH/A94B/wPfAf8D4AH/AwMB/wMDAf8D
  21.194 +        4QH/A+IB/wPjAf8D5AH/AowB2gH/AgEBzAH/AksB2gH/Ah4BrAH/AgABnwH//wC1AAIBAaEB/wJsAdMB
  21.195 +        /wIvAdUB/wIQAc4B/wLOAdwB/wPeAf8D3gH/A9cB/wMAAf8DAAH/A9kB/wPhAf8D4gH/AtoB4gH/AhkB
  21.196 +        zwH/AiQB0wH/AkkBywH/AgABoQH//wC7AAGgAf8CIgGsAf8CdQHgAf8CBAHNAf8CZgHUAf8D3QH/A94B
  21.197 +        /wPMAf8DAAH/AwAB/wPOAf8D4QH/A+EB/wJ2AdgB/wIEAc0B/wJXAdsB/wIWAagB/wIAAZ8B//8AvwAB
  21.198 +        oAH/AmIBzAH/AjsB2AH/AgcBzQH/AsMB2wH/A90B/wPBAf8DAAH/AwAB/wPDAf8D4AH/As4B3wH/AgwB
  21.199 +        zQH/AjEB1gH/AkUBxwH/AgABogH//wDDAAGcAf8CFwGpAf8CfAHgAf8CCAHOAf8CUgHSAf8D3QH/A9oB
  21.200 +        /wPPAf8DzwH/A9wB/wPfAf8CYQHVAf8CCQHOAf8CYgHbAf8CDwGlAf8CAAGeAf//AMcAAaAB/wJWAcYB
  21.201 +        /wJIAdoB/wICAcwB/wK0AdkB/wPdAf8D3QH/A94B/wPeAf8CwAHcAf8CBAHMAf8CQAHZAf8CPgHBAf8C
  21.202 +        AAGhAf//AMsAAZ4B/wIPAaYB/wKAAeAB/wIPAc8B/wI/AdEB/wPcAf8D3QH/A90B/wPeAf8CSgHSAf8C
  21.203 +        EQHPAf8CaAHbAf8CCQGiAf8CAAGfAf//AM8AAZ8B/wJLAcAB/wJVAdwB/wIAAcwB/wKiAdcB/wPcAf8D
  21.204 +        3AH/Aq0B2QH/AgEBzAH/AlAB3AH/AjcBvAH/AgABoAH//wDTAAGlAf8CCAGjAf8CgAHeAf8CGQHRAf8C
  21.205 +        LAHPAf8C2gHbAf8D3AH/AjUB0AH/AhwB0gH/AmoB2QH/AgQBogH/AgABngH//wDXAAGgAf8CPwG6Af8C
  21.206 +        YwHfAf8CAAHMAf8CjwHWAf8CmAHWAf8CAQHMAf8CYQHfAf8CLgG2Af8CAAGgAf//AN0AAgMBoQH/AnoB
  21.207 +        2gH/AiQB0wH/AhUBzgH/AhcBzQH/AioB1AH/AmgB1wH/AgEBoAH/AgABnwH//wDfAAGeAf8CMgG0Af8C
  21.208 +        cQHhAf8CAQHMAf8CAwHNAf8CcQHhAf8CJAGvAf8CAAGeAf//AOUAAgEBoQH/Am4B1QH/AkIB2QH/AkYB
  21.209 +        2gH/Al8B0gH/AgABoQH//wDrAAGgAf8CEwGnAf8CbQHaAf8CagHaAf8CDwGnAf8CAAGfAf//AO8AAZ0B
  21.210 +        /wIAAaEB/wIAAaAB/wIAAaAB//8A/wD/AP8A/wD/AP8AvwABQgFNAT4HAAE+AwABKAMAAYADAAEgAwAB
  21.211 +        AQEAAQEGAAECFgAD/wEABP8MAAHwAgABHwwAAcACAAEHDAABgAIAAQMMAAGAAgABAwwAAcACAAEDDAAB
  21.212 +        wAIAAQMMAAHAAgABAwwAAeACAAEHDAAB4AIAAQcMAAHwAgABDwwAAfACAAEPDAAB+AIAAR8MAAH8AgAB
  21.213 +        HwwAAfwCAAE/DAAB/gIAAX8MAAH+AgABfwwAAf8CAAH/DAAB/wIAAf8MAAH/AYABAQH/DAAB/wGAAQEB
  21.214 +        /wwAAf8BwAEDAf8MAAH/AcABAwH/DAAB/wHgAQcB/wwAAf8B8AEHAf8MAAH/AfABDwH/DAAB/wH4AR8B
  21.215 +        /wwAAf8B+AEfAf8MAAH/AfwBPwH/DAAE/wwABP8MAAT/IgAL
  21.216 +</value>
  21.217 +  </data>
  21.218 +  <data name="lblWarningIcon.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.219 +    <value>False</value>
  21.220 +  </data>
  21.221 +  <data name="lblWarningIcon.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.222 +    <value>Private</value>
  21.223 +  </data>
  21.224 +  <data name="lblWarningIcon.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.225 +    <value>Private</value>
  21.226 +  </data>
  21.227 +  <data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.228 +    <value>False</value>
  21.229 +  </data>
  21.230 +  <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.231 +    <value>(Default)</value>
  21.232 +  </data>
  21.233 +  <data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.234 +    <value>False</value>
  21.235 +  </data>
  21.236 +  <data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.237 +    <value>False</value>
  21.238 +  </data>
  21.239 +  <data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  21.240 +    <value>8, 8</value>
  21.241 +  </data>
  21.242 +  <data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.243 +    <value>True</value>
  21.244 +  </data>
  21.245 +  <data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.246 +    <value>80</value>
  21.247 +  </data>
  21.248 +  <data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.249 +    <value>True</value>
  21.250 +  </data>
  21.251 +  <data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  21.252 +    <value>Private</value>
  21.253 +  </data>
  21.254 +  <data name="$this.Name">
  21.255 +    <value>FrmNewUnit</value>
  21.256 +  </data>
  21.257 +  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" mimetype="application/x-microsoft.net.object.bytearray.base64">
  21.258 +    <value>
  21.259 +        AAABAAQAEBAAAAEAIABoBAAARgAAABgYAAABACAAiAkAAK4EAAAgIAAAAQAgAKgQAAA2DgAAMDAAAAEA
  21.260 +        IACoJQAA3h4AACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.261 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.262 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.263 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKRlNMykZTT/pGU0/6RlNMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.264 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkZTT/5s63/+bOt/+kZTT/AAAAAAAAAAAAAAAAAAAAAAAA
  21.265 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApGU0/+bOt//ZrYb/pGU0/wAAAAAAAAAAAAAAAAAA
  21.266 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKRlNP/mzrf/2a2G/6RlNP8AAAAAAAAAAAAA
  21.267 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKRlNMykZTT/pGU0/6RlNP+kZTT/2a2G/9mthv+kZTT/pGU0/6Rl
  21.268 +        NP+kZTT/pGU0zAAAAAAAAAAAAAAAAAAAAACkZTT/5cy0/9u3lf/btpT/2rSS/9qzkP/ZrYb/2KqD/9eo
  21.269 +        f//Xpn3/4L6f/6RlNP8AAAAAAAAAAAAAAAAAAAAApGU0/+jTwP/n0bv/59G8/+bOt//mzrf/5s63/+bO
  21.270 +        t//mzbb/5sy1/+bMtv+kZTT/AAAAAAAAAAAAAAAAAAAAAKRlNMykZTT/pGU0/6RlNP+kZTT/5s63/+bO
  21.271 +        t/+kZTT/pGU0/6RlNP+kZTT/pGU0zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApGU0/+bO
  21.272 +        t//mzrf/pGU0/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKRl
  21.273 +        NP/mzrf/5s63/6RlNP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.274 +        AACkZTT/5s63/+bOt/+kZTT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.275 +        AAAAAAAApGU0zKRlNP+kZTT/pGU0zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.276 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.277 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//
  21.278 +        AAD8PwAA/D8AAPw/AAD8PwAAwAMAAMADAADAAwAAwAMAAPw/AAD8PwAA/D8AAPw/AAD//wAA//8AACgA
  21.279 +        AAAYAAAAMAAAAAEAIAAAAAAAYAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.280 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.281 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.282 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.283 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.284 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.285 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.286 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAADAAAAAgAA
  21.287 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.288 +        AAAAAAAAAAAAAAAAAAAAAAAApGU0zKRlNP+kZTT/pGU0zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.289 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAApGU0/+/g
  21.290 +        0//jxKr/pGU0/wAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.291 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApGU0/+fLtf/SnG7/pGU0/wAAAAAAAAAAAAAAAAAA
  21.292 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.293 +        AAAAAAAApGU0/+fMtf/SnW//pGU0/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.294 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApGU0/+LBpf/SnnH/pGU0/wAA
  21.295 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKRl
  21.296 +        NMykZTT/pGU0/6RlNP+kZTT/pGU0/+LBpP/SnnH/pGU0/6RlNP+kZTT/pGU0/6RlNP+kZTTMAAAAAAAA
  21.297 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKRlNP/lzLT/27eV/9u2lP/atJL/2rOQ/9mx
  21.298 +        jf/Zr4r/2a2G/9iqg//XqH//16Z9/+C+n/+kZTT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.299 +        AAAAAAAAAAAAAKRlNP/o08D/59G7/+fRvP/n0bz/6dO+/+XLs//lyrL/59C7/+bOt//mzbb/5sy1/+bM
  21.300 +        tv+kZTT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKRlNMykZTT/pGU0/6Rl
  21.301 +        NP+kZTT/pGU0/+XMtP/ly7P/pGU0/6RlNP+kZTT/pGU0/6RlNP+kZTTMAAAAAAAAAAAAAAAAAAAAAAAA
  21.302 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApGU0/+XMtf/lzLP/pGU0/wAA
  21.303 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.304 +        AAAAAAAAAAAAAAAAAAAAAAAApGU0/+XMtf/lzLT/pGU0/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.305 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApGU0/+XM
  21.306 +        tf/lzLT/pGU0/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.307 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApGU0/+XMtf/lzLT/pGU0/wAAAAAAAAAAAAAAAAAA
  21.308 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.309 +        AAAAAAAApGU0zKRlNP+kZTT/pGU0zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.310 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.311 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.312 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.313 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.314 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.315 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.316 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.317 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.318 +        AAD///8A////AP///wD///8A////AP/D/wD/w/8A/8P/AP/D/wD/w/8A+AAfAPgAHwD4AB8A+AAfAP/D
  21.319 +        /wD/w/8A/8P/AP/D/wD/w/8A////AP///wD///8A////AP///wAoAAAAIAAAAEAAAAABACAAAAAAAIAQ
  21.320 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.321 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.322 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.323 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.324 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.325 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.326 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.327 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.328 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.329 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAA
  21.330 +        AAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.331 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAFAAAABwAAAAkAAAAKAAAADAAA
  21.332 +        AAwAAAAMAAAADAAAAAsAAAAKAAAACAAAAAUAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.333 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFAAAACAAAAAoAAAANWDUaHaRl
  21.334 +        NP+kZTT/pGU0/6RlNP+kZTT/pGU0/wAAABAAAAANAAAACwAAAAgAAAAFAAAAAwAAAAAAAAAAAAAAAAAA
  21.335 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAAIAAAACwAA
  21.336 +        AA1VMxoepWc2+NqzkP/asIz/2K+J/9iuiP+kZTT/AAAAEAAAAA0AAAAKAAAACAAAAAUAAAACAAAAAAAA
  21.337 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
  21.338 +        AAQAAAAGAAAACGpAIBilZzb42rSR/9GZaf/RmGj/2a+J/6RlNP8AAAAJAAAABwAAAAUAAAADAAAAAQAA
  21.339 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.340 +        AAAAAAAAAAAAAAAAAAAAAAABllotEaVnNvjbtpT/0Zlq/9GZaf/ZsYz/pGU0/wAAAAEAAAAAAAAAAAAA
  21.341 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.342 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqZjMPpWc2+Ny4l//Rmmv/0Zlq/9qyj/+kZTT/AAAAAAAA
  21.343 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.344 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKpmMw+lZzb43bqa/9GabP/Rmmv/27WS/6Rl
  21.345 +        NP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.346 +        AAAAAAAAAAAAAAAAAAAAAAAApGU0/6RlNP+kZTT/pGU0/6RlNP+kZTT/pGU0/6RlNP/evJz/0Ztt/9Gb
  21.347 +        bP/ct5X/pGU0/6RlNP+kZTT/pGU0/6RlNP+kZTT/pGU0/6RlNP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.348 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkZTT/48et/+PHrf/jx6z/4sWp/+HDp//hwqT/4MCi/9++
  21.349 +        n//QnG7/0Ztt/924l//ct5X/27WS/9q0kP/ZsY7/2bGM/9iuiP/Yroj/pGU0/wAAAAAAAAAAAAAAAAAA
  21.350 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKRlNP/jx63/z6Bz/8+gc//Pn3P/z59y/9Ce
  21.351 +        cf/QnXD/0J1v/9Ccb//QnG7/0Ztt/9GbbP/Rmmv/0Zlr/9GZav/RmGn/0Zho/9iuif+kZTT/AAAAAAAA
  21.352 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApGU0/+rVwv/dvJz/3r2e/969
  21.353 +        nv/du5z/3bqa/924l//ct5b/3LaT/9u0kf/aso7/2q+L/9quiP/Zq4T/2KmC/9iogP/XpXz/37uc/6Rl
  21.354 +        NP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkZTT/69fF/+vX
  21.355 +        xf/r18X/69fF/+vXxf/r18X/69bD/+rXw//fvJ7/37yc/+nSvv/o0Lv/6M+5/+fOuP/nzrj/5s21/+bM
  21.356 +        tP/ly7P/pGU0/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKRl
  21.357 +        NP+kZTT/pGU0/6RlNP+kZTT/pWY2+aVmNfqmaDj/69fF/968nv/fvJ7/6tTA/6ZoOP+lZzf3pWc396Vn
  21.358 +        N/elZzf3pWc396VnN/ekZTT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.359 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqaisMp2g4IKZoOvzs2cb/3r2e/968nv/q1cL/pmg4/6Vp
  21.360 +        LRGlaS0RpWktEaVpLRGlaS0RpWktEaVpLREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.361 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqZjMPp2o7+OzZx//evZ//3r2e/+rX
  21.362 +        w/+maDj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.363 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKpmMw+najv47NnH/96+
  21.364 +        n//evp//7NjF/6ZoOP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.365 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqmYzD6dq
  21.366 +        O/js2cf/3r6f/96+n//s2cf/pmg4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.367 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.368 +        AACqZjMPp2o7+OzZx//evp//3r6f/+zZx/+maDj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.369 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.370 +        AAAAAAAAAAAAAKpmMw+najv47NnH/+zZx//s2cf/7NnH/6ZoOP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.371 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.372 +        AAAAAAAAAAAAAAAAAAAAAAAAqmYzD6RlNP+kZTT/pGU0/6RlNP+kZTT/pGU0/wAAAAAAAAAAAAAAAAAA
  21.373 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.374 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.375 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.376 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.377 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.378 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.379 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.380 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.381 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.382 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.383 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.384 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.385 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.386 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.387 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.388 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////gP///A
  21.389 +        A///wAP///Af///wH///8B////Af//wAAD/8AAA//AAAP/wAAD/8AAA//AAAP//gAD//8B////Af///w
  21.390 +        H///8B////Af///wH///////////////////////////////////////KAAAADAAAABgAAAAAQAgAAAA
  21.391 +        AACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.392 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.393 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.394 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.395 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.396 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.397 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.398 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.399 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.400 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.401 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.402 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.403 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.404 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.405 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.406 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.407 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.408 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.409 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.410 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.411 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.412 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.413 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.414 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAwAA
  21.415 +        AAQAAAAFAAAABgAAAAYAAAAGAAAABwAAAAcAAAAHAAAABgAAAAYAAAAFAAAABAAAAAIAAAABAAAAAAAA
  21.416 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.417 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABAAA
  21.418 +        AAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADQAAAA0AAAANAAAADAAAAAwAAAALAAAACgAA
  21.419 +        AAkAAAAHAAAABgAAAAUAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.420 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAA
  21.421 +        AAQAAAAGAAAACAAAAAkAAAALAAAADQAAAA4AAAAQIxcMFjMfFBkxHRQaMR0UGjEdFBoxHRQaMx8UGTUg
  21.422 +        FRgAAAAQAAAADgAAAA0AAAALAAAACQAAAAgAAAAGAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.423 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.424 +        AAAAAAACAAAABAAAAAYAAAAIAAAACgAAAAsAAAANAAAADwAAABEAAAATpGU0+qVmNfylZjX8pWY1/KVm
  21.425 +        NfylZzb8pWc2/KRlNP8AAAASAAAAEAAAAA8AAAANAAAACwAAAAkAAAAHAAAABQAAAAMAAAACAAAAAAAA
  21.426 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.427 +        AAAAAAAAAAAAAAAAAAAAAAACAAAABAAAAAYAAAAIAAAACQAAAAsAAAANAAAADwAAABAAAAASpGU1/New
  21.428 +        i//ZsIv/2a2I/9eshv/Xq4T/2K2G/6RlNP8AAAARAAAADwAAAA4AAAAMAAAACgAAAAgAAAAGAAAABQAA
  21.429 +        AAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.430 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAQAAAAGAAAABwAAAAkAAAAKAAAADAAA
  21.431 +        AA0AAAAOpGU1/NiwjP/SmWr/0Zdo/9KXZ//Slmf/16uE/6RlNP8AAAANAAAADAAAAAoAAAAJAAAABwAA
  21.432 +        AAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.433 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAwAA
  21.434 +        AAUAAAAGAAAABwAAAAgAAAAJpWY1/Nmyj//SmWv/0Zho/9GXaP/Sl2f/162H/6RlNP8AAAAIAAAABwAA
  21.435 +        AAYAAAAEAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.436 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.437 +        AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAIAAAADpGY0/dqzkP/RmWv/0Zhp/9GYaP/Rl2j/2a6J/6Rl
  21.438 +        NP8AAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.439 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.440 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApGY0/du1k//Rmmz/0Zlq/9GZ
  21.441 +        af/RmGj/2rCM/6RlNP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.442 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.443 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApWU0/ty2
  21.444 +        lf/Rm2z/0Zlr/9GZav/RmWn/2bGN/6RlNP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.445 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.446 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.447 +        AAAAAAAApWU0/tu4lv/Rm23/0Zpr/9GZa//RmWr/2rKP/6RlNP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.448 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.449 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.450 +        AAAAAAAAAAAAAAAAAAAAAAAApGU0/925mf/Rm23/0Zps/9Gaa//RmWv/27SR/6RlNP8AAAAHAAAABQAA
  21.451 +        AAMAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.452 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAekZTT/pGU0/6Vl
  21.453 +        NP6lZTT+pGY0/aRmNP2lZjX8pWY1/KRlNfylZjX7pGU0/926mv/RnG7/0Zts/9GabP/Rmmv/27WS/6Vn
  21.454 +        Nf2lZjX8pGY0/aVlNP6kZTT/pGU0/6VlNP6lZTT+pGY0/aRlNfykZTT6AAAAAAAAAAAAAAAAAAAAAAAA
  21.455 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.456 +        AAalaDf848es/+LFqv/hxan/4cOn/+DCpf/gwaT/4MCi/9+/n//evJ7/3buc/9+8nf/RnW//0Ztt/9Gb
  21.457 +        bP/Rmmz/3LaU/9u1k//btJH/27OQ/9qyjv/ZsYz/2a+K/9mviP/YrIb/1qqE/9aqhP+kZTT/AAAAAAAA
  21.458 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.459 +        AAAAAAAAAAAAAAAAAAWlZzb948as/9Chdf/QoXX/0KB0/9Cgc//Qn3P/0J9y/9Cfcv/QnnH/0Z1x/9Gd
  21.460 +        cP/QnG7/0Ztt/9Gbbf/Rm2z/0Zps/9Gaa//RmWv/0Zlq/9GZav/RmGn/0Zho/9GXaP/Sl2f/0pZn/9er
  21.461 +        hP+kZTT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.462 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASlZzb95cuy/9ewi//Yso3/2bOQ/9mzj//Yso7/2bCM/9iv
  21.463 +        iv/YrYj/16yG/9erhP/WqYL/1qiA/9amfP/VpHr/1KJ3/9Ofc//SnXD/0ptt/9GZav/RmWr/0Zhp/9GY
  21.464 +        aP/Rl2j/0pdn/9iuh/+kZTT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.465 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOkZjX+69jG/969nv/evZ7/3r2e/969
  21.466 +        nv/evZ7/3r2e/968nf/fvJ3/37uc/9+7nP/fu5z/37uc/9+7m//fupr/37qa/9+6mv/fuZr/37mZ/9+4
  21.467 +        mP/etpX/3bWS/92zkf/etZL/3rWT/+TGq/+kZTT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.468 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkZTT/7NjG/969
  21.469 +        nv/evZ7/3r2e/969nv/evZ7/3r2e/969nv/evJ3/37yd/9+7nP/fu5z/37uc/9+7nP/fu5v/37qb/9+6
  21.470 +        mv/fupr/37ma/9+5mf/fuZn/37mY/9+5mP/fuJf/37iX/+XIr/+kZTT/AAAAAAAAAAAAAAAAAAAAAAAA
  21.471 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.472 +        AAGkZTT/7NjG/+zYxv/s2Mb/7NjG/+zYxv/r2Mb/7NjG/+zXxf/q1sP/6tbC/+rVwf/fvJ7/37uc/9+7
  21.473 +        nP/fu5z/6dG7/+jQu//oz7n/6M+4/+fOt//nzbX/5s20/+XLs//ly7L/5smx/+XLsv+kZTT/AAAAAAAA
  21.474 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.475 +        AAAAAAAAAAAAAAAAAACkZTT6pGU1/KRmNP2lZTT+pWY1/qRmNf+lZjb/pmY2/qVnNv2mZzf8pmk3/erW
  21.476 +        wv/fvZ7/37ud/9+7nP/fu5z/6NK9/6doOfymZzf8pmc3/KZoOPymaDj8pmg4/KdoOfynaDn8p2g5/Kdo
  21.477 +        OfykZTT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.478 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAwAA
  21.479 +        AAUAAAAHpGU0/+rWw//fvZ7/37yd/9+8nf/fu5z/6dS//6VmNfyqZjMPAAAACAAAAAgAAAAIAAAACAAA
  21.480 +        AAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.481 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.482 +        AAAAAAAAAAAAAAAAAAAAAAAApGU0/+vYxP/fvZ7/3r2e/9+8nf/fvJ3/6tTA/6VmNfwAAAAGAAAAAAAA
  21.483 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.484 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.485 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApGU0/+zYxv/fvZ7/3r2e/969nv/fvJ3/6tXB/6Rm
  21.486 +        NP0AAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.487 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.488 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApGU0/+zYxv/fvZ//3r2e/969
  21.489 +        nv/evZ7/6tbD/6RmNP0AAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.490 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.491 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApGU0/+zY
  21.492 +        xv/evZ//3r2e/969nv/evZ7/69fE/6RlNP4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.493 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.494 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.495 +        AAAAAAAApGU0/+zYxv/evZ//3r2e/969nv/evZ7/69jE/6VlNP4AAAADAAAAAAAAAAAAAAAAAAAAAAAA
  21.496 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.497 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.498 +        AAAAAAAAAAAAAAAAAAAAAAAApGU0/+zYxv/evZ//3r2e/969nv/evZ7/69jG/6VlNP4AAAACAAAAAAAA
  21.499 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.500 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.501 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApGU0/+zYxv/evZ7/3r2e/969nv/evZ7/7NjG/6Rl
  21.502 +        NP8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.503 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.504 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApGU0/+vXxf/r18X/69fE/+vX
  21.505 +        xf/r18T/69fF/6RlNP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.506 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.507 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApGU0+qVm
  21.508 +        NfulZjX7pWc2+6ZnN/umZzf7pmg3+6RlNPoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.509 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.510 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.511 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.512 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.513 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.514 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.515 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.516 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.517 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.518 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.519 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.520 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.521 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.522 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.523 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.524 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.525 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.526 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.527 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.528 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.529 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.530 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.531 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.532 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.533 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.534 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.535 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.536 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.537 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.538 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.539 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.540 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.541 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.542 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.543 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  21.544 +        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
  21.545 +        /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////
  21.546 +        AAD//+AD//8AAP//AAD//wAA//wAAH//AAD//gAAf/8AAP//AAH//wAA///wD///AAD///AP//8AAP//
  21.547 +        8A///wAA///wD///AAD///AP//8AAP//8A///wAA/8AAAAP/AAD/wAAAA/8AAP/AAAAD/wAA/8AAAAP/
  21.548 +        AAD/wAAAA/8AAP/AAAAD/wAA/8AAAAP/AAD/wAAAA/8AAP//8Af//wAA///wD///AAD///AP//8AAP//
  21.549 +        8A///wAA///wD///AAD///AP//8AAP//8A///wAA///wD///AAD///AP//8AAP//8A///wAA////////
  21.550 +        AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP//
  21.551 +        /////wAA////////AAD///////8AAA==
  21.552 +</value>
  21.553 +  </data>
  21.554 +</root>
  21.555 \ No newline at end of file
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/FrmNewUnitEquipment.cs	Fri Dec 19 15:57:51 2008 +0000
    22.3 @@ -0,0 +1,269 @@
    22.4 +using System;
    22.5 +using System.Drawing;
    22.6 +using System.Collections;
    22.7 +using System.ComponentModel;
    22.8 +using System.Windows.Forms;
    22.9 +using IBBoard;
   22.10 +using IBBoard.Commands;
   22.11 +using IBBoard.WarFoundry.API;
   22.12 +using IBBoard.WarFoundry.API.Commands;
   22.13 +
   22.14 +namespace IBBoard.WarFoundry
   22.15 +{
   22.16 +	/// <summary>
   22.17 +	/// Summary description for FrmNewUnitEquipment.
   22.18 +	/// </summary>
   22.19 +	public class FrmNewUnitEquipment : System.Windows.Forms.Form
   22.20 +	{
   22.21 +		private Unit unit;
   22.22 +		private bool required;
   22.23 +		private CommandStack commandStack;
   22.24 +
   22.25 +		private System.Windows.Forms.NumericUpDown numEquipAmount;
   22.26 +		private System.Windows.Forms.Label lblPercent;
   22.27 +		private System.Windows.Forms.Label lblAmount;
   22.28 +		private System.Windows.Forms.Button bttnCancel;
   22.29 +		private System.Windows.Forms.Button bttnOkay;
   22.30 +		private System.Windows.Forms.CheckBox cbEquipAll;
   22.31 +		private System.Windows.Forms.Label lblItem;
   22.32 +		private System.Windows.Forms.ListBox listItems;
   22.33 +		/// <summary>
   22.34 +		/// Required designer variable.
   22.35 +		/// </summary>
   22.36 +		private System.ComponentModel.Container components = null;
   22.37 +
   22.38 +		public FrmNewUnitEquipment(Unit unit, CommandStack stack)
   22.39 +		{
   22.40 +			commandStack = stack;
   22.41 +			this.unit = unit;
   22.42 +			InitializeComponent();
   22.43 +			this.Text = "New equipment for " + unit.Name;
   22.44 +			object[] items = Arrays.Subtract(unit.GetAllowedOptionalEquipment(), unit.GetEquipment());
   22.45 +			listItems.Items.AddRange(items);
   22.46 +		}
   22.47 +
   22.48 +		/// <summary>
   22.49 +		/// Clean up any resources being used.
   22.50 +		/// </summary>
   22.51 +		protected override void Dispose( bool disposing )
   22.52 +		{
   22.53 +			if( disposing )
   22.54 +			{
   22.55 +				if(components != null)
   22.56 +				{
   22.57 +					components.Dispose();
   22.58 +				}
   22.59 +			}
   22.60 +			base.Dispose( disposing );
   22.61 +		}
   22.62 +
   22.63 +		#region Windows Form Designer generated code
   22.64 +		/// <summary>
   22.65 +		/// Required method for Designer support - do not modify
   22.66 +		/// the contents of this method with the code editor.
   22.67 +		/// </summary>
   22.68 +		private void InitializeComponent()
   22.69 +		{
   22.70 +			this.numEquipAmount = new System.Windows.Forms.NumericUpDown();
   22.71 +			this.lblPercent = new System.Windows.Forms.Label();
   22.72 +			this.lblAmount = new System.Windows.Forms.Label();
   22.73 +			this.bttnCancel = new System.Windows.Forms.Button();
   22.74 +			this.bttnOkay = new System.Windows.Forms.Button();
   22.75 +			this.cbEquipAll = new System.Windows.Forms.CheckBox();
   22.76 +			this.lblItem = new System.Windows.Forms.Label();
   22.77 +			this.listItems = new System.Windows.Forms.ListBox();
   22.78 +			((System.ComponentModel.ISupportInitialize)(this.numEquipAmount)).BeginInit();
   22.79 +			this.SuspendLayout();
   22.80 +			// 
   22.81 +			// numEquipAmount
   22.82 +			// 
   22.83 +			this.numEquipAmount.Enabled = false;
   22.84 +			this.numEquipAmount.Location = new System.Drawing.Point(88, 80);
   22.85 +			this.numEquipAmount.Name = "numEquipAmount";
   22.86 +			this.numEquipAmount.Size = new System.Drawing.Size(144, 20);
   22.87 +			this.numEquipAmount.TabIndex = 0;
   22.88 +			this.numEquipAmount.ValueChanged += new System.EventHandler(this.numEquipAmount_ValueChanged);
   22.89 +			// 
   22.90 +			// lblPercent
   22.91 +			// 
   22.92 +			this.lblPercent.Location = new System.Drawing.Point(208, 80);
   22.93 +			this.lblPercent.Name = "lblPercent";
   22.94 +			this.lblPercent.Size = new System.Drawing.Size(16, 16);
   22.95 +			this.lblPercent.TabIndex = 1;
   22.96 +			this.lblPercent.Text = "%";
   22.97 +			this.lblPercent.Visible = false;
   22.98 +			// 
   22.99 +			// lblAmount
  22.100 +			// 
  22.101 +			this.lblAmount.Location = new System.Drawing.Point(8, 80);
  22.102 +			this.lblAmount.Name = "lblAmount";
  22.103 +			this.lblAmount.Size = new System.Drawing.Size(72, 23);
  22.104 +			this.lblAmount.TabIndex = 2;
  22.105 +			this.lblAmount.Text = "amount";
  22.106 +			this.lblAmount.TextAlign = System.Drawing.ContentAlignment.TopRight;
  22.107 +			// 
  22.108 +			// bttnCancel
  22.109 +			// 
  22.110 +			this.bttnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
  22.111 +			this.bttnCancel.FlatStyle = System.Windows.Forms.FlatStyle.System;
  22.112 +			this.bttnCancel.Location = new System.Drawing.Point(160, 136);
  22.113 +			this.bttnCancel.Name = "bttnCancel";
  22.114 +			this.bttnCancel.TabIndex = 3;
  22.115 +			this.bttnCancel.Text = "cancel";
  22.116 +			this.bttnCancel.Click += new System.EventHandler(this.bttnCancel_Click);
  22.117 +			// 
  22.118 +			// bttnOkay
  22.119 +			// 
  22.120 +			this.bttnOkay.Enabled = false;
  22.121 +			this.bttnOkay.FlatStyle = System.Windows.Forms.FlatStyle.System;
  22.122 +			this.bttnOkay.Location = new System.Drawing.Point(8, 136);
  22.123 +			this.bttnOkay.Name = "bttnOkay";
  22.124 +			this.bttnOkay.TabIndex = 4;
  22.125 +			this.bttnOkay.Text = "okay";
  22.126 +			this.bttnOkay.Click += new System.EventHandler(this.bttnOkay_Click);
  22.127 +			// 
  22.128 +			// cbEquipAll
  22.129 +			// 
  22.130 +			this.cbEquipAll.Enabled = false;
  22.131 +			this.cbEquipAll.FlatStyle = System.Windows.Forms.FlatStyle.System;
  22.132 +			this.cbEquipAll.Location = new System.Drawing.Point(88, 104);
  22.133 +			this.cbEquipAll.Name = "cbEquipAll";
  22.134 +			this.cbEquipAll.TabIndex = 5;
  22.135 +			this.cbEquipAll.Text = "equip all";
  22.136 +			this.cbEquipAll.CheckedChanged += new System.EventHandler(this.cbEquipAll_CheckedChanged);
  22.137 +			// 
  22.138 +			// lblItem
  22.139 +			// 
  22.140 +			this.lblItem.Location = new System.Drawing.Point(0, 8);
  22.141 +			this.lblItem.Name = "lblItem";
  22.142 +			this.lblItem.Size = new System.Drawing.Size(80, 23);
  22.143 +			this.lblItem.TabIndex = 6;
  22.144 +			this.lblItem.Text = "item";
  22.145 +			this.lblItem.TextAlign = System.Drawing.ContentAlignment.TopRight;
  22.146 +			// 
  22.147 +			// listItems
  22.148 +			// 
  22.149 +			this.listItems.Location = new System.Drawing.Point(88, 8);
  22.150 +			this.listItems.Name = "listItems";
  22.151 +			this.listItems.Size = new System.Drawing.Size(144, 69);
  22.152 +			this.listItems.TabIndex = 7;
  22.153 +			this.listItems.SelectedIndexChanged += new System.EventHandler(this.listItems_SelectedIndexChanged);
  22.154 +			// 
  22.155 +			// FrmNewUnitEquipment
  22.156 +			// 
  22.157 +			this.AcceptButton = this.bttnOkay;
  22.158 +			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
  22.159 +			this.CancelButton = this.bttnCancel;
  22.160 +			this.ClientSize = new System.Drawing.Size(240, 164);
  22.161 +			this.ControlBox = false;
  22.162 +			this.Controls.Add(this.listItems);
  22.163 +			this.Controls.Add(this.lblItem);
  22.164 +			this.Controls.Add(this.cbEquipAll);
  22.165 +			this.Controls.Add(this.bttnOkay);
  22.166 +			this.Controls.Add(this.bttnCancel);
  22.167 +			this.Controls.Add(this.lblAmount);
  22.168 +			this.Controls.Add(this.numEquipAmount);
  22.169 +			this.Controls.Add(this.lblPercent);
  22.170 +			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
  22.171 +			this.Name = "FrmNewUnitEquipment";
  22.172 +			this.ShowInTaskbar = false;
  22.173 +			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
  22.174 +			this.Text = "FrmEditUnitEquipment";
  22.175 +			((System.ComponentModel.ISupportInitialize)(this.numEquipAmount)).EndInit();
  22.176 +			this.ResumeLayout(false);
  22.177 +
  22.178 +		}
  22.179 +		#endregion
  22.180 +
  22.181 +		private void bttnOkay_Click(object sender, System.EventArgs e)
  22.182 +		{
  22.183 +			setValue();
  22.184 +			this.Close();
  22.185 +		}
  22.186 +
  22.187 +		private void setValue()
  22.188 +		{
  22.189 +			UnitEquipmentItem equipItem = (UnitEquipmentItem)listItems.SelectedItem;
  22.190 +			EquipmentItem equip = equipItem.EquipmentItem;
  22.191 +
  22.192 +			if (cbEquipAll.Checked)
  22.193 +			{
  22.194 +				commandStack.Execute(new SetUnitEquipmentAmountCommand(unit, equip, -1));
  22.195 +			}
  22.196 +			else
  22.197 +			{
  22.198 +				if (equip.IsRatioLimit)
  22.199 +				{
  22.200 +					commandStack.Execute(new SetUnitEquipmentAmountCommand(unit, equip, (float)((double)numEquipAmount.Value / 100.0)));
  22.201 +				}
  22.202 +				else
  22.203 +				{
  22.204 +					commandStack.Execute(new SetUnitEquipmentAmountCommand(unit, equip, (float)numEquipAmount.Value));
  22.205 +				}
  22.206 +			}
  22.207 +		}
  22.208 +
  22.209 +		private void bttnCancel_Click(object sender, System.EventArgs e)
  22.210 +		{
  22.211 +			this.Close();
  22.212 +		}
  22.213 +
  22.214 +		private void cbEquipAll_CheckedChanged(object sender, System.EventArgs e)
  22.215 +		{
  22.216 +			numEquipAmount.Enabled = ((UnitEquipmentItem)listItems.SelectedItem).EquipmentItem.MinNumber != -1 && !cbEquipAll.Checked;
  22.217 +			setOkayButton();
  22.218 +		}
  22.219 +
  22.220 +		private void listItems_SelectedIndexChanged(object sender, System.EventArgs e)
  22.221 +		{
  22.222 +			refreshNumber();
  22.223 +			setOkayButton();
  22.224 +		}
  22.225 +
  22.226 +		private void refreshNumber()
  22.227 +		{
  22.228 +			if (listItems.SelectedIndex > -1)
  22.229 +			{
  22.230 +				UnitEquipmentItem equipItem = (UnitEquipmentItem)listItems.SelectedItem;
  22.231 +				EquipmentItem equip = equipItem.EquipmentItem;
  22.232 +				required = equipItem.IsRequired;
  22.233 +
  22.234 +				if (equip.IsRatioLimit)
  22.235 +				{
  22.236 +					numEquipAmount.Minimum = (decimal)Math.Round(equip.MinNumber * 100, 2);
  22.237 +					numEquipAmount.Maximum = (decimal)Math.Round(equip.MaxNumber * 100, 2);
  22.238 +					numEquipAmount.Value = numEquipAmount.Minimum;
  22.239 +					cbEquipAll.Enabled = false;
  22.240 +					lblPercent.Visible = true;
  22.241 +					numEquipAmount.Width = 120;
  22.242 +				}
  22.243 +				else
  22.244 +				{
  22.245 +					numEquipAmount.Minimum = (decimal)(equip.MinNumber != -1 ? equip.MinNumber : unit.Size);
  22.246 +					numEquipAmount.Maximum = (decimal)(equip.MaxNumber != -1 ? equip.MaxNumber : unit.Size);
  22.247 +					numEquipAmount.Value = numEquipAmount.Minimum;
  22.248 +					cbEquipAll.Enabled = equip.MinNumber != -1;
  22.249 +					cbEquipAll.Checked = equip.MinNumber == -1;
  22.250 +					numEquipAmount.Width = 144;
  22.251 +				}
  22.252 +			}
  22.253 +			else
  22.254 +			{
  22.255 +				numEquipAmount.Minimum = 0;
  22.256 +				numEquipAmount.Value = 0;
  22.257 +				numEquipAmount.Enabled = false;
  22.258 +				cbEquipAll.Enabled = false;
  22.259 +			}
  22.260 +		}
  22.261 +
  22.262 +		private void setOkayButton()
  22.263 +		{
  22.264 +			bttnOkay.Enabled = listItems.SelectedIndex > -1 && (cbEquipAll.Checked || (numEquipAmount.Enabled && numEquipAmount.Value > 0));
  22.265 +		}
  22.266 +
  22.267 +		private void numEquipAmount_ValueChanged(object sender, System.EventArgs e)
  22.268 +		{			
  22.269 +			setOkayButton();
  22.270 +		}
  22.271 +	}
  22.272 +}
    23.1 Binary file FrmNewUnitEquipment.resources has changed
    24.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    24.2 +++ b/FrmNewUnitEquipment.resx	Fri Dec 19 15:57:51 2008 +0000
    24.3 @@ -0,0 +1,202 @@
    24.4 +<?xml version="1.0" encoding="utf-8"?>
    24.5 +<root>
    24.6 +  <!-- 
    24.7 +    Microsoft ResX Schema 
    24.8 +    
    24.9 +    Version 1.3
   24.10 +    
   24.11 +    The primary goals of this format is to allow a simple XML format 
   24.12 +    that is mostly human readable. The generation and parsing of the 
   24.13 +    various data types are done through the TypeConverter classes 
   24.14 +    associated with the data types.
   24.15 +    
   24.16 +    Example:
   24.17 +    
   24.18 +    ... ado.net/XML headers & schema ...
   24.19 +    <resheader name="resmimetype">text/microsoft-resx</resheader>
   24.20 +    <resheader name="version">1.3</resheader>
   24.21 +    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
   24.22 +    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
   24.23 +    <data name="Name1">this is my long string</data>
   24.24 +    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
   24.25 +    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
   24.26 +        [base64 mime encoded serialized .NET Framework object]
   24.27 +    </data>
   24.28 +    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
   24.29 +        [base64 mime encoded string representing a byte array form of the .NET Framework object]
   24.30 +    </data>
   24.31 +                
   24.32 +    There are any number of "resheader" rows that contain simple 
   24.33 +    name/value pairs.
   24.34 +    
   24.35 +    Each data row contains a name, and value. The row also contains a 
   24.36 +    type or mimetype. Type corresponds to a .NET class that support 
   24.37 +    text/value conversion through the TypeConverter architecture. 
   24.38 +    Classes that don't support this are serialized and stored with the 
   24.39 +    mimetype set.
   24.40 +    
   24.41 +    The mimetype is used forserialized objects, and tells the 
   24.42 +    ResXResourceReader how to depersist the object. This is currently not 
   24.43 +    extensible. For a given mimetype the value must be set accordingly:
   24.44 +    
   24.45 +    Note - application/x-microsoft.net.object.binary.base64 is the format 
   24.46 +    that the ResXResourceWriter will generate, however the reader can 
   24.47 +    read any of the formats listed below.
   24.48 +    
   24.49 +    mimetype: application/x-microsoft.net.object.binary.base64
   24.50 +    value   : The object must be serialized with 
   24.51 +            : System.Serialization.Formatters.Binary.BinaryFormatter
   24.52 +            : and then encoded with base64 encoding.
   24.53 +    
   24.54 +    mimetype: application/x-microsoft.net.object.soap.base64
   24.55 +    value   : The object must be serialized with 
   24.56 +            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
   24.57 +            : and then encoded with base64 encoding.
   24.58 +
   24.59 +    mimetype: application/x-microsoft.net.object.bytearray.base64
   24.60 +    value   : The object must be serialized into a byte array 
   24.61 +            : using a System.ComponentModel.TypeConverter
   24.62 +            : and then encoded with base64 encoding.
   24.63 +    -->
   24.64 +  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
   24.65 +    <xsd:element name="root" msdata:IsDataSet="true">
   24.66 +      <xsd:complexType>
   24.67 +        <xsd:choice maxOccurs="unbounded">
   24.68 +          <xsd:element name="data">
   24.69 +            <xsd:complexType>
   24.70 +              <xsd:sequence>
   24.71 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
   24.72 +                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
   24.73 +              </xsd:sequence>
   24.74 +              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
   24.75 +              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
   24.76 +              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
   24.77 +            </xsd:complexType>
   24.78 +          </xsd:element>
   24.79 +          <xsd:element name="resheader">
   24.80 +            <xsd:complexType>
   24.81 +              <xsd:sequence>
   24.82 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
   24.83 +              </xsd:sequence>
   24.84 +              <xsd:attribute name="name" type="xsd:string" use="required" />
   24.85 +            </xsd:complexType>
   24.86 +          </xsd:element>
   24.87 +        </xsd:choice>
   24.88 +      </xsd:complexType>
   24.89 +    </xsd:element>
   24.90 +  </xsd:schema>
   24.91 +  <resheader name="resmimetype">
   24.92 +    <value>text/microsoft-resx</value>
   24.93 +  </resheader>
   24.94 +  <resheader name="version">
   24.95 +    <value>1.3</value>
   24.96 +  </resheader>
   24.97 +  <resheader name="reader">
   24.98 +    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   24.99 +  </resheader>
  24.100 +  <resheader name="writer">
  24.101 +    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  24.102 +  </resheader>
  24.103 +  <data name="numEquipAmount.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.104 +    <value>False</value>
  24.105 +  </data>
  24.106 +  <data name="numEquipAmount.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.107 +    <value>Private</value>
  24.108 +  </data>
  24.109 +  <data name="numEquipAmount.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.110 +    <value>Private</value>
  24.111 +  </data>
  24.112 +  <data name="lblPercent.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.113 +    <value>False</value>
  24.114 +  </data>
  24.115 +  <data name="lblPercent.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.116 +    <value>Private</value>
  24.117 +  </data>
  24.118 +  <data name="lblPercent.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.119 +    <value>Private</value>
  24.120 +  </data>
  24.121 +  <data name="lblAmount.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.122 +    <value>Private</value>
  24.123 +  </data>
  24.124 +  <data name="lblAmount.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.125 +    <value>False</value>
  24.126 +  </data>
  24.127 +  <data name="lblAmount.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.128 +    <value>Private</value>
  24.129 +  </data>
  24.130 +  <data name="bttnCancel.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.131 +    <value>False</value>
  24.132 +  </data>
  24.133 +  <data name="bttnCancel.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.134 +    <value>Private</value>
  24.135 +  </data>
  24.136 +  <data name="bttnCancel.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.137 +    <value>Private</value>
  24.138 +  </data>
  24.139 +  <data name="bttnOkay.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.140 +    <value>False</value>
  24.141 +  </data>
  24.142 +  <data name="bttnOkay.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.143 +    <value>Private</value>
  24.144 +  </data>
  24.145 +  <data name="bttnOkay.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.146 +    <value>Private</value>
  24.147 +  </data>
  24.148 +  <data name="cbEquipAll.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.149 +    <value>False</value>
  24.150 +  </data>
  24.151 +  <data name="cbEquipAll.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.152 +    <value>Private</value>
  24.153 +  </data>
  24.154 +  <data name="cbEquipAll.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.155 +    <value>Private</value>
  24.156 +  </data>
  24.157 +  <data name="lblItem.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.158 +    <value>False</value>
  24.159 +  </data>
  24.160 +  <data name="lblItem.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.161 +    <value>Private</value>
  24.162 +  </data>
  24.163 +  <data name="lblItem.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.164 +    <value>Private</value>
  24.165 +  </data>
  24.166 +  <data name="listItems.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.167 +    <value>Private</value>
  24.168 +  </data>
  24.169 +  <data name="listItems.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.170 +    <value>False</value>
  24.171 +  </data>
  24.172 +  <data name="listItems.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.173 +    <value>Private</value>
  24.174 +  </data>
  24.175 +  <data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.176 +    <value>False</value>
  24.177 +  </data>
  24.178 +  <data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.179 +    <value>False</value>
  24.180 +  </data>
  24.181 +  <data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.182 +    <value>False</value>
  24.183 +  </data>
  24.184 +  <data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  24.185 +    <value>8, 8</value>
  24.186 +  </data>
  24.187 +  <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.188 +    <value>(Default)</value>
  24.189 +  </data>
  24.190 +  <data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.191 +    <value>True</value>
  24.192 +  </data>
  24.193 +  <data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.194 +    <value>80</value>
  24.195 +  </data>
  24.196 +  <data name="$this.Name">
  24.197 +    <value>FrmNewUnitEquipment</value>
  24.198 +  </data>
  24.199 +  <data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.200 +    <value>True</value>
  24.201 +  </data>
  24.202 +  <data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  24.203 +    <value>Private</value>
  24.204 +  </data>
  24.205 +</root>
  24.206 \ No newline at end of file
    25.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.2 +++ b/FrmReplaceUnitEquipment.cs	Fri Dec 19 15:57:51 2008 +0000
    25.3 @@ -0,0 +1,271 @@
    25.4 +using System;
    25.5 +using System.Drawing;
    25.6 +using System.Collections;
    25.7 +using System.ComponentModel;
    25.8 +using System.Windows.Forms;
    25.9 +using IBBoard;
   25.10 +using IBBoard.Commands;
   25.11 +using IBBoard.WarFoundry.API;
   25.12 +using IBBoard.WarFoundry.API.Commands;
   25.13 +
   25.14 +namespace IBBoard.WarFoundry
   25.15 +{
   25.16 +	/// <summary>
   25.17 +	/// Summary description for FrmNewUnitEquipment.
   25.18 +	/// </summary>
   25.19 +	public class FrmReplaceUnitEquipment : System.Windows.Forms.Form
   25.20 +	{
   25.21 +		private Unit unit;
   25.22 +		private EquipmentItem oldItem;
   25.23 +		private bool required;
   25.24 +		private CommandStack commandStack;
   25.25 +
   25.26 +		private System.Windows.Forms.NumericUpDown numEquipAmount;
   25.27 +		private System.Windows.Forms.Label lblPercent;
   25.28 +		private System.Windows.Forms.Label lblAmount;
   25.29 +		private System.Windows.Forms.Button bttnCancel;
   25.30 +		private System.Windows.Forms.Button bttnOkay;
   25.31 +		private System.Windows.Forms.CheckBox cbEquipAll;
   25.32 +		private System.Windows.Forms.Label lblItem;
   25.33 +		private System.Windows.Forms.ListBox listItems;
   25.34 +		/// <summary>
   25.35 +		/// Required designer variable.
   25.36 +		/// </summary>
   25.37 +		private System.ComponentModel.Container components = null;
   25.38 +
   25.39 +		public FrmReplaceUnitEquipment(Unit unit, UnitEquipmentItem item, CommandStack stack)
   25.40 +		{
   25.41 +			commandStack = stack;
   25.42 +			this.unit = unit;
   25.43 +			oldItem = item.EquipmentItem;
   25.44 +			InitializeComponent();
   25.45 +			this.Text = "Replace " + item.EquipmentItem.Name + " with new equipment";
   25.46 +			object[] items = Arrays.Subtract(unit.UnitType.GetEquipmentItemsByExclusionGroup(item.MutexGroup), unit.GetEquipment());
   25.47 +			listItems.Items.AddRange(items);
   25.48 +		}
   25.49 +
   25.50 +		/// <summary>
   25.51 +		/// Clean up any resources being used.
   25.52 +		/// </summary>
   25.53 +		protected override void Dispose( bool disposing )
   25.54 +		{
   25.55 +			if( disposing )
   25.56 +			{
   25.57 +				if(components != null)
   25.58 +				{
   25.59 +					components.Dispose();
   25.60 +				}
   25.61 +			}
   25.62 +			base.Dispose( disposing );
   25.63 +		}
   25.64 +
   25.65 +		#region Windows Form Designer generated code
   25.66 +		/// <summary>
   25.67 +		/// Required method for Designer support - do not modify
   25.68 +		/// the contents of this method with the code editor.
   25.69 +		/// </summary>
   25.70 +		private void InitializeComponent()
   25.71 +		{
   25.72 +			this.numEquipAmount = new System.Windows.Forms.NumericUpDown();
   25.73 +			this.lblPercent = new System.Windows.Forms.Label();
   25.74 +			this.lblAmount = new System.Windows.Forms.Label();
   25.75 +			this.bttnCancel = new System.Windows.Forms.Button();
   25.76 +			this.bttnOkay = new System.Windows.Forms.Button();
   25.77 +			this.cbEquipAll = new System.Windows.Forms.CheckBox();
   25.78 +			this.lblItem = new System.Windows.Forms.Label();
   25.79 +			this.listItems = new System.Windows.Forms.ListBox();
   25.80 +			((System.ComponentModel.ISupportInitialize)(this.numEquipAmount)).BeginInit();
   25.81 +			this.SuspendLayout();
   25.82 +			// 
   25.83 +			// numEquipAmount
   25.84 +			// 
   25.85 +			this.numEquipAmount.Enabled = false;
   25.86 +			this.numEquipAmount.Location = new System.Drawing.Point(88, 80);
   25.87 +			this.numEquipAmount.Name = "numEquipAmount";
   25.88 +			this.numEquipAmount.Size = new System.Drawing.Size(144, 20);
   25.89 +			this.numEquipAmount.TabIndex = 0;
   25.90 +			this.numEquipAmount.ValueChanged += new System.EventHandler(this.numEquipAmount_ValueChanged);
   25.91 +			// 
   25.92 +			// lblPercent
   25.93 +			// 
   25.94 +			this.lblPercent.Location = new System.Drawing.Point(208, 80);
   25.95 +			this.lblPercent.Name = "lblPercent";
   25.96 +			this.lblPercent.Size = new System.Drawing.Size(16, 16);
   25.97 +			this.lblPercent.TabIndex = 1;
   25.98 +			this.lblPercent.Text = "%";
   25.99 +			this.lblPercent.Visible = false;
  25.100 +			// 
  25.101 +			// lblAmount
  25.102 +			// 
  25.103 +			this.lblAmount.Location = new System.Drawing.Point(8, 80);
  25.104 +			this.lblAmount.Name = "lblAmount";
  25.105 +			this.lblAmount.Size = new System.Drawing.Size(72, 23);
  25.106 +			this.lblAmount.TabIndex = 2;
  25.107 +			this.lblAmount.Text = "amount";
  25.108 +			this.lblAmount.TextAlign = System.Drawing.ContentAlignment.TopRight;
  25.109 +			// 
  25.110 +			// bttnCancel
  25.111 +			// 
  25.112 +			this.bttnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
  25.113 +			this.bttnCancel.FlatStyle = System.Windows.Forms.FlatStyle.System;
  25.114 +			this.bttnCancel.Location = new System.Drawing.Point(160, 136);
  25.115 +			this.bttnCancel.Name = "bttnCancel";
  25.116 +			this.bttnCancel.TabIndex = 3;
  25.117 +			this.bttnCancel.Text = "cancel";
  25.118 +			this.bttnCancel.Click += new System.EventHandler(this.bttnCancel_Click);
  25.119 +			// 
  25.120 +			// bttnOkay
  25.121 +			// 
  25.122 +			this.bttnOkay.Enabled = false;
  25.123 +			this.bttnOkay.FlatStyle = System.Windows.Forms.FlatStyle.System;
  25.124 +			this.bttnOkay.Location = new System.Drawing.Point(8, 136);
  25.125 +			this.bttnOkay.Name = "bttnOkay";
  25.126 +			this.bttnOkay.TabIndex = 4;
  25.127 +			this.bttnOkay.Text = "okay";
  25.128 +			this.bttnOkay.Click += new System.EventHandler(this.bttnOkay_Click);
  25.129 +			// 
  25.130 +			// cbEquipAll
  25.131 +			// 
  25.132 +			this.cbEquipAll.Enabled = false;
  25.133 +			this.cbEquipAll.FlatStyle = System.Windows.Forms.FlatStyle.System;
  25.134 +			this.cbEquipAll.Location = new System.Drawing.Point(88, 104);
  25.135 +			this.cbEquipAll.Name = "cbEquipAll";
  25.136 +			this.cbEquipAll.TabIndex = 5;
  25.137 +			this.cbEquipAll.Text = "equip all";
  25.138 +			this.cbEquipAll.CheckedChanged += new System.EventHandler(this.cbEquipAll_CheckedChanged);
  25.139 +			// 
  25.140 +			// lblItem
  25.141 +			// 
  25.142 +			this.lblItem.Location = new System.Drawing.Point(0, 8);
  25.143 +			this.lblItem.Name = "lblItem";
  25.144 +			this.lblItem.Size = new System.Drawing.Size(80, 23);
  25.145 +			this.lblItem.TabIndex = 6;
  25.146 +			this.lblItem.Text = "item";
  25.147 +			this.lblItem.TextAlign = System.Drawing.ContentAlignment.TopRight;
  25.148 +			// 
  25.149 +			// listItems
  25.150 +			// 
  25.151 +			this.listItems.Location = new System.Drawing.Point(88, 8);
  25.152 +			this.listItems.Name = "listItems";
  25.153 +			this.listItems.Size = new System.Drawing.Size(144, 69);
  25.154 +			this.listItems.TabIndex = 7;
  25.155 +			this.listItems.SelectedIndexChanged += new System.EventHandler(this.listItems_SelectedIndexChanged);
  25.156 +			// 
  25.157 +			// FrmReplaceUnitEquipment
  25.158 +			// 
  25.159 +			this.AcceptButton = this.bttnOkay;
  25.160 +			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
  25.161 +			this.CancelButton = this.bttnCancel;
  25.162 +			this.ClientSize = new System.Drawing.Size(240, 164);
  25.163 +			this.ControlBox = false;
  25.164 +			this.Controls.Add(this.listItems);
  25.165 +			this.Controls.Add(this.lblItem);
  25.166 +			this.Controls.Add(this.cbEquipAll);
  25.167 +			this.Controls.Add(this.bttnOkay);
  25.168 +			this.Controls.Add(this.bttnCancel);
  25.169 +			this.Controls.Add(this.lblAmount);
  25.170 +			this.Controls.Add(this.numEquipAmount);
  25.171 +			this.Controls.Add(this.lblPercent);
  25.172 +			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
  25.173 +			this.Name = "FrmReplaceUnitEquipment";
  25.174 +			this.ShowInTaskbar = false;
  25.175 +			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
  25.176 +			this.Text = "FrmEditUnitEquipment";
  25.177 +			((System.ComponentModel.ISupportInitialize)(this.numEquipAmount)).EndInit();
  25.178 +			this.ResumeLayout(false);
  25.179 +
  25.180 +		}
  25.181 +		#endregion
  25.182 +
  25.183 +		private void bttnOkay_Click(object sender, System.EventArgs e)
  25.184 +		{
  25.185 +			setValue();
  25.186 +			this.Close();
  25.187 +		}
  25.188 +
  25.189 +		private void setValue()
  25.190 +		{
  25.191 +			UnitEquipmentItem equipItem = (UnitEquipmentItem)listItems.SelectedItem;
  25.192 +			EquipmentItem equip = equipItem.EquipmentItem;
  25.193 +
  25.194 +			if (cbEquipAll.Checked)
  25.195 +			{
  25.196 +				commandStack.Execute(new ReplaceUnitEquipmentCommand(unit, oldItem, equip, -1));
  25.197 +			}
  25.198 +			else
  25.199 +			{
  25.200 +				if (equip.IsRatioLimit)
  25.201 +				{
  25.202 +					commandStack.Execute(new ReplaceUnitEquipmentCommand(unit, oldItem, equip, (float)((double)numEquipAmount.Value / 100.0)));
  25.203 +				}
  25.204 +				else
  25.205 +				{
  25.206 +					commandStack.Execute(new ReplaceUnitEquipmentCommand(unit, oldItem, equip, (float)numEquipAmount.Value));
  25.207 +				}
  25.208 +			}
  25.209 +		}
  25.210 +
  25.211 +		private void bttnCancel_Click(object sender, System.EventArgs e)
  25.212 +		{
  25.213 +			this.Close();
  25.214 +		}
  25.215 +
  25.216 +		private void cbEquipAll_CheckedChanged(object sender, System.EventArgs e)
  25.217 +		{
  25.218 +			numEquipAmount.Enabled = ((UnitEquipmentItem)listItems.SelectedItem).EquipmentItem.MinNumber != -1 && !cbEquipAll.Checked;
  25.219 +			setOkayButton();
  25.220 +		}
  25.221 +
  25.222 +		private void listItems_SelectedIndexChanged(object sender, System.EventArgs e)
  25.223 +		{
  25.224 +			refreshNumber();
  25.225 +			setOkayButton();
  25.226 +		}
  25.227 +
  25.228 +		private void refreshNumber()
  25.229 +		{
  25.230 +			if (listItems.SelectedIndex > -1)
  25.231 +			{
  25.232 +				UnitEquipmentItem equipItem = (UnitEquipmentItem)listItems.SelectedItem;
  25.233 +				EquipmentItem equip = equipItem.EquipmentItem;
  25.234 +				required = equipItem.IsRequired;
  25.235 +
  25.236 +				if (equip.IsRatioLimit)
  25.237 +				{
  25.238 +					numEquipAmount.Minimum = (decimal)Math.Round(equip.MinNumber * 100, 2);
  25.239 +					numEquipAmount.Maximum = (decimal)Math.Round(equip.MaxNumber * 100, 2);
  25.240 +					numEquipAmount.Value = numEquipAmount.Minimum;
  25.241 +					cbEquipAll.Enabled = false;
  25.242 +					lblPercent.Visible = true;
  25.243 +					numEquipAmount.Width = 120;
  25.244 +				}
  25.245 +				else
  25.246 +				{
  25.247 +					numEquipAmount.Minimum = (decimal)(equip.MinNumber != -1 ? equip.MinNumber : unit.Size);
  25.248 +					numEquipAmount.Maximum = (decimal)(equip.MaxNumber != -1 ? equip.MaxNumber : unit.Size);
  25.249 +					numEquipAmount.Value = numEquipAmount.Minimum;
  25.250 +					cbEquipAll.Enabled = (equip.MaxNumber == -1 && equip.MinNumber != -1);
  25.251 +					cbEquipAll.Checked = equip.MinNumber == -1;
  25.252 +					numEquipAmount.Width = 144;
  25.253 +				}
  25.254 +			}
  25.255 +			else
  25.256 +			{
  25.257 +				numEquipAmount.Minimum = 0;
  25.258 +				numEquipAmount.Value = 0;
  25.259 +				numEquipAmount.Enabled = false;
  25.260 +				cbEquipAll.Enabled = false;
  25.261 +			}
  25.262 +		}
  25.263 +
  25.264 +		private void setOkayButton()
  25.265 +		{
  25.266 +			bttnOkay.Enabled = listItems.SelectedIndex > -1 && (cbEquipAll.Checked || (numEquipAmount.Enabled && numEquipAmount.Value > 0));
  25.267 +		}
  25.268 +
  25.269 +		private void numEquipAmount_ValueChanged(object sender, System.EventArgs e)
  25.270 +		{			
  25.271 +			setOkayButton();
  25.272 +		}
  25.273 +	}
  25.274 +}
    26.1 Binary file FrmReplaceUnitEquipment.resources has changed
    27.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    27.2 +++ b/FrmReplaceUnitEquipment.resx	Fri Dec 19 15:57:51 2008 +0000
    27.3 @@ -0,0 +1,202 @@
    27.4 +<?xml version="1.0" encoding="utf-8"?>
    27.5 +<root>
    27.6 +  <!-- 
    27.7 +    Microsoft ResX Schema 
    27.8 +    
    27.9 +    Version 1.3
   27.10 +    
   27.11 +    The primary goals of this format is to allow a simple XML format 
   27.12 +    that is mostly human readable. The generation and parsing of the 
   27.13 +    various data types are done through the TypeConverter classes 
   27.14 +    associated with the data types.
   27.15 +    
   27.16 +    Example:
   27.17 +    
   27.18 +    ... ado.net/XML headers & schema ...
   27.19 +    <resheader name="resmimetype">text/microsoft-resx</resheader>
   27.20 +    <resheader name="version">1.3</resheader>
   27.21 +    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
   27.22 +    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
   27.23 +    <data name="Name1">this is my long string</data>
   27.24 +    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
   27.25 +    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
   27.26 +        [base64 mime encoded serialized .NET Framework object]
   27.27 +    </data>
   27.28 +    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
   27.29 +        [base64 mime encoded string representing a byte array form of the .NET Framework object]
   27.30 +    </data>
   27.31 +                
   27.32 +    There are any number of "resheader" rows that contain simple 
   27.33 +    name/value pairs.
   27.34 +    
   27.35 +    Each data row contains a name, and value. The row also contains a 
   27.36 +    type or mimetype. Type corresponds to a .NET class that support 
   27.37 +    text/value conversion through the TypeConverter architecture. 
   27.38 +    Classes that don't support this are serialized and stored with the 
   27.39 +    mimetype set.
   27.40 +    
   27.41 +    The mimetype is used forserialized objects, and tells the 
   27.42 +    ResXResourceReader how to depersist the object. This is currently not 
   27.43 +    extensible. For a given mimetype the value must be set accordingly:
   27.44 +    
   27.45 +    Note - application/x-microsoft.net.object.binary.base64 is the format 
   27.46 +    that the ResXResourceWriter will generate, however the reader can 
   27.47 +    read any of the formats listed below.
   27.48 +    
   27.49 +    mimetype: application/x-microsoft.net.object.binary.base64
   27.50 +    value   : The object must be serialized with 
   27.51 +            : System.Serialization.Formatters.Binary.BinaryFormatter
   27.52 +            : and then encoded with base64 encoding.
   27.53 +    
   27.54 +    mimetype: application/x-microsoft.net.object.soap.base64
   27.55 +    value   : The object must be serialized with 
   27.56 +            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
   27.57 +            : and then encoded with base64 encoding.
   27.58 +
   27.59 +    mimetype: application/x-microsoft.net.object.bytearray.base64
   27.60 +    value   : The object must be serialized into a byte array 
   27.61 +            : using a System.ComponentModel.TypeConverter
   27.62 +            : and then encoded with base64 encoding.
   27.63 +    -->
   27.64 +  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
   27.65 +    <xsd:element name="root" msdata:IsDataSet="true">
   27.66 +      <xsd:complexType>
   27.67 +        <xsd:choice maxOccurs="unbounded">
   27.68 +          <xsd:element name="data">
   27.69 +            <xsd:complexType>
   27.70 +              <xsd:sequence>
   27.71 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
   27.72 +                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
   27.73 +              </xsd:sequence>
   27.74 +              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
   27.75 +              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
   27.76 +              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
   27.77 +            </xsd:complexType>
   27.78 +          </xsd:element>
   27.79 +          <xsd:element name="resheader">
   27.80 +            <xsd:complexType>
   27.81 +              <xsd:sequence>
   27.82 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
   27.83 +              </xsd:sequence>
   27.84 +              <xsd:attribute name="name" type="xsd:string" use="required" />
   27.85 +            </xsd:complexType>
   27.86 +          </xsd:element>
   27.87 +        </xsd:choice>
   27.88 +      </xsd:complexType>
   27.89 +    </xsd:element>
   27.90 +  </xsd:schema>
   27.91 +  <resheader name="resmimetype">
   27.92 +    <value>text/microsoft-resx</value>
   27.93 +  </resheader>
   27.94 +  <resheader name="version">
   27.95 +    <value>1.3</value>
   27.96 +  </resheader>
   27.97 +  <resheader name="reader">
   27.98 +    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   27.99 +  </resheader>
  27.100 +  <resheader name="writer">
  27.101 +    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  27.102 +  </resheader>
  27.103 +  <data name="numEquipAmount.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.104 +    <value>False</value>
  27.105 +  </data>
  27.106 +  <data name="numEquipAmount.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.107 +    <value>Private</value>
  27.108 +  </data>
  27.109 +  <data name="numEquipAmount.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.110 +    <value>Private</value>
  27.111 +  </data>
  27.112 +  <data name="lblPercent.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.113 +    <value>False</value>
  27.114 +  </data>
  27.115 +  <data name="lblPercent.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.116 +    <value>Private</value>
  27.117 +  </data>
  27.118 +  <data name="lblPercent.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.119 +    <value>Private</value>
  27.120 +  </data>
  27.121 +  <data name="lblAmount.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.122 +    <value>False</value>
  27.123 +  </data>
  27.124 +  <data name="lblAmount.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.125 +    <value>Private</value>
  27.126 +  </data>
  27.127 +  <data name="lblAmount.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.128 +    <value>Private</value>
  27.129 +  </data>
  27.130 +  <data name="bttnCancel.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.131 +    <value>False</value>
  27.132 +  </data>
  27.133 +  <data name="bttnCancel.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.134 +    <value>Private</value>
  27.135 +  </data>
  27.136 +  <data name="bttnCancel.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.137 +    <value>Private</value>
  27.138 +  </data>
  27.139 +  <data name="bttnOkay.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.140 +    <value>False</value>
  27.141 +  </data>
  27.142 +  <data name="bttnOkay.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.143 +    <value>Private</value>
  27.144 +  </data>
  27.145 +  <data name="bttnOkay.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.146 +    <value>Private</value>
  27.147 +  </data>
  27.148 +  <data name="cbEquipAll.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.149 +    <value>False</value>
  27.150 +  </data>
  27.151 +  <data name="cbEquipAll.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.152 +    <value>Private</value>
  27.153 +  </data>
  27.154 +  <data name="cbEquipAll.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.155 +    <value>Private</value>
  27.156 +  </data>
  27.157 +  <data name="lblItem.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.158 +    <value>False</value>
  27.159 +  </data>
  27.160 +  <data name="lblItem.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.161 +    <value>Private</value>
  27.162 +  </data>
  27.163 +  <data name="lblItem.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.164 +    <value>Private</value>
  27.165 +  </data>
  27.166 +  <data name="listItems.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.167 +    <value>Private</value>
  27.168 +  </data>
  27.169 +  <data name="listItems.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.170 +    <value>False</value>
  27.171 +  </data>
  27.172 +  <data name="listItems.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.173 +    <value>Private</value>
  27.174 +  </data>
  27.175 +  <data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.176 +    <value>False</value>
  27.177 +  </data>
  27.178 +  <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.179 +    <value>(Default)</value>
  27.180 +  </data>
  27.181 +  <data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.182 +    <value>False</value>
  27.183 +  </data>
  27.184 +  <data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.185 +    <value>False</value>
  27.186 +  </data>
  27.187 +  <data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  27.188 +    <value>8, 8</value>
  27.189 +  </data>
  27.190 +  <data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.191 +    <value>True</value>
  27.192 +  </data>
  27.193 +  <data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.194 +    <value>80</value>
  27.195 +  </data>
  27.196 +  <data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.197 +    <value>True</value>
  27.198 +  </data>
  27.199 +  <data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  27.200 +    <value>Private</value>
  27.201 +  </data>
  27.202 +  <data name="$this.Name">
  27.203 +    <value>FrmReplaceUnitEquipment</value>
  27.204 +  </data>
  27.205 +</root>
  27.206 \ No newline at end of file
    28.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    28.2 +++ b/FrmSelectSystem.cs	Fri Dec 19 15:57:51 2008 +0000
    28.3 @@ -0,0 +1,172 @@
    28.4 +using System;
    28.5 +using System.IO;
    28.6 +using System.Drawing;
    28.7 +using System.Collections;
    28.8 +using System.ComponentModel;
    28.9 +using System.Windows.Forms;
   28.10 +using IBBoard;
   28.11 +using IBBoard.Lang;
   28.12 +using IBBoard.WarFoundry.API;
   28.13 +using IBBoard.Windows.Forms;
   28.14 +
   28.15 +namespace IBBoard.WarFoundry
   28.16 +{
   28.17 +	/// <summary>
   28.18 +	/// Summary description for FrmSelectSystem.
   28.19 +	/// </summary>
   28.20 +	public class FrmSelectSystem : IBBoard.Windows.Forms.IBBForm
   28.21 +	{
   28.22 +		private System.Windows.Forms.ListBox lstSystems;
   28.23 +		private IBBoard.Windows.Forms.IBBLabel lblSystemList;
   28.24 +		/// <summary>
   28.25 +		/// Required designer variable.
   28.26 +		/// </summary>
   28.27 +		private System.ComponentModel.Container components = null;
   28.28 +		private IBBoard.Windows.Forms.IBBButton bttnCancel;
   28.29 +		private IBBoard.Windows.Forms.IBBButton bttnSelectSystem;
   28.30 +
   28.31 +		private GameSystem selectedSystem;
   28.32 +
   28.33 +		public FrmSelectSystem() : this(null)
   28.34 +		{
   28.35 +		}
   28.36 +
   28.37 +        public FrmSelectSystem(WarFoundryFactory currFactory)
   28.38 +		{
   28.39 +			//
   28.40 +			// Required for Windows Form Designer support
   28.41 +			//
   28.42 +			InitializeComponent();
   28.43 +
   28.44 +			Translation.TranslateControl(this);
   28.45 +
   28.46 +			lstSystems.Items.Clear();
   28.47 +			GameSystem[] systems = currFactory.GetGameSystems();
   28.48 +
   28.49 +            lstSystems.DataSource = systems;
   28.50 +			
   28.51 +			/*for (int i = 0; i<systems.Length; i++)
   28.52 +			{
   28.53 +				lstSystems.Items.Add(systems[i].Name);
   28.54 +
   28.55 +				/*if (systems[i].Matches(defaultSystem))
   28.56 +				{
   28.57 +					lstSystems.SelectedIndex = i;
   28.58 +				}* /
   28.59 +			}*/
   28.60 +		}
   28.61 +
   28.62 +		/// <summary>
   28.63 +		/// Clean up any resources being used.
   28.64 +		/// </summary>
   28.65 +		protected override void Dispose( bool disposing )
   28.66 +		{
   28.67 +			if( disposing )
   28.68 +			{
   28.69 +				if(components != null)
   28.70 +				{
   28.71 +					components.Dispose();
   28.72 +				}
   28.73 +			}
   28.74 +			base.Dispose( disposing );
   28.75 +		}
   28.76 +
   28.77 +		#region Windows Form Designer generated code
   28.78 +		/// <summary>
   28.79 +		/// Required method for Designer support - do not modify
   28.80 +		/// the contents of this method with the code editor.
   28.81 +		/// </summary>
   28.82 +		private void InitializeComponent()
   28.83 +		{
   28.84 +			this.lstSystems = new System.Windows.Forms.ListBox();
   28.85 +			this.bttnSelectSystem = new IBBoard.Windows.Forms.IBBButton();
   28.86 +			this.lblSystemList = new IBBoard.Windows.Forms.IBBLabel();
   28.87 +			this.bttnCancel = new IBBoard.Windows.Forms.IBBButton();
   28.88 +			this.SuspendLayout();
   28.89 +			// 
   28.90 +			// lstSystems
   28.91 +			// 
   28.92 +			this.lstSystems.Location = new System.Drawing.Point(80, 8);
   28.93 +			this.lstSystems.Name = "lstSystems";
   28.94 +			this.lstSystems.Size = new System.Drawing.Size(216, 95);
   28.95 +			this.lstSystems.TabIndex = 0;
   28.96 +			this.lstSystems.SelectedIndexChanged += new System.EventHandler(this.lstSystems_SelectedIndexChanged);
   28.97 +			// 
   28.98 +			// bttnSelectSystem
   28.99 +			// 
  28.100 +			this.bttnSelectSystem.Enabled = false;
  28.101 +			this.bttnSelectSystem.FlatStyle = System.Windows.Forms.FlatStyle.System;
  28.102 +			this.bttnSelectSystem.Location = new System.Drawing.Point(192, 112);
  28.103 +			this.bttnSelectSystem.Name = "bttnSelectSystem";
  28.104 +			this.bttnSelectSystem.Size = new System.Drawing.Size(104, 24);
  28.105 +			this.bttnSelectSystem.TabIndex = 1;
  28.106 +			this.bttnSelectSystem.Text = "Select system";
  28.107 +			this.bttnSelectSystem.Click += new System.EventHandler(this.bttnSelectSystem_Click);
  28.108 +			// 
  28.109 +			// lblSystemList
  28.110 +			// 
  28.111 +			this.lblSystemList.Location = new System.Drawing.Point(0, 8);
  28.112 +			this.lblSystemList.Name = "lblSystemList";
  28.113 +			this.lblSystemList.Size = new System.Drawing.Size(80, 80);
  28.114 +			this.lblSystemList.TabIndex = 2;
  28.115 +			this.lblSystemList.Text = "system list";
  28.116 +			this.lblSystemList.TextAlign = System.Drawing.ContentAlignment.TopRight;
  28.117 +			// 
  28.118 +			// bttnCancel
  28.119 +			// 
  28.120 +			this.bttnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
  28.121 +			this.bttnCancel.FlatStyle = System.Windows.Forms.FlatStyle.System;
  28.122 +			this.bttnCancel.Location = new System.Drawing.Point(8, 112);
  28.123 +			this.bttnCancel.Name = "bttnCancel";
  28.124 +			this.bttnCancel.Size = new System.Drawing.Size(80, 24);
  28.125 +			this.bttnCancel.TabIndex = 3;
  28.126 +			this.bttnCancel.Text = "Cancel";
  28.127 +			this.bttnCancel.Click += new System.EventHandler(this.bttnCancel_Click);
  28.128 +			// 
  28.129 +			// FrmSelectSystem
  28.130 +			// 
  28.131 +			this.AcceptButton = this.bttnSelectSystem;
  28.132 +			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
  28.133 +			this.CancelButton = this.bttnCancel;
  28.134 +			this.ClientSize = new System.Drawing.Size(306, 142);
  28.135 +			this.ControlBox = false;
  28.136 +			this.Controls.Add(this.bttnCancel);
  28.137 +			this.Controls.Add(this.lblSystemList);
  28.138 +			this.Controls.Add(this.bttnSelectSystem);
  28.139 +			this.Controls.Add(this.lstSystems);
  28.140 +			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
  28.141 +			this.Name = "FrmSelectSystem";
  28.142 +			this.ShowInTaskbar = false;
  28.143 +			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
  28.144 +			this.Text = "FrmSelectSystem";
  28.145 +			this.ResumeLayout(false);
  28.146 +
  28.147 +		}
  28.148 +		#endregion
  28.149 +
  28.150 +		private void lstSystems_SelectedIndexChanged(object sender, System.EventArgs e)
  28.151 +		{
  28.152 +			bttnSelectSystem.Enabled = (lstSystems.SelectedIndex>-1);
  28.153 +		}
  28.154 +
  28.155 +		private void bttnSelectSystem_Click(object sender, System.EventArgs e)
  28.156 +		{
  28.157 +//            selectedSystem = lstSystems.
  28.158 +            //TODO: Set game system
  28.159 +
  28.160 +			this.DialogResult = DialogResult.OK;
  28.161 +			this.Close();
  28.162 +		}
  28.163 +
  28.164 +		private void bttnCancel_Click(object sender, System.EventArgs e)
  28.165 +		{
  28.166 +			this.DialogResult = DialogResult.Cancel;
  28.167 +			this.Close();
  28.168 +		}
  28.169 +
  28.170 +		public GameSystem GameSystem
  28.171 +		{
  28.172 +			get { return selectedSystem; }
  28.173 +		}
  28.174 +	}
  28.175 +}
    29.1 Binary file FrmSelectSystem.resources has changed
    30.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    30.2 +++ b/FrmSelectSystem.resx	Fri Dec 19 15:57:51 2008 +0000
    30.3 @@ -0,0 +1,166 @@
    30.4 +<?xml version="1.0" encoding="utf-8"?>
    30.5 +<root>
    30.6 +  <!-- 
    30.7 +    Microsoft ResX Schema 
    30.8 +    
    30.9 +    Version 1.3
   30.10 +    
   30.11 +    The primary goals of this format is to allow a simple XML format 
   30.12 +    that is mostly human readable. The generation and parsing of the 
   30.13 +    various data types are done through the TypeConverter classes 
   30.14 +    associated with the data types.
   30.15 +    
   30.16 +    Example:
   30.17 +    
   30.18 +    ... ado.net/XML headers & schema ...
   30.19 +    <resheader name="resmimetype">text/microsoft-resx</resheader>
   30.20 +    <resheader name="version">1.3</resheader>
   30.21 +    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
   30.22 +    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
   30.23 +    <data name="Name1">this is my long string</data>
   30.24 +    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
   30.25 +    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
   30.26 +        [base64 mime encoded serialized .NET Framework object]
   30.27 +    </data>
   30.28 +    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
   30.29 +        [base64 mime encoded string representing a byte array form of the .NET Framework object]
   30.30 +    </data>
   30.31 +                
   30.32 +    There are any number of "resheader" rows that contain simple 
   30.33 +    name/value pairs.
   30.34 +    
   30.35 +    Each data row contains a name, and value. The row also contains a 
   30.36 +    type or mimetype. Type corresponds to a .NET class that support 
   30.37 +    text/value conversion through the TypeConverter architecture. 
   30.38 +    Classes that don't support this are serialized and stored with the 
   30.39 +    mimetype set.
   30.40 +    
   30.41 +    The mimetype is used forserialized objects, and tells the 
   30.42 +    ResXResourceReader how to depersist the object. This is currently not 
   30.43 +    extensible. For a given mimetype the value must be set accordingly:
   30.44 +    
   30.45 +    Note - application/x-microsoft.net.object.binary.base64 is the format 
   30.46 +    that the ResXResourceWriter will generate, however the reader can 
   30.47 +    read any of the formats listed below.
   30.48 +    
   30.49 +    mimetype: application/x-microsoft.net.object.binary.base64
   30.50 +    value   : The object must be serialized with 
   30.51 +            : System.Serialization.Formatters.Binary.BinaryFormatter
   30.52 +            : and then encoded with base64 encoding.
   30.53 +    
   30.54 +    mimetype: application/x-microsoft.net.object.soap.base64
   30.55 +    value   : The object must be serialized with 
   30.56 +            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
   30.57 +            : and then encoded with base64 encoding.
   30.58 +
   30.59 +    mimetype: application/x-microsoft.net.object.bytearray.base64
   30.60 +    value   : The object must be serialized into a byte array 
   30.61 +            : using a System.ComponentModel.TypeConverter
   30.62 +            : and then encoded with base64 encoding.
   30.63 +    -->
   30.64 +  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
   30.65 +    <xsd:element name="root" msdata:IsDataSet="true">
   30.66 +      <xsd:complexType>
   30.67 +        <xsd:choice maxOccurs="unbounded">
   30.68 +          <xsd:element name="data">
   30.69 +            <xsd:complexType>
   30.70 +              <xsd:sequence>
   30.71 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
   30.72 +                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
   30.73 +              </xsd:sequence>
   30.74 +              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
   30.75 +              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
   30.76 +              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
   30.77 +            </xsd:complexType>
   30.78 +          </xsd:element>
   30.79 +          <xsd:element name="resheader">
   30.80 +            <xsd:complexType>
   30.81 +              <xsd:sequence>
   30.82 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
   30.83 +              </xsd:sequence>
   30.84 +              <xsd:attribute name="name" type="xsd:string" use="required" />
   30.85 +            </xsd:complexType>
   30.86 +          </xsd:element>
   30.87 +        </xsd:choice>
   30.88 +      </xsd:complexType>
   30.89 +    </xsd:element>
   30.90 +  </xsd:schema>
   30.91 +  <resheader name="resmimetype">
   30.92 +    <value>text/microsoft-resx</value>
   30.93 +  </resheader>
   30.94 +  <resheader name="version">
   30.95 +    <value>1.3</value>
   30.96 +  </resheader>
   30.97 +  <resheader name="reader">
   30.98 +    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   30.99 +  </resheader>
  30.100 +  <resheader name="writer">
  30.101 +    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  30.102 +  </resheader>
  30.103 +  <data name="lstSystems.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.104 +    <value>Private</value>
  30.105 +  </data>
  30.106 +  <data name="lstSystems.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.107 +    <value>False</value>
  30.108 +  </data>
  30.109 +  <data name="lstSystems.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.110 +    <value>Private</value>
  30.111 +  </data>
  30.112 +  <data name="bttnSelectSystem.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.113 +    <value>False</value>
  30.114 +  </data>
  30.115 +  <data name="bttnSelectSystem.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.116 +    <value>Private</value>
  30.117 +  </data>
  30.118 +  <data name="bttnSelectSystem.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.119 +    <value>Private</value>
  30.120 +  </data>
  30.121 +  <data name="lblSystemList.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.122 +    <value>False</value>
  30.123 +  </data>
  30.124 +  <data name="lblSystemList.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.125 +    <value>Private</value>
  30.126 +  </data>
  30.127 +  <data name="lblSystemList.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.128 +    <value>Private</value>
  30.129 +  </data>
  30.130 +  <data name="bttnCancel.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.131 +    <value>False</value>
  30.132 +  </data>
  30.133 +  <data name="bttnCancel.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.134 +    <value>Private</value>
  30.135 +  </data>
  30.136 +  <data name="bttnCancel.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.137 +    <value>Private</value>
  30.138 +  </data>
  30.139 +  <data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.140 +    <value>False</value>
  30.141 +  </data>
  30.142 +  <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.143 +    <value>(Default)</value>
  30.144 +  </data>
  30.145 +  <data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.146 +    <value>False</value>
  30.147 +  </data>
  30.148 +  <data name="$this.Name">
  30.149 +    <value>FrmSelectSystem</value>
  30.150 +  </data>
  30.151 +  <data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.152 +    <value>False</value>
  30.153 +  </data>
  30.154 +  <data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  30.155 +    <value>8, 8</value>
  30.156 +  </data>
  30.157 +  <data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.158 +    <value>True</value>
  30.159 +  </data>
  30.160 +  <data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.161 +    <value>80</value>
  30.162 +  </data>
  30.163 +  <data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.164 +    <value>True</value>
  30.165 +  </data>
  30.166 +  <data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  30.167 +    <value>Private</value>
  30.168 +  </data>
  30.169 +</root>
  30.170 \ No newline at end of file
    31.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    31.2 +++ b/FrmUnit.cs	Fri Dec 19 15:57:51 2008 +0000
    31.3 @@ -0,0 +1,505 @@
    31.4 +using System;
    31.5 +using System.Drawing;
    31.6 +using System.Data;
    31.7 +using System.Collections;
    31.8 +using System.ComponentModel;
    31.9 +using System.Windows.Forms;
   31.10 +using IBBoard.Commands;
   31.11 +using IBBoard.Windows.Forms;
   31.12 +using IBBoard.WarFoundry.API;
   31.13 +using IBBoard.WarFoundry.API.Commands;
   31.14 +
   31.15 +namespace IBBoard.WarFoundry
   31.16 +{
   31.17 +	///TODO: Separate weapons out into optional and required, where required only has button for replacing
   31.18 +
   31.19 +	/// <summary>
   31.20 +	/// Summary description for FrmUnit.
   31.21 +	/// </summary>
   31.22 +	public class FrmUnit : IBBoard.Windows.Forms.IBBForm
   31.23 +	{
   31.24 +		private Unit unit;
   31.25 +        private CommandStack commandStack;
   31.26 +		private System.Windows.Forms.DataGrid statsGrid;
   31.27 +		private System.Windows.Forms.TextBox tbUnitName;
   31.28 +		private System.Windows.Forms.NumericUpDown unitSize;
   31.29 +		private System.Windows.Forms.Label lblUnitSize;
   31.30 +		private System.Windows.Forms.Button bttnAddWeapon;
   31.31 +		private System.Windows.Forms.Button bttnRemoveWeapon;
   31.32 +		private System.Windows.Forms.Button bttnEditWeapon;
   31.33 +		private System.Windows.Forms.Label lblRequiredEquip;
   31.34 +		private System.Windows.Forms.ListBox reqdList;
   31.35 +		private System.Windows.Forms.ListBox optList;
   31.36 +		private System.Windows.Forms.Label lblOptionalEquip;
   31.37 +		private System.Windows.Forms.Button bttnReplaceWeapon;
   31.38 +		private System.Windows.Forms.Button bttnEditReqdWeapon;
   31.39 +		/// <summary>
   31.40 +		/// Required designer variable.
   31.41 +		/// </summary>
   31.42 +		private System.ComponentModel.Container components = null;
   31.43 +
   31.44 +		public FrmUnit(Unit toDisplay, CommandStack cmdStack)
   31.45 +		{
   31.46 +			unit = toDisplay;
   31.47 +            commandStack = cmdStack;
   31.48 +			//
   31.49 +			// Required for Windows Form Designer support
   31.50 +			//
   31.51 +			InitializeComponent();
   31.52 +
   31.53 +			tbUnitName.Text = unit.Name;
   31.54 +			Text = unit.Name;
   31.55 +			unit.NameChanged+=new StringValChangedDelegate(unit_NameChanged);
   31.56 +			unit.UnitSizeChanged+= new IntValChangedDelegate(unit_UnitSizeChanged);
   31.57 +			unit.UnitEquipmentAmountChanged+=new FloatValChangedDelegate(unit_UnitEquipmentAmountChanged);
   31.58 +
   31.59 +			if (unit.UnitType.MaxSize==unit.UnitType.MinSize)
   31.60 +			{
   31.61 +				unitSize.Value = unit.UnitType.MaxSize;
   31.62 +				unitSize.Visible = false;
   31.63 +				lblUnitSize.Visible = false;
   31.64 +			}
   31.65 +			else
   31.66 +			{
   31.67 +				unitSize.Value = unit.Size;
   31.68 +				unitSize.Maximum = (unit.UnitType.MaxSize == -1 ? int.MaxValue : unit.UnitType.MaxSize);
   31.69 +				unitSize.Minimum = unit.UnitType.MinSize;
   31.70 +			}
   31.71 +
   31.72 +			setStats();
   31.73 +			setWeapons();
   31.74 +		}
   31.75 +
   31.76 +		private void setStats()
   31.77 +		{
   31.78 +            GameSystem system = unit.Army.GameSystem;
   31.79 +            SystemStats stats = system.StandardSystemStats;
   31.80 +			
   31.81 +			DataTable dt = new DataTable();
   31.82 +			DataColumn[] dc = new DataColumn[stats.SlotCount+1];
   31.83 +			dc[0] = new DataColumn("name");
   31.84 +
   31.85 +            DataGridTableStyle dgStyle = new DataGridTableStyle();
   31.86 +            dgStyle.RowHeadersVisible = false;
   31.87 +
   31.88 +            DataGridTextBoxColumn colStyle = new DataGridTextBoxColumn();
   31.89 +            colStyle.Width = statsGrid.ClientSize.Width - (stats.SlotCount * 40) - 4;
   31.90 +            colStyle.MappingName = "name";
   31.91 +            colStyle.HeaderText = "name";
   31.92 +            colStyle.ReadOnly = true;
   31.93 +            dgStyle.GridColumnStyles.Add(colStyle);
   31.94 +
   31.95 +            DataColumn tempCol;
   31.96 +            int i = 1;
   31.97 +
   31.98 +			foreach (StatSlot stat in stats.StatSlots)
   31.99 +			{
  31.100 +				tempCol = new DataColumn(stat.Name);
  31.101 +                dc[i] = tempCol;
  31.102 +                colStyle = new DataGridTextBoxColumn();
  31.103 +                colStyle.Alignment = HorizontalAlignment.Center;
  31.104 +                colStyle.Width = 40;
  31.105 +                colStyle.MappingName = stat.Name;
  31.106 +                colStyle.HeaderText = stat.Name;
  31.107 +                colStyle.ReadOnly = true;
  31.108 +                dgStyle.GridColumnStyles.Add(colStyle);
  31.109 +                i++;
  31.110 +			}
  31.111 +
  31.112 +			dt.Columns.AddRange(dc);
  31.113 +
  31.114 +			DataRow dr = dt.NewRow();
  31.115 +			dr.ItemArray = unit.UnitStats.StatsArray;
  31.116 +			dt.Rows.Add(dr);
  31.117 +			statsGrid.DataSource = dt;
  31.118 +			statsGrid.TableStyles.Add(dgStyle);
  31.119 +		}
  31.120 +
  31.121 +		private void setWeapons()
  31.122 +		{
  31.123 +			foreach(UnitEquipmentItem item in unit.GetEquipment())
  31.124 +			{
  31.125 +				if (item.IsRequired)
  31.126 +				{
  31.127 +					reqdList.Items.Add(UnitEquipmentItemObj.GetEquipObj(Unit, item));
  31.128 +				}
  31.129 +				else
  31.130 +				{
  31.131 +					optList.Items.Add(UnitEquipmentItemObj.GetEquipObj(Unit, item));
  31.132 +				}
  31.133 +			}
  31.134 +		}
  31.135 +
  31.136 +		/// <summary>
  31.137 +		/// Clean up any resources being used.
  31.138 +		/// </summary>
  31.139 +		protected override void Dispose( bool disposing )
  31.140 +		{
  31.141 +			//remove our leave events so that disposing doesn't trigger them
  31.142 +			tbUnitName.Leave-= new System.EventHandler(this.tbUnitName_Leave);
  31.143 +			unitSize.Leave-= new System.EventHandler(this.unitSize_Leave);
  31.144 +
  31.145 +			if( disposing )
  31.146 +			{
  31.147 +				if(components != null)
  31.148 +				{
  31.149 +					components.Dispose();
  31.150 +				}
  31.151 +			}
  31.152 +			base.Dispose( disposing );
  31.153 +		}
  31.154 +
  31.155 +		#region Windows Form Designer generated code
  31.156 +		/// <summary>
  31.157 +		/// Required method for Designer support - do not modify
  31.158 +		/// the contents of this method with the code editor.
  31.159 +		/// </summary>
  31.160 +		private void InitializeComponent()
  31.161 +		{
  31.162 +			this.statsGrid = new System.Windows.Forms.DataGrid();
  31.163 +			this.tbUnitName = new System.Windows.Forms.TextBox();
  31.164 +			this.unitSize = new System.Windows.Forms.NumericUpDown();
  31.165 +			this.lblUnitSize = new System.Windows.Forms.Label();
  31.166 +			this.lblRequiredEquip = new System.Windows.Forms.Label();
  31.167 +			this.bttnAddWeapon = new System.Windows.Forms.Button();
  31.168 +			this.bttnRemoveWeapon = new System.Windows.Forms.Button();
  31.169 +			this.reqdList = new System.Windows.Forms.ListBox();
  31.170 +			this.bttnEditWeapon = new System.Windows.Forms.Button();
  31.171 +			this.optList = new System.Windows.Forms.ListBox();
  31.172 +			this.lblOptionalEquip = new System.Windows.Forms.Label();
  31.173 +			this.bttnReplaceWeapon = new System.Windows.Forms.Button();
  31.174 +			this.bttnEditReqdWeapon = new System.Windows.Forms.Button();
  31.175 +			((System.ComponentModel.ISupportInitialize)(this.statsGrid)).BeginInit();
  31.176 +			((System.ComponentModel.ISupportInitialize)(this.unitSize)).BeginInit();
  31.177 +			this.SuspendLayout();
  31.178 +			// 
  31.179 +			// statsGrid
  31.180 +			// 
  31.181 +			this.statsGrid.AllowNavigation = false;
  31.182 +			this.statsGrid.AllowSorting = false;
  31.183 +			this.statsGrid.AlternatingBackColor = System.Drawing.SystemColors.Control;
  31.184 +			this.statsGrid.BackgroundColor = System.Drawing.SystemColors.Control;
  31.185 +			this.statsGrid.CaptionVisible = false;
  31.186 +			this.statsGrid.DataMember = "";
  31.187 +			this.statsGrid.GridLineColor = System.Drawing.SystemColors.ControlDarkDark;
  31.188 +			this.statsGrid.HeaderForeColor = System.Drawing.SystemColors.ControlText;
  31.189 +			this.statsGrid.Location = new System.Drawing.Point(8, 32);
  31.190 +			this.statsGrid.Name = "statsGrid";
  31.191 +			this.statsGrid.PreferredColumnWidth = 40;
  31.192 +			this.statsGrid.ReadOnly = true;
  31.193 +			this.statsGrid.RowHeadersVisible = false;
  31.194 +			this.statsGrid.SelectionBackColor = System.Drawing.SystemColors.Control;
  31.195 +			this.statsGrid.SelectionForeColor = System.Drawing.SystemColors.WindowText;
  31.196 +			this.statsGrid.Size = new System.Drawing.Size(600, 88);
  31.197 +			this.statsGrid.TabIndex = 0;
  31.198 +			this.statsGrid.TabStop = false;
  31.199 +			// 
  31.200 +			// tbUnitName
  31.201 +			// 
  31.202 +			this.tbUnitName.Location = new System.Drawing.Point(8, 8);
  31.203 +			this.tbUnitName.Name = "tbUnitName";
  31.204 +			this.tbUnitName.Size = new System.Drawing.Size(344, 20);
  31.205 +			this.tbUnitName.TabIndex = 1;
  31.206 +			this.tbUnitName.Text = "";
  31.207 +			this.tbUnitName.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tbUnitName_KeyDown);
  31.208 +			this.tbUnitName.Leave += new System.EventHandler(this.tbUnitName_Leave);
  31.209 +			// 
  31.210 +			// unitSize
  31.211 +			// 
  31.212 +			this.unitSize.Location = new System.Drawing.Point(528, 8);
  31.213 +			this.unitSize.Name = "unitSize";
  31.214 +			this.unitSize.Size = new System.Drawing.Size(80, 20);
  31.215 +			this.unitSize.TabIndex = 1;
  31.216 +			this.unitSize.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
  31.217 +			this.unitSize.Value = new System.Decimal(new int[] {
  31.218 +																   1,
  31.219 +																   0,
  31.220 +																   0,
  31.221 +																   0});
  31.222 +			this.unitSize.KeyDown += new System.Windows.Forms.KeyEventHandler(this.unitSize_KeyDown);
  31.223 +			this.unitSize.Leave += new System.EventHandler(this.unitSize_Leave);
  31.224 +			// 
  31.225 +			// lblUnitSize
  31.226 +			// 
  31.227 +			this.lblUnitSize.Location = new System.Drawing.Point(424, 8);
  31.228 +			this.lblUnitSize.Name = "lblUnitSize";
  31.229 +			this.lblUnitSize.TabIndex = 0;
  31.230 +			this.lblUnitSize.Text = "unit size";
  31.231 +			this.lblUnitSize.TextAlign = System.Drawing.ContentAlignment.TopRight;
  31.232 +			// 
  31.233 +			// lblRequiredEquip
  31.234 +			// 
  31.235 +			this.lblRequiredEquip.Location = new System.Drawing.Point(8, 128);
  31.236 +			this.lblRequiredEquip.Name = "lblRequiredEquip";
  31.237 +			this.lblRequiredEquip.Size = new System.Drawing.Size(88, 32);
  31.238 +			this.lblRequiredEquip.TabIndex = 3;
  31.239 +			this.lblRequiredEquip.Text = "reqd equipment";
  31.240 +			this.lblRequiredEquip.TextAlign = System.Drawing.ContentAlignment.TopRight;
  31.241 +			// 
  31.242 +			// bttnAddWeapon
  31.243 +			// 
  31.244 +			this.bttnAddWeapon.FlatStyle = System.Windows.Forms.FlatStyle.System;
  31.245 +			this.bttnAddWeapon.Location = new System.Drawing.Point(520, 200);
  31.246 +			this.bttnAddWeapon.Name = "bttnAddWeapon";
  31.247 +			this.bttnAddWeapon.Size = new System.Drawing.Size(88, 22);
  31.248 +			this.bttnAddWeapon.TabIndex = 4;
  31.249 +			this.bttnAddWeapon.Text = "add";
  31.250 +			this.bttnAddWeapon.Click += new System.EventHandler(this.bttnAddWeapon_Click);
  31.251 +			// 
  31.252 +			// bttnRemoveWeapon
  31.253 +			// 
  31.254 +			this.bttnRemoveWeapon.Enabled = false;
  31.255 +			this.bttnRemoveWeapon.FlatStyle = System.Windows.Forms.FlatStyle.System;
  31.256 +			this.bttnRemoveWeapon.Location = new System.Drawing.Point(520, 248);
  31.257 +			this.bttnRemoveWeapon.Name = "bttnRemoveWeapon";
  31.258 +			this.bttnRemoveWeapon.Size = new System.Drawing.Size(88, 22);
  31.259 +			this.bttnRemoveWeapon.TabIndex = 5;
  31.260 +			this.bttnRemoveWeapon.Text = "remove";
  31.261 +			this.bttnRemoveWeapon.Click += new System.EventHandler(this.bttnRemoveWeapon_Click);
  31.262 +			// 
  31.263 +			// reqdList
  31.264 +			// 
  31.265 +			this.reqdList.Location = new System.Drawing.Point(104, 128);
  31.266 +			this.reqdList.Name = "reqdList";
  31.267 +			this.reqdList.Size = new System.Drawing.Size(408, 69);
  31.268 +			this.reqdList.TabIndex = 6;
  31.269 +			this.reqdList.DoubleClick += new System.EventHandler(this.reqdList_DoubleClick);
  31.270 +			this.reqdList.SelectedIndexChanged += new System.EventHandler(this.reqdList_SelectedIndexChanged);
  31.271 +			// 
  31.272 +			// bttnEditWeapon
  31.273 +			// 
  31.274 +			this.bttnEditWeapon.Enabled = false;
  31.275 +			this.bttnEditWeapon.FlatStyle = System.Windows.Forms.FlatStyle.System;
  31.276 +			this.bttnEditWeapon.Location = new System.Drawing.Point(520, 224);
  31.277 +			this.bttnEditWeapon.Name = "bttnEditWeapon";
  31.278 +			this.bttnEditWeapon.Size = new System.Drawing.Size(88, 22);
  31.279 +			this.bttnEditWeapon.TabIndex = 7;
  31.280 +			this.bttnEditWeapon.Text = "edit";
  31.281 +			this.bttnEditWeapon.Click += new System.EventHandler(this.bttnEditWeapon_Click);
  31.282 +			// 
  31.283 +			// optList
  31.284 +			// 
  31.285 +			this.optList.Location = new System.Drawing.Point(104, 200);
  31.286 +			this.optList.Name = "optList";
  31.287 +			this.optList.Size = new System.Drawing.Size(408, 69);
  31.288 +			this.optList.TabIndex = 9;
  31.289 +			this.optList.DoubleClick += new System.EventHandler(this.optList_DoubleClick);
  31.290 +			this.optList.SelectedIndexChanged += new System.EventHandler(this.optList_SelectedIndexChanged);
  31.291 +			// 
  31.292 +			// lblOptionalEquip
  31.293 +			// 
  31.294 +			this.lblOptionalEquip.Location = new System.Drawing.Point(8, 200);
  31.295 +			this.lblOptionalEquip.Name = "lblOptionalEquip";
  31.296 +			this.lblOptionalEquip.Size = new System.Drawing.Size(88, 32);
  31.297 +			this.lblOptionalEquip.TabIndex = 8;
  31.298 +			this.lblOptionalEquip.Text = "opt equipment";
  31.299 +			this.lblOptionalEquip.TextAlign = System.Drawing.ContentAlignment.TopRight;
  31.300 +			// 
  31.301 +			// bttnReplaceWeapon
  31.302 +			// 
  31.303 +			this.bttnReplaceWeapon.Enabled = false;
  31.304 +			this.bttnReplaceWeapon.FlatStyle = System.Windows.Forms.FlatStyle.System;
  31.305 +			this.bttnReplaceWeapon.Location = new System.Drawing.Point(520, 128);
  31.306 +			this.bttnReplaceWeapon.Name = "bttnReplaceWeapon";
  31.307 +			this.bttnReplaceWeapon.Size = new System.Drawing.Size(88, 22);
  31.308 +			this.bttnReplaceWeapon.TabIndex = 10;
  31.309 +			this.bttnReplaceWeapon.Text = "replace";
  31.310 +			this.bttnReplaceWeapon.Click += new System.EventHandler(this.bttnReplaceWeapon_Click);
  31.311 +			// 
  31.312 +			// bttnEditReqdWeapon
  31.313 +			// 
  31.314 +			this.bttnEditReqdWeapon.Enabled = false;
  31.315 +			this.bttnEditReqdWeapon.FlatStyle = System.Windows.Forms.FlatStyle.System;
  31.316 +			this.bttnEditReqdWeapon.Location = new System.Drawing.Point(520, 152);
  31.317 +			this.bttnEditReqdWeapon.Name = "bttnEditReqdWeapon";
  31.318 +			this.bttnEditReqdWeapon.Size = new System.Drawing.Size(88, 22);
  31.319 +			this.bttnEditReqdWeapon.TabIndex = 11;
  31.320 +			this.bttnEditReqdWeapon.Text = "edit";
  31.321 +			this.bttnEditReqdWeapon.Click += new System.EventHandler(this.bttnEditReqdWeapon_Click);
  31.322 +			// 
  31.323 +			// FrmUnit
  31.324 +			// 
  31.325 +			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
  31.326 +			this.ClientSize = new System.Drawing.Size(616, 314);
  31.327 +			this.Controls.Add(this.bttnEditReqdWeapon);
  31.328 +			this.Controls.Add(this.bttnReplaceWeapon);
  31.329 +			this.Controls.Add(this.optList);
  31.330 +			this.Controls.Add(this.lblOptionalEquip);
  31.331 +			this.Controls.Add(this.bttnEditWeapon);
  31.332 +			this.Controls.Add(this.reqdList);
  31.333 +			this.Controls.Add(this.bttnRemoveWeapon);
  31.334 +			this.Controls.Add(this.bttnAddWeapon);
  31.335 +			this.Controls.Add(this.lblRequiredEquip);
  31.336 +			this.Controls.Add(this.lblUnitSize);
  31.337 +			this.Controls.Add(this.unitSize);
  31.338 +			this.Controls.Add(this.tbUnitName);
  31.339 +			this.Controls.Add(this.statsGrid);
  31.340 +			this.Name = "FrmUnit";
  31.341 +			this.ShowInTaskbar = false;
  31.342 +			this.Text = "FrmUnit";
  31.343 +			((System.ComponentModel.ISupportInitialize)(this.statsGrid)).EndInit();
  31.344 +			((System.ComponentModel.ISupportInitialize)(this.unitSize)).EndInit();
  31.345 +			this.ResumeLayout(false);
  31.346 +
  31.347 +		}
  31.348 +		#endregion
  31.349 +
  31.350 +		public Unit Unit
  31.351 +		{
  31.352 +			get { return unit; }
  31.353 +		}
  31.354 +
  31.355 +		private void tbUnitName_Leave(object sender, System.EventArgs e)
  31.356 +		{
  31.357 +			updateUnitName();
  31.358 +		}
  31.359 +
  31.360 +		private void tbUnitName_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
  31.361 +		{
  31.362 +			if (e.KeyCode == Keys.Enter)
  31.363 +			{
  31.364 +				updateUnitName();
  31.365 +			}
  31.366 +		}
  31.367 +
  31.368 +		private void updateUnitName()
  31.369 +		{			
  31.370 +			if (unit.Name!=tbUnitName.Text)
  31.371 +			{
  31.372 +				commandStack.Execute(new SetNameCommand(unit, tbUnitName.Text));
  31.373 +			}
  31.374 +		}
  31.375 +
  31.376 +		private void unitSize_Leave(object sender, System.EventArgs e)
  31.377 +		{
  31.378 +			updateUnitSize();
  31.379 +		}
  31.380 +
  31.381 +		private void unitSize_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
  31.382 +		{
  31.383 +			if (e.KeyCode == Keys.Enter)
  31.384 +			{
  31.385 +				updateUnitSize();
  31.386 +			}		
  31.387 +		}
  31.388 +
  31.389 +		private void updateUnitSize()
  31.390 +		{
  31.391 +			if (unit.Size!=unitSize.Value)
  31.392 +			{
  31.393 +				commandStack.Execute(new SetUnitSizeCommand(unit, (int)unitSize.Value));
  31.394 +			}
  31.395 +		}
  31.396 +
  31.397 +		private void unit_NameChanged(WarFoundryObject obj, string oldValue, string newValue)
  31.398 +		{
  31.399 +			if (obj is Unit && obj.Equals(unit))
  31.400 +			{
  31.401 +				Unit u = (Unit)obj;
  31.402 +				tbUnitName.Text = obj.Name;
  31.403 +				Text = obj.Name;
  31.404 +			}
  31.405 +		}
  31.406 +
  31.407 +		private void unit_UnitSizeChanged(WarFoundryObject obj, int oldValue, int newValue)
  31.408 +		{
  31.409 +			if (obj is Unit && obj.Equals(unit))
  31.410 +			{
  31.411 +				unitSize.Value = newValue;
  31.412 +			}
  31.413 +		}
  31.414 +
  31.415 +		private void reqdList_SelectedIndexChanged(object sender, System.EventArgs e)
  31.416 +		{
  31.417 +			bttnReplaceWeapon.Enabled = (reqdList.SelectedIndex>-1 && ((UnitEquipmentItemObj)reqdList.SelectedItem).Item.HasAlternatives());
  31.418 +			bttnEditReqdWeapon.Enabled = (reqdList.SelectedIndex>-1);
  31.419 +		}
  31.420 +
  31.421 +		private void optList_SelectedIndexChanged(object sender, System.EventArgs e)
  31.422 +		{
  31.423 +			bttnEditWeapon.Enabled = optList.SelectedIndex>-1;
  31.424 +			bttnRemoveWeapon.Enabled = bttnEditWeapon.Enabled;
  31.425 +		}
  31.426 +
  31.427 +		private void unit_UnitEquipmentAmountChanged(WarFoundryObject obj, float oldValue, float newValue)
  31.428 +		{
  31.429 +			if (obj is UnitEquipmentItem)
  31.430 +			{
  31.431 +				UnitEquipmentItem equip = (UnitEquipmentItem)obj;
  31.432 +				ListBox weaponList = (equip.IsRequired ? reqdList : optList);
  31.433 +
  31.434 +				if (newValue==0)
  31.435 +				{
  31.436 +					weaponList.Items.Remove(UnitEquipmentItemObj.GetEquipObj(Unit, equip));
  31.437 +				}
  31.438 +				else
  31.439 +				{
  31.440 +					UnitEquipmentItemObj equipObj = UnitEquipmentItemObj.GetEquipObj(Unit, equip);
  31.441 +					int idx = weaponList.Items.IndexOf(equipObj);
  31.442 +
  31.443 +					if (idx>-1)
  31.444 +					{
  31.445 +						weaponList.Items[idx] = equipObj;
  31.446 +					}
  31.447 +					else
  31.448 +					{
  31.449 +						weaponList.Items.Add(equipObj);
  31.450 +					}
  31.451 +				}
  31.452 +			}
  31.453 +		}
  31.454 +
  31.455 +		private void editWeapon(ListBox list)
  31.456 +		{
  31.457 +			FrmEditUnitEquipment editEquip = new FrmEditUnitEquipment(Unit, ((UnitEquipmentItemObj)list.SelectedItem).Item, commandStack);
  31.458 +			editEquip.ShowDialog(this);
  31.459 +		}
  31.460 +
  31.461 +		private void bttnEditWeapon_Click(object sender, System.EventArgs e)
  31.462 +		{
  31.463 +			editWeapon(optList);
  31.464 +		}
  31.465 +
  31.466 +		private void optList_DoubleClick(object sender, System.EventArgs e)
  31.467 +		{
  31.468 +			editWeapon(optList);
  31.469 +		}
  31.470 +
  31.471 +		private void reqdList_DoubleClick(object sender, System.EventArgs e)
  31.472 +		{
  31.473 +			editWeapon(reqdList);
  31.474 +		}
  31.475 +
  31.476 +		private void addWeapon()
  31.477 +		{
  31.478 +			FrmNewUnitEquipment newEquip = new FrmNewUnitEquipment(Unit, commandStack);
  31.479 +			newEquip.ShowDialog(this);
  31.480 +		}
  31.481 +
  31.482 +		private void bttnAddWeapon_Click(object sender, System.EventArgs e)
  31.483 +		{
  31.484 +			addWeapon();
  31.485 +		}
  31.486 +
  31.487 +		private void removeWeapon()
  31.488 +		{
  31.489 +			commandStack.Execute(new SetUnitEquipmentAmountCommand(unit, unit.UnitType.GetEquipmentItem(((UnitEquipmentItemObj)optList.SelectedItem).Item.ID).EquipmentItem, 0));
  31.490 +		}
  31.491 +
  31.492 +		private void bttnRemoveWeapon_Click(object sender, System.EventArgs e)
  31.493 +		{
  31.494 +			removeWeapon();
  31.495 +		}
  31.496 +
  31.497 +		private void bttnEditReqdWeapon_Click(object sender, System.EventArgs e)
  31.498 +		{
  31.499 +			editWeapon(reqdList);
  31.500 +		}
  31.501 +
  31.502 +		private void bttnReplaceWeapon_Click(object sender, System.EventArgs e)
  31.503 +		{
  31.504 +			FrmReplaceUnitEquipment replace = new FrmReplaceUnitEquipment(unit, ((UnitEquipmentItemObj)reqdList.SelectedItem).Item, commandStack);
  31.505 +			replace.ShowDialog(this);
  31.506 +		}
  31.507 +	}
  31.508 +}
    32.1 Binary file FrmUnit.resources has changed
    33.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    33.2 +++ b/FrmUnit.resx	Fri Dec 19 15:57:51 2008 +0000
    33.3 @@ -0,0 +1,247 @@
    33.4 +<?xml version="1.0" encoding="utf-8"?>
    33.5 +<root>
    33.6 +  <!-- 
    33.7 +    Microsoft ResX Schema 
    33.8 +    
    33.9 +    Version 1.3
   33.10 +    
   33.11 +    The primary goals of this format is to allow a simple XML format 
   33.12 +    that is mostly human readable. The generation and parsing of the 
   33.13 +    various data types are done through the TypeConverter classes 
   33.14 +    associated with the data types.
   33.15 +    
   33.16 +    Example:
   33.17 +    
   33.18 +    ... ado.net/XML headers & schema ...
   33.19 +    <resheader name="resmimetype">text/microsoft-resx</resheader>
   33.20 +    <resheader name="version">1.3</resheader>
   33.21 +    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
   33.22 +    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
   33.23 +    <data name="Name1">this is my long string</data>
   33.24 +    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
   33.25 +    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
   33.26 +        [base64 mime encoded serialized .NET Framework object]
   33.27 +    </data>
   33.28 +    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
   33.29 +        [base64 mime encoded string representing a byte array form of the .NET Framework object]
   33.30 +    </data>
   33.31 +                
   33.32 +    There are any number of "resheader" rows that contain simple 
   33.33 +    name/value pairs.
   33.34 +    
   33.35 +    Each data row contains a name, and value. The row also contains a 
   33.36 +    type or mimetype. Type corresponds to a .NET class that support 
   33.37 +    text/value conversion through the TypeConverter architecture. 
   33.38 +    Classes that don't support this are serialized and stored with the 
   33.39 +    mimetype set.
   33.40 +    
   33.41 +    The mimetype is used forserialized objects, and tells the 
   33.42 +    ResXResourceReader how to depersist the object. This is currently not 
   33.43 +    extensible. For a given mimetype the value must be set accordingly:
   33.44 +    
   33.45 +    Note - application/x-microsoft.net.object.binary.base64 is the format 
   33.46 +    that the ResXResourceWriter will generate, however the reader can 
   33.47 +    read any of the formats listed below.
   33.48 +    
   33.49 +    mimetype: application/x-microsoft.net.object.binary.base64
   33.50 +    value   : The object must be serialized with 
   33.51 +            : System.Serialization.Formatters.Binary.BinaryFormatter
   33.52 +            : and then encoded with base64 encoding.
   33.53 +    
   33.54 +    mimetype: application/x-microsoft.net.object.soap.base64
   33.55 +    value   : The object must be serialized with 
   33.56 +            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
   33.57 +            : and then encoded with base64 encoding.
   33.58 +
   33.59 +    mimetype: application/x-microsoft.net.object.bytearray.base64
   33.60 +    value   : The object must be serialized into a byte array 
   33.61 +            : using a System.ComponentModel.TypeConverter
   33.62 +            : and then encoded with base64 encoding.
   33.63 +    -->
   33.64 +  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
   33.65 +    <xsd:element name="root" msdata:IsDataSet="true">
   33.66 +      <xsd:complexType>
   33.67 +        <xsd:choice maxOccurs="unbounded">
   33.68 +          <xsd:element name="data">
   33.69 +            <xsd:complexType>
   33.70 +              <xsd:sequence>
   33.71 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
   33.72 +                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
   33.73 +              </xsd:sequence>
   33.74 +              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
   33.75 +              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
   33.76 +              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
   33.77 +            </xsd:complexType>
   33.78 +          </xsd:element>
   33.79 +          <xsd:element name="resheader">
   33.80 +            <xsd:complexType>
   33.81 +              <xsd:sequence>
   33.82 +                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
   33.83 +              </xsd:sequence>
   33.84 +              <xsd:attribute name="name" type="xsd:string" use="required" />
   33.85 +            </xsd:complexType>
   33.86 +          </xsd:element>
   33.87 +        </xsd:choice>
   33.88 +      </xsd:complexType>
   33.89 +    </xsd:element>
   33.90 +  </xsd:schema>
   33.91 +  <resheader name="resmimetype">
   33.92 +    <value>text/microsoft-resx</value>
   33.93 +  </resheader>
   33.94 +  <resheader name="version">
   33.95 +    <value>1.3</value>
   33.96 +  </resheader>
   33.97 +  <resheader name="reader">
   33.98 +    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   33.99 +  </resheader>
  33.100 +  <resheader name="writer">
  33.101 +    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  33.102 +  </resheader>
  33.103 +  <data name="statsGrid.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.104 +    <value>False</value>
  33.105 +  </data>
  33.106 +  <data name="statsGrid.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.107 +    <value>Private</value>
  33.108 +  </data>
  33.109 +  <data name="statsGrid.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.110 +    <value>Private</value>
  33.111 +  </data>
  33.112 +  <data name="tbUnitName.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.113 +    <value>Private</value>
  33.114 +  </data>
  33.115 +  <data name="tbUnitName.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.116 +    <value>False</value>
  33.117 +  </data>
  33.118 +  <data name="tbUnitName.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.119 +    <value>Private</value>
  33.120 +  </data>
  33.121 +  <data name="unitSize.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.122 +    <value>False</value>
  33.123 +  </data>
  33.124 +  <data name="unitSize.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.125 +    <value>Private</value>
  33.126 +  </data>
  33.127 +  <data name="unitSize.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.128 +    <value>Private</value>
  33.129 +  </data>
  33.130 +  <data name="lblUnitSize.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.131 +    <value>False</value>
  33.132 +  </data>
  33.133 +  <data name="lblUnitSize.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.134 +    <value>Private</value>
  33.135 +  </data>
  33.136 +  <data name="lblUnitSize.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.137 +    <value>Private</value>
  33.138 +  </data>
  33.139 +  <data name="lblRequiredEquip.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.140 +    <value>False</value>
  33.141 +  </data>
  33.142 +  <data name="lblRequiredEquip.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.143 +    <value>Private</value>
  33.144 +  </data>
  33.145 +  <data name="lblRequiredEquip.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.146 +    <value>Private</value>
  33.147 +  </data>
  33.148 +  <data name="bttnAddWeapon.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.149 +    <value>False</value>
  33.150 +  </data>
  33.151 +  <data name="bttnAddWeapon.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.152 +    <value>Private</value>
  33.153 +  </data>
  33.154 +  <data name="bttnAddWeapon.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.155 +    <value>Private</value>
  33.156 +  </data>
  33.157 +  <data name="bttnRemoveWeapon.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.158 +    <value>False</value>
  33.159 +  </data>
  33.160 +  <data name="bttnRemoveWeapon.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.161 +    <value>Private</value>
  33.162 +  </data>
  33.163 +  <data name="bttnRemoveWeapon.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.164 +    <value>Private</value>
  33.165 +  </data>
  33.166 +  <data name="reqdList.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.167 +    <value>Private</value>
  33.168 +  </data>
  33.169 +  <data name="reqdList.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.170 +    <value>False</value>
  33.171 +  </data>
  33.172 +  <data name="reqdList.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.173 +    <value>Private</value>
  33.174 +  </data>
  33.175 +  <data name="bttnEditWeapon.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.176 +    <value>False</value>
  33.177 +  </data>
  33.178 +  <data name="bttnEditWeapon.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.179 +    <value>Private</value>
  33.180 +  </data>
  33.181 +  <data name="bttnEditWeapon.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.182 +    <value>Private</value>
  33.183 +  </data>
  33.184 +  <data name="optList.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.185 +    <value>Private</value>
  33.186 +  </data>
  33.187 +  <data name="optList.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.188 +    <value>False</value>
  33.189 +  </data>
  33.190 +  <data name="optList.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.191 +    <value>Private</value>
  33.192 +  </data>
  33.193 +  <data name="lblOptionalEquip.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.194 +    <value>False</value>
  33.195 +  </data>
  33.196 +  <data name="lblOptionalEquip.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.197 +    <value>Private</value>
  33.198 +  </data>
  33.199 +  <data name="lblOptionalEquip.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.200 +    <value>Private</value>
  33.201 +  </data>
  33.202 +  <data name="bttnReplaceWeapon.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.203 +    <value>False</value>
  33.204 +  </data>
  33.205 +  <data name="bttnReplaceWeapon.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.206 +    <value>Private</value>
  33.207 +  </data>
  33.208 +  <data name="bttnReplaceWeapon.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.209 +    <value>Private</value>
  33.210 +  </data>
  33.211 +  <data name="bttnEditReqdWeapon.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.212 +    <value>False</value>
  33.213 +  </data>
  33.214 +  <data name="bttnEditReqdWeapon.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.215 +    <value>Private</value>
  33.216 +  </data>
  33.217 +  <data name="bttnEditReqdWeapon.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.218 +    <value>Private</value>
  33.219 +  </data>
  33.220 +  <data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.221 +    <value>False</value>
  33.222 +  </data>
  33.223 +  <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.224 +    <value>(Default)</value>
  33.225 +  </data>
  33.226 +  <data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.227 +    <value>False</value>
  33.228 +  </data>
  33.229 +  <data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.230 +    <value>False</value>
  33.231 +  </data>
  33.232 +  <data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  33.233 +    <value>8, 8</value>
  33.234 +  </data>
  33.235 +  <data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.236 +    <value>True</value>
  33.237 +  </data>
  33.238 +  <data name="$this.Name">
  33.239 +    <value>FrmUnit</value>
  33.240 +  </data>
  33.241 +  <data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.242 +    <value>80</value>
  33.243 +  </data>
  33.244 +  <data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.245 +    <value>True</value>
  33.246 +  </data>
  33.247 +  <data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  33.248 +    <value>Private</value>
  33.249 +  </data>
  33.250 +</root>
  33.251 \ No newline at end of file
    34.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    34.2 +++ b/IBBoard.WarFoundry.csproj	Fri Dec 19 15:57:51 2008 +0000
    34.3 @@ -0,0 +1,193 @@
    34.4 +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    34.5 +  <PropertyGroup>
    34.6 +    <ProjectType>Local</ProjectType>
    34.7 +    <ProductVersion>8.0.50727</ProductVersion>
    34.8 +    <SchemaVersion>2.0</SchemaVersion>
    34.9 +    <ProjectGuid>{72C59D77-E2A4-401C-91F2-12728056D9A9}</ProjectGuid>
   34.10 +    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
   34.11 +    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
   34.12 +    <ApplicationIcon>App.ico</ApplicationIcon>
   34.13 +    <AssemblyKeyContainerName>
   34.14 +    </AssemblyKeyContainerName>
   34.15 +    <AssemblyName>WarFoundry</AssemblyName>
   34.16 +    <AssemblyOriginatorKeyFile>
   34.17 +    </AssemblyOriginatorKeyFile>
   34.18 +    <DefaultClientScript>JScript</DefaultClientScript>
   34.19 +    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
   34.20 +    <DefaultTargetSchema>IE50</DefaultTargetSchema>
   34.21 +    <DelaySign>false</DelaySign>
   34.22 +    <OutputType>WinExe</OutputType>
   34.23 +    <RootNamespace>IBBoard.WarFoundry</RootNamespace>
   34.24 +    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
   34.25 +    <StartupObject>
   34.26 +    </StartupObject>
   34.27 +    <FileUpgradeFlags>
   34.28 +    </FileUpgradeFlags>
   34.29 +    <UpgradeBackupLocation>
   34.30 +    </UpgradeBackupLocation>
   34.31 +  </PropertyGroup>
   34.32 +  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
   34.33 +    <OutputPath>C:\Documents and Settings\ibboard\My Documents\Visual Studio 2005\Projects\bin\Debug\</OutputPath>
   34.34 +    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
   34.35 +    <BaseAddress>285212672</BaseAddress>
   34.36 +    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
   34.37 +    <ConfigurationOverrideFile>
   34.38 +    </ConfigurationOverrideFile>
   34.39 +    <DefineConstants>DEBUG;TRACE</DefineConstants>
   34.40 +    <DocumentationFile>
   34.41 +    </DocumentationFile>
   34.42 +    <DebugSymbols>true</DebugSymbols>
   34.43 +    <FileAlignment>4096</FileAlignment>
   34.44 +    <NoStdLib>false</NoStdLib>
   34.45 +    <NoWarn>
   34.46 +    </NoWarn>
   34.47 +    <Optimize>false</Optimize>
   34.48 +    <RegisterForComInterop>false</RegisterForComInterop>
   34.49 +    <RemoveIntegerChecks>false</RemoveIntegerChecks>
   34.50 +    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
   34.51 +    <WarningLevel>4</WarningLevel>
   34.52 +    <DebugType>full</DebugType>
   34.53 +    <ErrorReport>prompt</ErrorReport>
   34.54 +    <UseVSHostingProcess>true</UseVSHostingProcess>
   34.55 +  </PropertyGroup>
   34.56 +  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
   34.57 +    <OutputPath>C:\Documents and Settings\ibboard\My Documents\Visual Studio 2005\Projects\bin\release\</OutputPath>
   34.58 +    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
   34.59 +    <BaseAddress>285212672</BaseAddress>
   34.60 +    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
   34.61 +    <ConfigurationOverrideFile>
   34.62 +    </ConfigurationOverrideFile>
   34.63 +    <DefineConstants>TRACE</DefineConstants>
   34.64 +    <DocumentationFile>
   34.65 +    </DocumentationFile>
   34.66 +    <DebugSymbols>false</DebugSymbols>
   34.67 +    <FileAlignment>4096</FileAlignment>
   34.68 +    <NoStdLib>false</NoStdLib>
   34.69 +    <NoWarn>
   34.70 +    </NoWarn>
   34.71 +    <Optimize>true</Optimize>
   34.72 +    <RegisterForComInterop>false</RegisterForComInterop>
   34.73 +    <RemoveIntegerChecks>false</RemoveIntegerChecks>
   34.74 +    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
   34.75 +    <WarningLevel>4</WarningLevel>
   34.76 +    <DebugType>none</DebugType>
   34.77 +    <ErrorReport>prompt</ErrorReport>
   34.78 +    <UseVSHostingProcess>true</UseVSHostingProcess>
   34.79 +  </PropertyGroup>
   34.80 +  <ItemGroup>
   34.81 +    <Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" />
   34.82 +    <Reference Include="System">
   34.83 +      <Name>System</Name>
   34.84 +    </Reference>
   34.85 +    <Reference Include="System.Data">
   34.86 +      <Name>System.Data</Name>
   34.87 +    </Reference>
   34.88 +    <Reference Include="System.Drawing">
   34.89 +      <Name>System.Drawing</Name>
   34.90 +    </Reference>
   34.91 +    <Reference Include="System.Windows.Forms">
   34.92 +      <Name>System.Windows.Forms</Name>
   34.93 +    </Reference>
   34.94 +    <Reference Include="System.Xml">
   34.95 +      <Name>System.XML</Name>
   34.96 +    </Reference>
   34.97 +    <ProjectReference Include="..\..\IBBoardWF\IBBoardWF.csproj">
   34.98 +      <Name>IBBoardWF</Name>
   34.99 +      <Project>{E3790268-2082-4975-B1A3-C70B37842CE8}</Project>
  34.100 +      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
  34.101 +    </ProjectReference>
  34.102 +    <ProjectReference Include="..\..\IBBoard\IBBoard.csproj">
  34.103 +      <Name>IBBoard</Name>
  34.104 +      <Project>{5DFD64F6-FC2B-4B4F-B92E-483BAC468105}</Project>
  34.105 +      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
  34.106 +    </ProjectReference>
  34.107 +    <ProjectReference Include="..\IBBoard.WarFoundry.API\IBBoard.WarFoundry.API.csproj">
  34.108 +      <Name>IBBoard.WarFoundry.API</Name>
  34.109 +      <Project>{59EC117B-F955-44D5-8461-8F44F3A7481A}</Project>
  34.110 +      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
  34.111 +    </ProjectReference>
  34.112 +  </ItemGroup>
  34.113 +  <ItemGroup>
  34.114 +    <Content Include="App.ico" />
  34.115 +    <Content Include="libs\log4net.dll" />
  34.116 +    <Content Include="libs\log4net.xml" />
  34.117 +    <Content Include="WarFoundryPref.xml">
  34.118 +      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  34.119 +    </Content>
  34.120 +    <Compile Include="AssemblyInfo.cs">
  34.121 +      <SubType>Code</SubType>
  34.122 +    </Compile>
  34.123 +    <Compile Include="FrmArmyTree.cs">
  34.124 +      <SubType>Form</SubType>
  34.125 +    </Compile>
  34.126 +    <Compile Include="FrmDebugOutput.cs">
  34.127 +      <SubType>Form</SubType>
  34.128 +    </Compile>
  34.129 +    <Compile Include="FrmEditUnitEquipment.cs">
  34.130 +      <SubType>Form</SubType>
  34.131 +    </Compile>
  34.132 +    <Compile Include="FrmMain.cs">
  34.133 +      <SubType>Form</SubType>
  34.134 +    </Compile>
  34.135 +    <Compile Include="FrmNewArmy.cs">
  34.136 +      <SubType>Form</SubType>
  34.137 +    </Compile>
  34.138 +    <Compile Include="FrmNewUnit.cs">
  34.139 +      <SubType>Form</SubType>
  34.140 +    </Compile>
  34.141 +    <Compile Include="FrmNewUnitEquipment.cs">
  34.142 +      <SubType>Form</SubType>
  34.143 +    </Compile>
  34.144 +    <Compile Include="FrmReplaceUnitEquipment.cs">
  34.145 +      <SubType>Form</SubType>
  34.146 +    </Compile>
  34.147 +    <Compile Include="FrmSelectSystem.cs">
  34.148 +      <SubType>Form</SubType>
  34.149 +    </Compile>
  34.150 +    <Compile Include="FrmUnit.cs">
  34.151 +      <SubType>Form</SubType>
  34.152 +    </Compile>
  34.153 +    <EmbeddedResource Include="FrmArmyTree.resx">
  34.154 +      <DependentUpon>FrmArmyTree.cs</DependentUpon>
  34.155 +    </EmbeddedResource>
  34.156 +    <EmbeddedResource Include="FrmDebugOutput.resx">
  34.157 +      <DependentUpon>FrmDebugOutput.cs</DependentUpon>
  34.158 +    </EmbeddedResource>
  34.159 +    <EmbeddedResource Include="FrmEditUnitEquipment.resx">
  34.160 +      <DependentUpon>FrmEditUnitEquipment.cs</DependentUpon>
  34.161 +    </EmbeddedResource>
  34.162 +    <EmbeddedResource Include="FrmMain.resx">
  34.163 +      <DependentUpon>FrmMain.cs</DependentUpon>
  34.164 +    </EmbeddedResource>
  34.165 +    <EmbeddedResource Include="FrmNewArmy.resx">
  34.166 +      <DependentUpon>FrmNewArmy.cs</DependentUpon>
  34.167 +    </EmbeddedResource>
  34.168 +    <EmbeddedResource Include="FrmNewUnit.resx">
  34.169 +      <DependentUpon>FrmNewUnit.cs</DependentUpon>
  34.170 +    </EmbeddedResource>
  34.171 +    <EmbeddedResource Include="FrmNewUnitEquipment.resx">
  34.172 +      <DependentUpon>FrmNewUnitEquipment.cs</DependentUpon>
  34.173 +    </EmbeddedResource>
  34.174 +    <EmbeddedResource Include="FrmReplaceUnitEquipment.resx">
  34.175 +      <DependentUpon>FrmReplaceUnitEquipment.cs</DependentUpon>
  34.176 +    </EmbeddedResource>
  34.177 +    <EmbeddedResource Include="FrmSelectSystem.resx">
  34.178 +      <DependentUpon>FrmSelectSystem.cs</DependentUpon>
  34.179 +    </EmbeddedResource>
  34.180 +    <EmbeddedResource Include="FrmUnit.resx">
  34.181 +      <DependentUpon>FrmUnit.cs</DependentUpon>
  34.182 +    </EmbeddedResource>
  34.183 +    <None Include="app.config" />
  34.184 +    <None Include="WarFoundry.exe.manifest" />
  34.185 +  </ItemGroup>
  34.186 +  <ItemGroup>
  34.187 +    <Folder Include="Properties\" />
  34.188 +  </ItemGroup>
  34.189 +  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  34.190 +  <PropertyGroup>
  34.191 +    <PreBuildEvent>
  34.192 +    </PreBuildEvent>
  34.193 +    <PostBuildEvent>
  34.194 +    </PostBuildEvent>
  34.195 +  </PropertyGroup>
  34.196 +</Project>
  34.197 \ No newline at end of file
    35.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    35.2 +++ b/IBBoard.WarFoundry.csproj.backup	Fri Dec 19 15:57:51 2008 +0000
    35.3 @@ -0,0 +1,190 @@
    35.4 +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    35.5 +  <PropertyGroup>
    35.6 +    <ProjectType>Local</ProjectType>
    35.7 +    <ProductVersion>8.0.50727</ProductVersion>
    35.8 +    <SchemaVersion>2.0</SchemaVersion>
    35.9 +    <ProjectGuid>{72C59D77-E2A4-401C-91F2-12728056D9A9}</ProjectGuid>
   35.10 +    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
   35.11 +    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
   35.12 +    <ApplicationIcon>App.ico</ApplicationIcon>
   35.13 +    <AssemblyKeyContainerName>
   35.14 +    </AssemblyKeyContainerName>
   35.15 +    <AssemblyName>WarFoundry</AssemblyName>
   35.16 +    <AssemblyOriginatorKeyFile>
   35.17 +    </AssemblyOriginatorKeyFile>
   35.18 +    <DefaultClientScript>JScript</DefaultClientScript>
   35.19 +    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
   35.20 +    <DefaultTargetSchema>IE50</DefaultTargetSchema>
   35.21 +    <DelaySign>false</DelaySign>
   35.22 +    <OutputType>WinExe</OutputType>
   35.23 +    <RootNamespace>IBBoard.WarFoundry</RootNamespace>
   35.24 +    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
   35.25 +    <StartupObject>
   35.26 +    </StartupObject>
   35.27 +    <FileUpgradeFlags>
   35.28 +    </FileUpgradeFlags>
   35.29 +    <UpgradeBackupLocation>
   35.30 +    </UpgradeBackupLocation>
   35.31 +  </PropertyGroup>
   35.32 +  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
   35.33 +    <OutputPath>bin\Debug\</OutputPath>
   35.34 +    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
   35.35 +    <BaseAddress>285212672</BaseAddress>
   35.36 +    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
   35.37 +    <ConfigurationOverrideFile>
   35.38 +    </ConfigurationOverrideFile>
   35.39 +    <DefineConstants>DEBUG;TRACE</DefineConstants>
   35.40 +    <DocumentationFile>
   35.41 +    </DocumentationFile>
   35.42 +    <DebugSymbols>true</DebugSymbols>
   35.43 +    <FileAlignment>4096</FileAlignment>
   35.44 +    <NoStdLib>false</NoStdLib>
   35.45 +    <NoWarn>
   35.46 +    </NoWarn>
   35.47 +    <Optimize>false</Optimize>
   35.48 +    <RegisterForComInterop>false</RegisterForComInterop>
   35.49 +    <RemoveIntegerChecks>false</RemoveIntegerChecks>
   35.50 +    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
   35.51 +    <WarningLevel>4</WarningLevel>
   35.52 +    <DebugType>full</DebugType>
   35.53 +    <ErrorReport>prompt</ErrorReport>
   35.54 +    <UseVSHostingProcess>true</UseVSHostingProcess>
   35.55 +  </PropertyGroup>
   35.56 +  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
   35.57 +    <OutputPath>C:\Documents and Settings\ibboard\My Documents\Visual Studio 2005\Projects\bin\release\</OutputPath>
   35.58 +    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
   35.59 +    <BaseAddress>285212672</BaseAddress>
   35.60 +    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
   35.61 +    <ConfigurationOverrideFile>
   35.62 +    </ConfigurationOverrideFile>
   35.63 +    <DefineConstants>TRACE</DefineConstants>
   35.64 +    <DocumentationFile>
   35.65 +    </DocumentationFile>
   35.66 +    <DebugSymbols>false</DebugSymbols>
   35.67 +    <FileAlignment>4096</FileAlignment>
   35.68 +    <NoStdLib>false</NoStdLib>
   35.69 +    <NoWarn>
   35.70 +    </NoWarn>
   35.71 +    <Optimize>true</Optimize>
   35.72 +    <RegisterForComInterop>false</RegisterForComInterop>
   35.73 +    <RemoveIntegerChecks>false</RemoveIntegerChecks>
   35.74 +    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
   35.75 +    <WarningLevel>4</WarningLevel>
   35.76 +    <DebugType>none</DebugType>
   35.77 +    <ErrorReport>prompt</ErrorReport>
   35.78 +    <UseVSHostingProcess>true</UseVSHostingProcess>
   35.79 +  </PropertyGroup>
   35.80 +  <ItemGroup>
   35.81 +    <Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" />
   35.82 +    <Reference Include="System">
   35.83 +      <Name>System</Name>
   35.84 +    </Reference>
   35.85 +    <Reference Include="System.Data">
   35.86 +      <Name>System.Data</Name>
   35.87 +    </Reference>
   35.88 +    <Reference Include="System.Drawing">
   35.89 +      <Name>System.Drawing</Name>
   35.90 +    </Reference>
   35.91 +    <Reference Include="System.Windows.Forms">
   35.92 +      <Name>System.Windows.Forms</Name>
   35.93 +    </Reference>
   35.94 +    <Reference Include="System.Xml">
   35.95 +      <Name>System.XML</Name>
   35.96 +    </Reference>
   35.97 +    <ProjectReference Include="..\..\IBBoardWF\IBBoardWF.csproj">
   35.98 +      <Name>IBBoardWF</Name>
   35.99 +      <Project>{E3790268-2082-4975-B1A3-C70B37842CE8}</Project>
  35.100 +      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
  35.101 +    </ProjectReference>
  35.102 +    <ProjectReference Include="..\..\IBBoard\IBBoard.csproj">
  35.103 +      <Name>IBBoard</Name>
  35.104 +      <Project>{5DFD64F6-FC2B-4B4F-B92E-483BAC468105}</Project>
  35.105 +      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
  35.106 +    </ProjectReference>
  35.107 +    <ProjectReference Include="..\IBBoard.WarFoundry.API\IBBoard.WarFoundry.API.csproj">
  35.108 +      <Name>IBBoard.WarFoundry.API</Name>
  35.109 +      <Project>{59EC117B-F955-44D5-8461-8F44F3A7481A}</Project>
  35.110 +      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
  35.111 +    </ProjectReference>
  35.112 +  </ItemGroup>
  35.113 +  <ItemGroup>
  35.114 +    <Content Include="App.ico" />
  35.115 +    <Content Include="libs\log4net.dll" />
  35.116 +    <Content Include="libs\log4net.xml" />
  35.117 +    <Compile Include="AssemblyInfo.cs">
  35.118 +      <SubType>Code</SubType>
  35.119 +    </Compile>
  35.120 +    <Compile Include="FrmArmyTree.cs">
  35.121 +      <SubType>Form</SubType>
  35.122 +    </Compile>
  35.123 +    <Compile Include="FrmDebugOutput.cs">
  35.124 +      <SubType>Form</SubType>
  35.125 +    </Compile>
  35.126 +    <Compile Include="FrmEditUnitEquipment.cs">
  35.127 +      <SubType>Form</SubType>
  35.128 +    </Compile>
  35.129 +    <Compile Include="FrmMain.cs">
  35.130 +      <SubType>Form</SubType>
  35.131 +    </Compile>
  35.132 +    <Compile Include="FrmNewArmy.cs">
  35.133 +      <SubType>Form</SubType>
  35.134 +    </Compile>
  35.135 +    <Compile Include="FrmNewUnit.cs">
  35.136 +      <SubType>Form</SubType>
  35.137 +    </Compile>
  35.138 +    <Compile Include="FrmNewUnitEquipment.cs">
  35.139 +      <SubType>Form</SubType>
  35.140 +    </Compile>
  35.141 +    <Compile Include="FrmReplaceUnitEquipment.cs">
  35.142 +      <SubType>Form</SubType>
  35.143 +    </Compile>
  35.144 +    <Compile Include="FrmSelectSystem.cs">
  35.145 +      <SubType>Form</SubType>
  35.146 +    </Compile>
  35.147 +    <Compile Include="FrmUnit.cs">
  35.148 +      <SubType>Form</SubType>
  35.149 +    </Compile>
  35.150 +    <EmbeddedResource Include="FrmArmyTree.resx">
  35.151 +      <DependentUpon>FrmArmyTree.cs</DependentUpon>
  35.152 +    </EmbeddedResource>
  35.153 +    <EmbeddedResource Include="FrmDebugOutput.resx">
  35.154 +      <DependentUpon>FrmDebugOutput.cs</DependentUpon>
  35.155 +    </EmbeddedResource>
  35.156 +    <EmbeddedResource Include="FrmEditUnitEquipment.resx">
  35.157 +      <DependentUpon>FrmEditUnitEquipment.cs</DependentUpon>
  35.158 +    </EmbeddedResource>
  35.159 +    <EmbeddedResource Include="FrmMain.resx">
  35.160 +      <DependentUpon>FrmMain.cs</DependentUpon>
  35.161 +    </EmbeddedResource>
  35.162 +    <EmbeddedResource Include="FrmNewArmy.resx">
  35.163 +      <DependentUpon>FrmNewArmy.cs</DependentUpon>
  35.164 +    </EmbeddedResource>
  35.165 +    <EmbeddedResource Include="FrmNewUnit.resx">
  35.166 +      <DependentUpon>FrmNewUnit.cs</DependentUpon>
  35.167 +    </EmbeddedResource>
  35.168 +    <EmbeddedResource Include="FrmNewUnitEquipment.resx">
  35.169 +      <DependentUpon>FrmNewUnitEquipment.cs</DependentUpon>
  35.170 +    </EmbeddedResource>
  35.171 +    <EmbeddedResource Include="FrmReplaceUnitEquipment.resx">
  35.172 +      <DependentUpon>FrmReplaceUnitEquipment.cs</DependentUpon>
  35.173 +    </EmbeddedResource>
  35.174 +    <EmbeddedResource Include="FrmSelectSystem.resx">
  35.175 +      <DependentUpon>FrmSelectSystem.cs</DependentUpon>
  35.176 +    </EmbeddedResource>
  35.177 +    <EmbeddedResource Include="FrmUnit.resx">
  35.178 +      <DependentUpon>FrmUnit.cs</DependentUpon>
  35.179 +    </EmbeddedResource>
  35.180 +    <None Include="app.config" />
  35.181 +    <None Include="WarFoundry.exe.manifest" />
  35.182 +  </ItemGroup>
  35.183 +  <ItemGroup>
  35.184 +    <Folder Include="Properties\" />
  35.185 +  </ItemGroup>
  35.186 +  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  35.187 +  <PropertyGroup>
  35.188 +    <PreBuildEvent>
  35.189 +    </PreBuildEvent>
  35.190 +    <PostBuildEvent>
  35.191 +    </PostBuildEvent>
  35.192 +  </PropertyGroup>
  35.193 +</Project>
    36.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    36.2 +++ b/IBBoard.WarFoundry.csproj.user	Fri Dec 19 15:57:51 2008 +0000
    36.3 @@ -0,0 +1,68 @@
    36.4 +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    36.5 +  <PropertyGroup>
    36.6 +    <LastOpenVersion>7.10.3077</LastOpenVersion>
    36.7 +    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    36.8 +    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    36.9 +    <ReferencePath>
   36.10 +    </ReferencePath>
   36.11 +    <CopyProjectDestinationFolder>
   36.12 +    </CopyProjectDestinationFolder>
   36.13 +    <CopyProjectUncPath>
   36.14 +    </CopyProjectUncPath>
   36.15 +    <CopyProjectOption>0</CopyProjectOption>
   36.16 +    <ProjectView>ProjectFiles</ProjectView>
   36.17 +    <ProjectTrust>0</ProjectTrust>
   36.18 +    <PublishUrlHistory>publish\</PublishUrlHistory>
   36.19 +    <InstallUrlHistory>
   36.20 +    </InstallUrlHistory>
   36.21 +    <SupportUrlHistory>
   36.22 +    </SupportUrlHistory>
   36.23 +    <UpdateUrlHistory>
   36.24 +    </UpdateUrlHistory>
   36.25 +    <BootstrapperUrlHistory>
   36.26 +    </BootstrapperUrlHistory>
   36.27 +    <ApplicationRevision>0</ApplicationRevision>
   36.28 +    <FallbackCulture>en-US</FallbackCulture>
   36.29 +    <VerifyUploadedFiles>false</VerifyUploadedFiles>
   36.30 +  </PropertyGroup>
   36.31 +  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
   36.32 +    <EnableASPDebugging>false</EnableASPDebugging>
   36.33 +    <EnableASPXDebugging>false</EnableASPXDebugging>
   36.34 +    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
   36.35 +    <EnableSQLServerDebugging>false</EnableSQLServerDebugging>
   36.36 +    <RemoteDebugEnabled>false</RemoteDebugEnabled>
   36.37 +    <RemoteDebugMachine>
   36.38 +    </RemoteDebugMachine>
   36.39 +    <StartAction>Project</StartAction>
   36.40 +    <StartArguments>
   36.41 +    </StartArguments>
   36.42 +    <StartPage>
   36.43 +    </StartPage>
   36.44 +    <StartProgram>
   36.45 +    </StartProgram>
   36.46 +    <StartURL>
   36.47 +    </StartURL>
   36.48 +    <StartWorkingDirectory>C:\Documents and Settings\ibboard\My Documents\Visual Studio 2005\Projects\bin\Debug\</StartWorkingDirectory>
   36.49 +    <StartWithIE>true</StartWithIE>
   36.50 +  </PropertyGroup>
   36.51 +  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
   36.52 +    <EnableASPDebugging>false</EnableASPDebugging>
   36.53 +    <EnableASPXDebugging>false</EnableASPXDebugging>
   36.54 +    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
   36.55 +    <EnableSQLServerDebugging>false</EnableSQLServerDebugging>
   36.56 +    <RemoteDebugEnabled>false</RemoteDebugEnabled>
   36.57 +    <RemoteDebugMachine>
   36.58 +    </RemoteDebugMachine>
   36.59 +    <StartAction>Project</StartAction>
   36.60 +    <StartArguments>
   36.61 +    </StartArguments>
   36.62 +    <StartPage>
   36.63 +    </StartPage>
   36.64 +    <StartProgram>
   36.65 +    </StartProgram>
   36.66 +    <StartURL>
   36.67 +    </StartURL>
   36.68 +    <StartWorkingDirectory>C:\Documents and Settings\ibboard\My Documents\Visual Studio 2005\Projects\bin\Debug\</StartWorkingDirectory>
   36.69 +    <StartWithIE>true</StartWithIE>
   36.70 +  </PropertyGroup>
   36.71 +</Project>
   36.72 \ No newline at end of file
    37.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    37.2 +++ b/IBBoard.WarFoundry.mdp	Fri Dec 19 15:57:51 2008 +0000
    37.3 @@ -0,0 +1,50 @@
    37.4 +<Project name="IBBoard.WarFoundry" fileversion="2.0" DefaultNamespace="IBBoard.WarFoundry" language="C#" clr-version="Net_1_1" ctype="DotNetProject">
    37.5 +  <Configurations active="Debug">
    37.6 +    <Configuration name="Debug" ctype="DotNetProjectConfiguration">
    37.7 +      <Output directory="bin/Debug/" assembly="WarFoundry" />
    37.8 +      <Build debugmode="True" target="WinExe" />
    37.9 +      <Execution runwithwarnings="False" consolepause="True" runtime="MsNet" clr-version="Net_1_1" />
   37.10 +      <CodeGeneration compiler="Mcs" warninglevel="4" optimize="True" unsafecodeallowed="False" generateoverflowchecks="True" generatexmldocumentation="False" ctype="CSharpCompilerParameters" />
   37.11 +    </Configuration>
   37.12 +    <Configuration name="Release" ctype="DotNetProjectConfiguration">
   37.13 +      <Output directory="bin/Release/" assembly="WarFoundry" />
   37.14 +      <Build debugmode="False" target="WinExe" />
   37.15 +      <Execution runwithwarnings="False" consolepause="True" runtime="MsNet" clr-version="Net_1_1" />
   37.16 +      <CodeGeneration compiler="Mcs" warninglevel="4" optimize="True" unsafecodeallowed="False" generateoverflowchecks="True" generatexmldocumentation="False" ctype="CSharpCompilerParameters" />
   37.17 +    </Configuration>
   37.18 +  </Configurations>
   37.19 +  <Contents>
   37.20 +    <File name="App.ico" subtype="Code" buildaction="Exclude" />
   37.21 +    <File name="AssemblyInfo.cs" subtype="Code" buildaction="Compile" />
   37.22 +    <File name="FrmArmyTree.cs" subtype="Code" buildaction="Compile" />
   37.23 +    <File name="FrmArmyTree.resx" subtype="Code" buildaction="EmbedAsResource" dependson="FrmArmyTree.cs" resource_id="IBBoard.WarFoundry.FrmArmyTree.resources" />
   37.24 +    <File name="FrmDebugOutput.cs" subtype="Code" buildaction="Compile" />
   37.25 +    <File name="FrmDebugOutput.resx" subtype="Code" buildaction="EmbedAsResource" dependson="FrmDebugOutput.cs" resource_id="IBBoard.WarFoundry.FrmDebugOutput.resources" />
   37.26 +    <File name="FrmEditUnitEquipment.cs" subtype="Code" buildaction="Compile" />
   37.27 +    <File name="FrmEditUnitEquipment.resx" subtype="Code" buildaction="EmbedAsResource" dependson="FrmEditUnitEquipment.cs" resource_id="IBBoard.WarFoundry.FrmEditUnitEquipment.resources" />
   37.28 +    <File name="FrmMain.cs" subtype="Code" buildaction="Compile" />
   37.29 +    <File name="FrmMain.resx" subtype="Code" buildaction="EmbedAsResource" dependson="FrmMain.cs" resource_id="IBBoard.WarFoundry.FrmMain.resources" />
   37.30 +    <File name="FrmNewArmy.cs" subtype="Code" buildaction="Compile" />
   37.31 +    <File name="FrmNewArmy.resx" subtype="Code" buildaction="EmbedAsResource" dependson="FrmNewArmy.cs" resource_id="IBBoard.WarFoundry.FrmNewArmy.resources" />
   37.32 +    <File name="FrmNewUnit.cs" subtype="Code" buildaction="Compile" />
   37.33 +    <File name="FrmNewUnit.resx" subtype="Code" buildaction="EmbedAsResource" dependson="FrmNewUnit.cs" resource_id="IBBoard.WarFoundry.FrmNewUnit.resources" />
   37.34 +    <File name="FrmNewUnitEquipment.cs" subtype="Code" buildaction="Compile" />
   37.35 +    <File name="FrmNewUnitEquipment.resx" subtype="Code" buildaction="EmbedAsResource" dependson="FrmNewUnitEquipment.cs" resource_id="IBBoard.WarFoundry.FrmNewUnitEquipment.resources" />
   37.36 +    <File name="FrmReplaceUnitEquipment.cs" subtype="Code" buildaction="Compile" />
   37.37 +    <File name="FrmReplaceUnitEquipment.resx" subtype="Code" buildaction="EmbedAsResource" dependson="FrmReplaceUnitEquipment.cs" resource_id="IBBoard.WarFoundry.FrmReplaceUnitEquipment.resources" />
   37.38 +    <File name="FrmSelectSystem.cs" subtype="Code" buildaction="Compile" />
   37.39 +    <File name="FrmSelectSystem.resx" subtype="Code" buildaction="EmbedAsResource" dependson="FrmSelectSystem.cs" resource_id="IBBoard.WarFoundry.FrmSelectSystem.resources" />
   37.40 +    <File name="FrmUnit.cs" subtype="Code" buildaction="Compile" />
   37.41 +    <File name="FrmUnit.resx" subtype="Code" buildaction="EmbedAsResource" dependson="FrmUnit.cs" resource_id="IBBoard.WarFoundry.FrmUnit.resources" />
   37.42 +    <File name="WarFoundry.exe.manifest" subtype="Code" buildaction="Nothing" />
   37.43 +  </Contents>
   37.44 +  <References>
   37.45 +    <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
   37.46 +    <ProjectReference type="Gac" localcopy="True" refto="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
   37.47 +    <ProjectReference type="Gac" localcopy="True" refto="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
   37.48 +    <ProjectReference type="Gac" localcopy="True" refto="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
   37.49 +    <ProjectReference type="Gac" localcopy="True" refto="System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
   37.50 +    <ProjectReference type="Project" localcopy="True" refto="IBBoard" />
   37.51 +    <ProjectReference type="Project" localcopy="True" refto="IBBoard.WarFoundry.API" />
   37.52 +  </References>
   37.53 +</Project>
   37.54 \ No newline at end of file
    38.1 Binary file IBBoard.WarFoundry.pidb has changed
    39.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    39.2 +++ b/WarFoundry.exe.manifest	Fri Dec 19 15:57:51 2008 +0000
    39.3 @@ -0,0 +1,22 @@
    39.4 +<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    39.5 +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    39.6 +<assemblyIdentity
    39.7 +   version="1.0.0.0"
    39.8 +   processorArchitecture="X86"
    39.9 +   name="Microsoft.Winweb.WarFoundry"
   39.10 +   type="win32"
   39.11 +/>
   39.12 +<description>.NET control deployment tool</description>
   39.13 +<dependency>
   39.14 +   <dependentAssembly>
   39.15 +     <assemblyIdentity
   39.16 +       type="win32"
   39.17 +       name="Microsoft.Windows.Common-Controls"
   39.18 +       version="6.0.0.0"
   39.19 +       processorArchitecture="X86"
   39.20 +       publicKeyToken="6595b64144ccf1df"
   39.21 +       language="*"
   39.22 +     />
   39.23 +   </dependentAssembly>
   39.24 +</dependency>
   39.25 +</assembly>
   39.26 \ No newline at end of file
    40.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    40.2 +++ b/WarFoundryPref.xml	Fri Dec 19 15:57:51 2008 +0000
    40.3 @@ -0,0 +1,13 @@
    40.4 +<?xml version="1.0" encoding="ISO-8859-1"?>
    40.5 +<!DOCTYPE preferences[
    40.6 +  <!ELEMENT preference (CDATA|preferenceArr+)> 
    40.7 +  <!ELEMENT preferenceArr (CDATA)>
    40.8 +  <!ATTLIST preference id ID #REQUIRED>
    40.9 +  <!ATTLIST preference type CDATA #REQUIRED>
   40.10 +  <!ATTLIST preferenceArr id ID #REQUIRED>
   40.11 +]>
   40.12 +<preferences>
   40.13 +<preference id="language" type="System.String">en</preference>
   40.14 +<preference id="currSystem" type="System.String">wh</preference>
   40.15 +<preference id="logLevel" type="System.String">Info</preference>
   40.16 +</preferences>
    41.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    41.2 +++ b/app.config	Fri Dec 19 15:57:51 2008 +0000
    41.3 @@ -0,0 +1,3 @@
    41.4 +<?xml version="1.0" encoding="utf-8" ?>
    41.5 +<configuration>
    41.6 +</configuration>
    41.7 \ No newline at end of file
    42.1 Binary file libs/log4net.dll has changed
    43.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    43.2 +++ b/libs/log4net.xml	Fri Dec 19 15:57:51 2008 +0000
    43.3 @@ -0,0 +1,27658 @@
    43.4 +<?xml version="1.0"?>
    43.5 +<doc>
    43.6 +    <assembly>
    43.7 +        <name>log4net</name>
    43.8 +    </assembly>
    43.9 +    <members>
   43.10 +        <member name="T:log4net.Appender.AdoNetAppender">
   43.11 +            <summary>
   43.12 +            Appender that logs to a database.
   43.13 +            </summary>
   43.14 +            <remarks>
   43.15 +            <para>
   43.16 +            <see cref="T:log4net.Appender.AdoNetAppender"/> appends logging events to a table within a
   43.17 +            database. The appender can be configured to specify the connection 
   43.18 +            string by setting the <see cref="P:log4net.Appender.AdoNetAppender.ConnectionString"/> property. 
   43.19 +            The connection type (provider) can be specified by setting the <see cref="P:log4net.Appender.AdoNetAppender.ConnectionType"/>
   43.20 +            property. For more information on database connection strings for
   43.21 +            your specific database see <a href="http://www.connectionstrings.com/">http://www.connectionstrings.com/</a>.
   43.22 +            </para>
   43.23 +            <para>
   43.24 +            Records are written into the database either using a prepared
   43.25 +            statement or a stored procedure. The <see cref="P:log4net.Appender.AdoNetAppender.CommandType"/> property
   43.26 +            is set to <see cref="F:System.Data.CommandType.Text"/> (<c>System.Data.CommandType.Text</c>) to specify a prepared statement
   43.27 +            or to <see cref="F:System.Data.CommandType.StoredProcedure"/> (<c>System.Data.CommandType.StoredProcedure</c>) to specify a stored
   43.28 +            procedure.
   43.29 +            </para>
   43.30 +            <para>
   43.31 +            The prepared statement text or the name of the stored procedure
   43.32 +            must be set in the <see cref="P:log4net.Appender.AdoNetAppender.CommandText"/> property.
   43.33 +            </para>
   43.34 +            <para>
   43.35 +            The prepared statement or stored procedure can take a number
   43.36 +            of parameters. Parameters are added using the <see cref="M:log4net.Appender.AdoNetAppender.AddParameter(log4net.Appender.AdoNetAppenderParameter)"/>
   43.37 +            method. This adds a single <see cref="T:log4net.Appender.AdoNetAppenderParameter"/> to the
   43.38 +            ordered list of parameters. The <see cref="T:log4net.Appender.AdoNetAppenderParameter"/>
   43.39 +            type may be subclassed if required to provide database specific
   43.40 +            functionality. The <see cref="T:log4net.Appender.AdoNetAppenderParameter"/> specifies
   43.41 +            the parameter name, database type, size, and how the value should
   43.42 +            be generated using a <see cref="T:log4net.Layout.ILayout"/>.
   43.43 +            </para>
   43.44 +            </remarks>
   43.45 +            <example>
   43.46 +            An example of a SQL Server table that could be logged to:
   43.47 +            <code lang="SQL">
   43.48 +            CREATE TABLE [dbo].[Log] ( 
   43.49 +              [ID] [int] IDENTITY (1, 1) NOT NULL ,
   43.50 +              [Date] [datetime] NOT NULL ,
   43.51 +              [Thread] [varchar] (255) NOT NULL ,
   43.52 +              [Level] [varchar] (20) NOT NULL ,
   43.53 +              [Logger] [varchar] (255) NOT NULL ,
   43.54 +              [Message] [varchar] (4000) NOT NULL 
   43.55 +            ) ON [PRIMARY]
   43.56 +            </code>
   43.57 +            </example>
   43.58 +            <example>
   43.59 +            An example configuration to log to the above table:
   43.60 +            <code lang="XML" escaped="true">
   43.61 +            <appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
   43.62 +              <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
   43.63 +              <connectionString value="data source=SQLSVR;initial catalog=test_log4net;integrated security=false;persist security info=True;User ID=sa;Password=sa"/>
   43.64 +              <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)"/>
   43.65 +              <parameter>
   43.66 +                <parameterName value="@log_date"/>
   43.67 +                <dbType value="DateTime"/>
   43.68 +                <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}"/>
   43.69 +              </parameter>
   43.70 +              <parameter>
   43.71 +                <parameterName value="@thread"/>
   43.72 +                <dbType value="String"/>
   43.73 +                <size value="255"/>
   43.74 +                <layout type="log4net.Layout.PatternLayout" value="%thread"/>
   43.75 +              </parameter>
   43.76 +              <parameter>
   43.77 +                <parameterName value="@log_level"/>
   43.78 +                <dbType value="String"/>
   43.79 +                <size value="50"/>
   43.80 +                <layout type="log4net.Layout.PatternLayout" value="%level"/>
   43.81 +              </parameter>
   43.82 +              <parameter>
   43.83 +                <parameterName value="@logger"/>
   43.84 +                <dbType value="String"/>
   43.85 +                <size value="255"/>
   43.86 +                <layout type="log4net.Layout.PatternLayout" value="%logger"/>
   43.87 +              </parameter>
   43.88 +              <parameter>
   43.89 +                <parameterName value="@message"/>
   43.90 +                <dbType value="String"/>
   43.91 +                <size value="4000"/>
   43.92 +                <layout type="log4net.Layout.PatternLayout" value="%message"/>
   43.93 +              </parameter>
   43.94 +            </appender>
   43.95 +            </code>
   43.96 +            </example>
   43.97 +            <author>Julian Biddle</author>
   43.98 +            <author>Nicko Cadell</author>
   43.99 +            <author>Gert Driesen</author>
  43.100 +            <author>Lance Nehring</author>
  43.101 +        </member>
  43.102 +        <member name="T:log4net.Appender.BufferingAppenderSkeleton">
  43.103 +            <summary>
  43.104 +            Abstract base class implementation of <see cref="T:log4net.Appender.IAppender"/> that 
  43.105 +            buffers events in a fixed size buffer.
  43.106 +            </summary>
  43.107 +            <remarks>
  43.108 +            <para>
  43.109 +            This base class should be used by appenders that need to buffer a 
  43.110 +            number of events before logging them. For example the <see cref="T:log4net.Appender.AdoNetAppender"/> 
  43.111 +            buffers events and then submits the entire contents of the buffer to 
  43.112 +            the underlying database in one go.
  43.113 +            </para>
  43.114 +            <para>
  43.115 +            Subclasses should override the <see cref="M:log4net.Appender.BufferingAppenderSkeleton.SendBuffer(log4net.Core.LoggingEvent[])"/>
  43.116 +            method to deliver the buffered events.
  43.117 +            </para>
  43.118 +            <para>The BufferingAppenderSkeleton maintains a fixed size cyclic 
  43.119 +            buffer of events. The size of the buffer is set using 
  43.120 +            the <see cref="P:log4net.Appender.BufferingAppenderSkeleton.BufferSize"/> property.
  43.121 +            </para>
  43.122 +            <para>A <see cref="T:log4net.Core.ITriggeringEventEvaluator"/> is used to inspect 
  43.123 +            each event as it arrives in the appender. If the <see cref="P:log4net.Appender.BufferingAppenderSkeleton.Evaluator"/> 
  43.124 +            triggers, then the current buffer is sent immediately 
  43.125 +            (see <see cref="M:log4net.Appender.BufferingAppenderSkeleton.SendBuffer(log4net.Core.LoggingEvent[])"/>). Otherwise the event 
  43.126 +            is stored in the buffer. For example, an evaluator can be used to 
  43.127 +            deliver the events immediately when an ERROR event arrives.
  43.128 +            </para>
  43.129 +            <para>
  43.130 +            The buffering appender can be configured in a <see cref="P:log4net.Appender.BufferingAppenderSkeleton.Lossy"/> mode. 
  43.131 +            By default the appender is NOT lossy. When the buffer is full all 
  43.132 +            the buffered events are sent with <see cref="M:log4net.Appender.BufferingAppenderSkeleton.SendBuffer(log4net.Core.LoggingEvent[])"/>.
  43.133 +            If the <see cref="P:log4net.Appender.BufferingAppenderSkeleton.Lossy"/> property is set to <c>true</c> then the 
  43.134 +            buffer will not be sent when it is full, and new events arriving 
  43.135 +            in the appender will overwrite the oldest event in the buffer. 
  43.136 +            In lossy mode the buffer will only be sent when the <see cref="P:log4net.Appender.BufferingAppenderSkeleton.Evaluator"/>
  43.137 +            triggers. This can be useful behavior when you need to know about 
  43.138 +            ERROR events but not about events with a lower level, configure an 
  43.139 +            evaluator that will trigger when an ERROR event arrives, the whole 
  43.140 +            buffer will be sent which gives a history of events leading up to
  43.141 +            the ERROR event.
  43.142 +            </para>
  43.143 +            </remarks>
  43.144 +            <author>Nicko Cadell</author>
  43.145 +            <author>Gert Driesen</author>
  43.146 +        </member>
  43.147 +        <member name="T:log4net.Appender.AppenderSkeleton">
  43.148 +            <summary>
  43.149 +            Abstract base class implementation of <see cref="T:log4net.Appender.IAppender"/>. 
  43.150 +            </summary>
  43.151 +            <remarks>
  43.152 +            <para>
  43.153 +            This class provides the code for common functionality, such 
  43.154 +            as support for threshold filtering and support for general filters.
  43.155 +            </para>
  43.156 +            <para>
  43.157 +            Appenders can also implement the <see cref="T:log4net.Core.IOptionHandler"/> interface. Therefore
  43.158 +            they would require that the <see cref="M:log4net.Core.IOptionHandler.ActivateOptions"/> method
  43.159 +            be called after the appenders properties have been configured.
  43.160 +            </para>
  43.161 +            </remarks>
  43.162 +            <author>Nicko Cadell</author>
  43.163 +            <author>Gert Driesen</author>
  43.164 +        </member>
  43.165 +        <member name="T:log4net.Appender.IAppender">
  43.166 +            <summary>
  43.167 +            Implement this interface for your own strategies for printing log statements.
  43.168 +            </summary>
  43.169 +            <remarks>
  43.170 +            <para>
  43.171 +            Implementors should consider extending the <see cref="T:log4net.Appender.AppenderSkeleton"/>
  43.172 +            class which provides a default implementation of this interface.
  43.173 +            </para>
  43.174 +            <para>
  43.175 +            Appenders can also implement the <see cref="T:log4net.Core.IOptionHandler"/> interface. Therefore
  43.176 +            they would require that the <see cref="M:log4net.Core.IOptionHandler.ActivateOptions"/> method
  43.177 +            be called after the appenders properties have been configured.
  43.178 +            </para>
  43.179 +            </remarks>
  43.180 +            <author>Nicko Cadell</author>
  43.181 +            <author>Gert Driesen</author>
  43.182 +        </member>
  43.183 +        <member name="M:log4net.Appender.IAppender.Close">
  43.184 +            <summary>
  43.185 +            Closes the appender and releases resources.
  43.186 +            </summary>
  43.187 +            <remarks>
  43.188 +            <para>
  43.189 +            Releases any resources allocated within the appender such as file handles, 
  43.190 +            network connections, etc.
  43.191 +            </para>
  43.192 +            <para>
  43.193 +            It is a programming error to append to a closed appender.
  43.194 +            </para>
  43.195 +            </remarks>
  43.196 +        </member>
  43.197 +        <member name="M:log4net.Appender.IAppender.DoAppend(log4net.Core.LoggingEvent)">
  43.198 +            <summary>
  43.199 +            Log the logging event in Appender specific way.
  43.200 +            </summary>
  43.201 +            <param name="loggingEvent">The event to log</param>
  43.202 +            <remarks>
  43.203 +            <para>
  43.204 +            This method is called to log a message into this appender.
  43.205 +            </para>
  43.206 +            </remarks>
  43.207 +        </member>
  43.208 +        <member name="P:log4net.Appender.IAppender.Name">
  43.209 +            <summary>
  43.210 +            Gets or sets the name of this appender.
  43.211 +            </summary>
  43.212 +            <value>The name of the appender.</value>
  43.213 +            <remarks>
  43.214 +            <para>The name uniquely identifies the appender.</para>
  43.215 +            </remarks>
  43.216 +        </member>
  43.217 +        <member name="T:log4net.Appender.IBulkAppender">
  43.218 +            <summary>
  43.219 +            Interface for appenders that support bulk logging.
  43.220 +            </summary>
  43.221 +            <remarks>
  43.222 +            <para>
  43.223 +            This interface extends the <see cref="T:log4net.Appender.IAppender"/> interface to
  43.224 +            support bulk logging of <see cref="T:log4net.Core.LoggingEvent"/> objects. Appenders
  43.225 +            should only implement this interface if they can bulk log efficiently.
  43.226 +            </para>
  43.227 +            </remarks>
  43.228 +            <author>Nicko Cadell</author>
  43.229 +        </member>
  43.230 +        <member name="M:log4net.Appender.IBulkAppender.DoAppend(log4net.Core.LoggingEvent[])">
  43.231 +            <summary>
  43.232 +            Log the array of logging events in Appender specific way.
  43.233 +            </summary>
  43.234 +            <param name="loggingEvents">The events to log</param>
  43.235 +            <remarks>
  43.236 +            <para>
  43.237 +            This method is called to log an array of events into this appender.
  43.238 +            </para>
  43.239 +            </remarks>
  43.240 +        </member>
  43.241 +        <member name="T:log4net.Core.IOptionHandler">
  43.242 +            <summary>
  43.243 +            Interface used to delay activate a configured object.
  43.244 +            </summary>
  43.245 +            <remarks>
  43.246 +            <para>
  43.247 +            This allows an object to defer activation of its options until all
  43.248 +            options have been set. This is required for components which have
  43.249 +            related options that remain ambiguous until all are set.
  43.250 +            </para>
  43.251 +            <para>
  43.252 +            If a component implements this interface then the <see cref="M:log4net.Core.IOptionHandler.ActivateOptions"/> method 
  43.253 +            must be called by the container after its all the configured properties have been set 
  43.254 +            and before the component can be used.
  43.255 +            </para>
  43.256 +            </remarks>
  43.257 +            <author>Nicko Cadell</author>
  43.258 +        </member>
  43.259 +        <member name="M:log4net.Core.IOptionHandler.ActivateOptions">
  43.260 +            <summary>
  43.261 +            Activate the options that were previously set with calls to properties.
  43.262 +            </summary>
  43.263 +            <remarks>
  43.264 +            <para>
  43.265 +            This allows an object to defer activation of its options until all
  43.266 +            options have been set. This is required for components which have
  43.267 +            related options that remain ambiguous until all are set.
  43.268 +            </para>
  43.269 +            <para>
  43.270 +            If a component implements this interface then this method must be called
  43.271 +            after its properties have been set before the component can be used.
  43.272 +            </para>
  43.273 +            </remarks>
  43.274 +        </member>
  43.275 +        <member name="F:log4net.Appender.AppenderSkeleton.c_renderBufferSize">
  43.276 +            <summary>
  43.277 +            Initial buffer size
  43.278 +            </summary>
  43.279 +        </member>
  43.280 +        <member name="F:log4net.Appender.AppenderSkeleton.c_renderBufferMaxCapacity">
  43.281 +            <summary>
  43.282 +            Maximum buffer size before it is recycled
  43.283 +            </summary>
  43.284 +        </member>
  43.285 +        <member name="M:log4net.Appender.AppenderSkeleton.#ctor">
  43.286 +            <summary>
  43.287 +            Default constructor
  43.288 +            </summary>
  43.289 +            <remarks>
  43.290 +            <para>Empty default constructor</para>
  43.291 +            </remarks>
  43.292 +        </member>
  43.293 +        <member name="M:log4net.Appender.AppenderSkeleton.Finalize">
  43.294 +            <summary>
  43.295 +            Finalizes this appender by calling the implementation's 
  43.296 +            <see cref="M:log4net.Appender.AppenderSkeleton.Close"/> method.
  43.297 +            </summary>
  43.298 +            <remarks>
  43.299 +            <para>
  43.300 +            If this appender has not been closed then the <c>Finalize</c> method
  43.301 +            will call <see cref="M:log4net.Appender.AppenderSkeleton.Close"/>.
  43.302 +            </para>
  43.303 +            </remarks>
  43.304 +        </member>
  43.305 +        <member name="M:log4net.Appender.AppenderSkeleton.ActivateOptions">
  43.306 +            <summary>
  43.307 +            Initialize the appender based on the options set
  43.308 +            </summary>
  43.309 +            <remarks>
  43.310 +            <para>
  43.311 +            This is part of the <see cref="T:log4net.Core.IOptionHandler"/> delayed object
  43.312 +            activation scheme. The <see cref="M:log4net.Appender.AppenderSkeleton.ActivateOptions"/> method must 
  43.313 +            be called on this object after the configuration properties have
  43.314 +            been set. Until <see cref="M:log4net.Appender.AppenderSkeleton.ActivateOptions"/> is called this
  43.315 +            object is in an undefined state and must not be used. 
  43.316 +            </para>
  43.317 +            <para>
  43.318 +            If any of the configuration properties are modified then 
  43.319 +            <see cref="M:log4net.Appender.AppenderSkeleton.ActivateOptions"/> must be called again.
  43.320 +            </para>
  43.321 +            </remarks>
  43.322 +        </member>
  43.323 +        <member name="M:log4net.Appender.AppenderSkeleton.Close">
  43.324 +            <summary>
  43.325 +            Closes the appender and release resources.
  43.326 +            </summary>
  43.327 +            <remarks>
  43.328 +            <para>
  43.329 +            Release any resources allocated within the appender such as file handles, 
  43.330 +            network connections, etc.
  43.331 +            </para>
  43.332 +            <para>
  43.333 +            It is a programming error to append to a closed appender.
  43.334 +            </para>
  43.335 +            <para>
  43.336 +            This method cannot be overridden by subclasses. This method 
  43.337 +            delegates the closing of the appender to the <see cref="M:log4net.Appender.AppenderSkeleton.OnClose"/>
  43.338 +            method which must be overridden in the subclass.
  43.339 +            </para>
  43.340 +            </remarks>
  43.341 +        </member>
  43.342 +        <member name="M:log4net.Appender.AppenderSkeleton.DoAppend(log4net.Core.LoggingEvent)">
  43.343 +            <summary>
  43.344 +            Performs threshold checks and invokes filters before 
  43.345 +            delegating actual logging to the subclasses specific 
  43.346 +            <see cref="M:log4net.Appender.AppenderSkeleton.Append(log4net.Core.LoggingEvent)"/> method.
  43.347 +            </summary>
  43.348 +            <param name="loggingEvent">The event to log.</param>
  43.349 +            <remarks>
  43.350 +            <para>
  43.351 +            This method cannot be overridden by derived classes. A
  43.352 +            derived class should override the <see cref="M:log4net.Appender.AppenderSkeleton.Append(log4net.Core.LoggingEvent)"/> method
  43.353 +            which is called by this method.
  43.354 +            </para>
  43.355 +            <para>
  43.356 +            The implementation of this method is as follows:
  43.357 +            </para>
  43.358 +            <para>
  43.359 +            <list type="bullet">
  43.360 +            	<item>
  43.361 +            		<description>
  43.362 +            		Checks that the severity of the <paramref name="loggingEvent"/>
  43.363 +            		is greater than or equal to the <see cref="P:log4net.Appender.AppenderSkeleton.Threshold"/> of this
  43.364 +            		appender.</description>
  43.365 +            	</item>
  43.366 +            	<item>
  43.367 +            		<description>
  43.368 +            		Checks that the <see cref="T:log4net.Filter.IFilter"/> chain accepts the 
  43.369 +            		<paramref name="loggingEvent"/>.
  43.370 +            		</description>
  43.371 +            	</item>
  43.372 +            	<item>
  43.373 +            		<description>
  43.374 +            		Calls <see cref="M:log4net.Appender.AppenderSkeleton.PreAppendCheck"/> and checks that 
  43.375 +            		it returns <c>true</c>.</description>
  43.376 +            	</item>
  43.377 +            </list>
  43.378 +            </para>
  43.379 +            <para>
  43.380 +            If all of the above steps succeed then the <paramref name="loggingEvent"/>
  43.381 +            will be passed to the abstract <see cref="M:log4net.Appender.AppenderSkeleton.Append(log4net.Core.LoggingEvent)"/> method.
  43.382 +            </para>
  43.383 +            </remarks>
  43.384 +        </member>
  43.385 +        <member name="M:log4net.Appender.AppenderSkeleton.DoAppend(log4net.Core.LoggingEvent[])">
  43.386 +            <summary>
  43.387 +            Performs threshold checks and invokes filters before 
  43.388 +            delegating actual logging to the subclasses specific 
  43.389 +            <see cref="M:log4net.Appender.AppenderSkeleton.Append(log4net.Core.LoggingEvent[])"/> method.
  43.390 +            </summary>
  43.391 +            <param name="loggingEvents">The array of events to log.</param>
  43.392 +            <remarks>
  43.393 +            <para>
  43.394 +            This method cannot be overridden by derived classes. A
  43.395 +            derived class should override the <see cref="M:log4net.Appender.AppenderSkeleton.Append(log4net.Core.LoggingEvent[])"/> method
  43.396 +            which is called by this method.
  43.397 +            </para>
  43.398 +            <para>
  43.399 +            The implementation of this method is as follows:
  43.400 +            </para>
  43.401 +            <para>
  43.402 +            <list type="bullet">
  43.403 +            	<item>
  43.404 +            		<description>
  43.405 +            		Checks that the severity of the <paramref name="loggingEvent"/>
  43.406 +            		is greater than or equal to the <see cref="P:log4net.Appender.AppenderSkeleton.Threshold"/> of this
  43.407 +            		appender.</description>
  43.408 +            	</item>
  43.409 +            	<item>
  43.410 +            		<description>
  43.411 +            		Checks that the <see cref="T:log4net.Filter.IFilter"/> chain accepts the 
  43.412 +            		<paramref name="loggingEvent"/>.
  43.413 +            		</description>
  43.414 +            	</item>
  43.415 +            	<item>
  43.416 +            		<description>
  43.417 +            		Calls <see cref="M:log4net.Appender.AppenderSkeleton.PreAppendCheck"/> and checks that 
  43.418 +            		it returns <c>true</c>.</description>
  43.419 +            	</item>
  43.420 +            </list>
  43.421 +            </para>
  43.422 +            <para>
  43.423 +            If all of the above steps succeed then the <paramref name="loggingEvents"/>
  43.424 +            will be passed to the <see cref="M:log4net.Appender.AppenderSkeleton.Append(log4net.Core.LoggingEvent[])"/> method.
  43.425 +            </para>
  43.426 +            </remarks>
  43.427 +        </member>
  43.428 +        <member name="M:log4net.Appender.AppenderSkeleton.FilterEvent(log4net.Core.LoggingEvent)">
  43.429 +            <summary>
  43.430 +            Test if the logging event should we output by this appender
  43.431 +            </summary>
  43.432 +            <param name="loggingEvent">the event to test</param>
  43.433 +            <returns><c>true</c> if the event should be output, <c>false</c> if the event should be ignored</returns>
  43.434 +            <remarks>
  43.435 +            <para>
  43.436 +            This method checks the logging event against the threshold level set
  43.437 +            on this appender and also against the filters specified on this
  43.438 +            appender.
  43.439 +            </para>
  43.440 +            <para>
  43.441 +            The implementation of this method is as follows:
  43.442 +            </para>
  43.443 +            <para>
  43.444 +            <list type="bullet">
  43.445 +            	<item>
  43.446 +            		<description>
  43.447 +            		Checks that the severity of the <paramref name="loggingEvent"/>
  43.448 +            		is greater than or equal to the <see cref="P:log4net.Appender.AppenderSkeleton.Threshold"/> of this
  43.449 +            		appender.</description>
  43.450 +            	</item>
  43.451 +            	<item>
  43.452 +            		<description>
  43.453 +            		Checks that the <see cref="T:log4net.Filter.IFilter"/> chain accepts the 
  43.454 +            		<paramref name="loggingEvent"/>.
  43.455 +            		</description>
  43.456 +            	</item>
  43.457 +            </list>
  43.458 +            </para>
  43.459 +            </remarks>
  43.460 +        </member>
  43.461 +        <member name="M:log4net.Appender.AppenderSkeleton.AddFilter(log4net.Filter.IFilter)">
  43.462 +            <summary>
  43.463 +            Adds a filter to the end of the filter chain.
  43.464 +            </summary>
  43.465 +            <param name="filter">the filter to add to this appender</param>
  43.466 +            <remarks>
  43.467 +            <para>
  43.468 +            The Filters are organized in a linked list.
  43.469 +            </para>
  43.470 +            <para>
  43.471 +            Setting this property causes the new filter to be pushed onto the 
  43.472 +            back of the filter chain.
  43.473 +            </para>
  43.474 +            </remarks>
  43.475 +        </member>
  43.476 +        <member name="M:log4net.Appender.AppenderSkeleton.ClearFilters">
  43.477 +            <summary>
  43.478 +            Clears the filter list for this appender.
  43.479 +            </summary>
  43.480 +            <remarks>
  43.481 +            <para>
  43.482 +            Clears the filter list for this appender.
  43.483 +            </para>
  43.484 +            </remarks>
  43.485 +        </member>
  43.486 +        <member name="M:log4net.Appender.AppenderSkeleton.IsAsSevereAsThreshold(log4net.Core.Level)">
  43.487 +            <summary>
  43.488 +            Checks if the message level is below this appender's threshold.
  43.489 +            </summary>
  43.490 +            <param name="level"><see cref="T:log4net.Core.Level"/> to test against.</param>
  43.491 +            <remarks>
  43.492 +            <para>
  43.493 +            If there is no threshold set, then the return value is always <c>true</c>.
  43.494 +            </para>
  43.495 +            </remarks>
  43.496 +            <returns>
  43.497 +            <c>true</c> if the <paramref name="level"/> meets the <see cref="P:log4net.Appender.AppenderSkeleton.Threshold"/> 
  43.498 +            requirements of this appender.
  43.499 +            </returns>
  43.500 +        </member>
  43.501 +        <member name="M:log4net.Appender.AppenderSkeleton.OnClose">
  43.502 +            <summary>
  43.503 +            Is called when the appender is closed. Derived classes should override 
  43.504 +            this method if resources need to be released.
  43.505 +            </summary>
  43.506 +            <remarks>
  43.507 +            <para>
  43.508 +            Releases any resources allocated within the appender such as file handles, 
  43.509 +            network connections, etc.
  43.510 +            </para>
  43.511 +            <para>
  43.512 +            It is a programming error to append to a closed appender.
  43.513 +            </para>
  43.514 +            </remarks>
  43.515 +        </member>
  43.516 +        <member name="M:log4net.Appender.AppenderSkeleton.Append(log4net.Core.LoggingEvent)">
  43.517 +            <summary>
  43.518 +            Subclasses of <see cref="T:log4net.Appender.AppenderSkeleton"/> should implement this method 
  43.519 +            to perform actual logging.
  43.520 +            </summary>
  43.521 +            <param name="loggingEvent">The event to append.</param>
  43.522 +            <remarks>
  43.523 +            <para>
  43.524 +            A subclass must implement this method to perform
  43.525 +            logging of the <paramref name="loggingEvent"/>.
  43.526 +            </para>
  43.527 +            <para>This method will be called by <see cref="M:log4net.Appender.AppenderSkeleton.DoAppend(log4net.Core.LoggingEvent)"/>
  43.528 +            if all the conditions listed for that method are met.
  43.529 +            </para>
  43.530 +            <para>
  43.531 +            To restrict the logging of events in the appender
  43.532 +            override the <see cref="M:log4net.Appender.AppenderSkeleton.PreAppendCheck"/> method.
  43.533 +            </para>
  43.534 +            </remarks>
  43.535 +        </member>
  43.536 +        <member name="M:log4net.Appender.AppenderSkeleton.Append(log4net.Core.LoggingEvent[])">
  43.537 +            <summary>
  43.538 +            Append a bulk array of logging events.
  43.539 +            </summary>
  43.540 +            <param name="loggingEvents">the array of logging events</param>
  43.541 +            <remarks>
  43.542 +            <para>
  43.543 +            This base class implementation calls the <see cref="M:log4net.Appender.AppenderSkeleton.Append(log4net.Core.LoggingEvent)"/>
  43.544 +            method for each element in the bulk array.
  43.545 +            </para>
  43.546 +            <para>
  43.547 +            A sub class that can better process a bulk array of events should
  43.548 +            override this method in addition to <see cref="M:log4net.Appender.AppenderSkeleton.Append(log4net.Core.LoggingEvent)"/>.
  43.549 +            </para>
  43.550 +            </remarks>
  43.551 +        </member>
  43.552 +        <member name="M:log4net.Appender.AppenderSkeleton.PreAppendCheck">
  43.553 +            <summary>
  43.554 +            Called before <see cref="M:log4net.Appender.AppenderSkeleton.Append(log4net.Core.LoggingEvent)"/> as a precondition.
  43.555 +            </summary>
  43.556 +            <remarks>
  43.557 +            <para>
  43.558 +            This method is called by <see cref="M:log4net.Appender.AppenderSkeleton.DoAppend(log4net.Core.LoggingEvent)"/>
  43.559 +            before the call to the abstract <see cref="M:log4net.Appender.AppenderSkeleton.Append(log4net.Core.LoggingEvent)"/> method.
  43.560 +            </para>
  43.561 +            <para>
  43.562 +            This method can be overridden in a subclass to extend the checks 
  43.563 +            made before the event is passed to the <see cref="M:log4net.Appender.AppenderSkeleton.Append(log4net.Core.LoggingEvent)"/> method.
  43.564 +            </para>
  43.565 +            <para>
  43.566 +            A subclass should ensure that they delegate this call to
  43.567 +            this base class if it is overridden.
  43.568 +            </para>
  43.569 +            </remarks>
  43.570 +            <returns><c>true</c> if the call to <see cref="M:log4net.Appender.AppenderSkeleton.Append(log4net.Core.LoggingEvent)"/> should proceed.</returns>
  43.571 +        </member>
  43.572 +        <member name="M:log4net.Appender.AppenderSkeleton.RenderLoggingEvent(log4net.Core.LoggingEvent)">
  43.573 +            <summary>
  43.574 +            Renders the <see cref="T:log4net.Core.LoggingEvent"/> to a string.
  43.575 +            </summary>
  43.576 +            <param name="loggingEvent">The event to render.</param>
  43.577 +            <returns>The event rendered as a string.</returns>
  43.578 +            <remarks>
  43.579 +            <para>
  43.580 +            Helper method to render a <see cref="T:log4net.Core.LoggingEvent"/> to 
  43.581 +            a string. This appender must have a <see cref="P:log4net.Appender.AppenderSkeleton.Layout"/>
  43.582 +            set to render the <paramref name="loggingEvent"/> to 
  43.583 +            a string.
  43.584 +            </para>
  43.585 +            <para>If there is exception data in the logging event and 
  43.586 +            the layout does not process the exception, this method 
  43.587 +            will append the exception text to the rendered string.
  43.588 +            </para>
  43.589 +            <para>
  43.590 +            Where possible use the alternative version of this method
  43.591 +            <see cref="M:log4net.Appender.AppenderSkeleton.RenderLoggingEvent(System.IO.TextWriter,log4net.Core.LoggingEvent)"/>.
  43.592 +            That method streams the rendering onto an existing Writer
  43.593 +            which can give better performance if the caller already has
  43.594 +            a <see cref="T:System.IO.TextWriter"/> open and ready for writing.
  43.595 +            </para>
  43.596 +            </remarks>
  43.597 +        </member>
  43.598 +        <member name="M:log4net.Appender.AppenderSkeleton.RenderLoggingEvent(System.IO.TextWriter,log4net.Core.LoggingEvent)">
  43.599 +            <summary>
  43.600 +            Renders the <see cref="T:log4net.Core.LoggingEvent"/> to a string.
  43.601 +            </summary>
  43.602 +            <param name="loggingEvent">The event to render.</param>
  43.603 +            <param name="writer">The TextWriter to write the formatted event to</param>
  43.604 +            <remarks>
  43.605 +            <para>
  43.606 +            Helper method to render a <see cref="T:log4net.Core.LoggingEvent"/> to 
  43.607 +            a string. This appender must have a <see cref="P:log4net.Appender.AppenderSkeleton.Layout"/>
  43.608 +            set to render the <paramref name="loggingEvent"/> to 
  43.609 +            a string.
  43.610 +            </para>
  43.611 +            <para>If there is exception data in the logging event and 
  43.612 +            the layout does not process the exception, this method 
  43.613 +            will append the exception text to the rendered string.
  43.614 +            </para>
  43.615 +            <para>
  43.616 +            Use this method in preference to <see cref="M:log4net.Appender.AppenderSkeleton.RenderLoggingEvent(log4net.Core.LoggingEvent)"/>
  43.617 +            where possible. If, however, the caller needs to render the event
  43.618 +            to a string then <see cref="M:log4net.Appender.AppenderSkeleton.RenderLoggingEvent(log4net.Core.LoggingEvent)"/> does
  43.619 +            provide an efficient mechanism for doing so.
  43.620 +            </para>
  43.621 +            </remarks>
  43.622 +        </member>
  43.623 +        <member name="F:log4net.Appender.AppenderSkeleton.m_layout">
  43.624 +            <summary>
  43.625 +            The layout of this appender.
  43.626 +            </summary>
  43.627 +            <remarks>
  43.628 +            See <see cref="P:log4net.Appender.AppenderSkeleton.Layout"/> for more information.
  43.629 +            </remarks>
  43.630 +        </member>
  43.631 +        <member name="F:log4net.Appender.AppenderSkeleton.m_name">
  43.632 +            <summary>
  43.633 +            The name of this appender.
  43.634 +            </summary>
  43.635 +            <remarks>
  43.636 +            See <see cref="P:log4net.Appender.AppenderSkeleton.Name"/> for more information.
  43.637 +            </remarks>
  43.638 +        </member>
  43.639 +        <member name="F:log4net.Appender.AppenderSkeleton.m_threshold">
  43.640 +            <summary>
  43.641 +            The level threshold of this appender.
  43.642 +            </summary>
  43.643 +            <remarks>
  43.644 +            <para>
  43.645 +            There is no level threshold filtering by default.
  43.646 +            </para>
  43.647 +            <para>
  43.648 +            See <see cref="P:log4net.Appender.AppenderSkeleton.Threshold"/> for more information.
  43.649 +            </para>
  43.650 +            </remarks>
  43.651 +        </member>
  43.652 +        <member name="F:log4net.Appender.AppenderSkeleton.m_errorHandler">
  43.653 +            <summary>
  43.654 +            It is assumed and enforced that errorHandler is never null.
  43.655 +            </summary>
  43.656 +            <remarks>
  43.657 +            <para>
  43.658 +            It is assumed and enforced that errorHandler is never null.
  43.659 +            </para>
  43.660 +            <para>
  43.661 +            See <see cref="P:log4net.Appender.AppenderSkeleton.ErrorHandler"/> for more information.
  43.662 +            </para>
  43.663 +            </remarks>
  43.664 +        </member>
  43.665 +        <member name="F:log4net.Appender.AppenderSkeleton.m_headFilter">
  43.666 +            <summary>
  43.667 +            The first filter in the filter chain.
  43.668 +            </summary>
  43.669 +            <remarks>
  43.670 +            <para>
  43.671 +            Set to <c>null</c> initially.
  43.672 +            </para>
  43.673 +            <para>
  43.674 +            See <see cref="T:log4net.Filter.IFilter"/> for more information.
  43.675 +            </para>
  43.676 +            </remarks>
  43.677 +        </member>
  43.678 +        <member name="F:log4net.Appender.AppenderSkeleton.m_tailFilter">
  43.679 +            <summary>
  43.680 +            The last filter in the filter chain.
  43.681 +            </summary>
  43.682 +            <remarks>
  43.683 +            See <see cref="T:log4net.Filter.IFilter"/> for more information.
  43.684 +            </remarks>
  43.685 +        </member>
  43.686 +        <member name="F:log4net.Appender.AppenderSkeleton.m_closed">
  43.687 +            <summary>
  43.688 +            Flag indicating if this appender is closed.
  43.689 +            </summary>
  43.690 +            <remarks>
  43.691 +            See <see cref="M:log4net.Appender.AppenderSkeleton.Close"/> for more information.
  43.692 +            </remarks>
  43.693 +        </member>
  43.694 +        <member name="F:log4net.Appender.AppenderSkeleton.m_recursiveGuard">
  43.695 +            <summary>
  43.696 +            The guard prevents an appender from repeatedly calling its own DoAppend method
  43.697 +            </summary>
  43.698 +        </member>
  43.699 +        <member name="F:log4net.Appender.AppenderSkeleton.m_renderWriter">
  43.700 +            <summary>
  43.701 +            StringWriter used to render events
  43.702 +            </summary>
  43.703 +        </member>
  43.704 +        <member name="P:log4net.Appender.AppenderSkeleton.Threshold">
  43.705 +            <summary>
  43.706 +            Gets or sets the threshold <see cref="T:log4net.Core.Level"/> of this appender.
  43.707 +            </summary>
  43.708 +            <value>
  43.709 +            The threshold <see cref="T:log4net.Core.Level"/> of the appender. 
  43.710 +            </value>
  43.711 +            <remarks>
  43.712 +            <para>
  43.713 +            All log events with lower level than the threshold level are ignored 
  43.714 +            by the appender.
  43.715 +            </para>
  43.716 +            <para>
  43.717 +            In configuration files this option is specified by setting the
  43.718 +            value of the <see cref="P:log4net.Appender.AppenderSkeleton.Threshold"/> option to a level
  43.719 +            string, such as "DEBUG", "INFO" and so on.
  43.720 +            </para>
  43.721 +            </remarks>
  43.722 +        </member>
  43.723 +        <member name="P:log4net.Appender.AppenderSkeleton.ErrorHandler">
  43.724 +            <summary>
  43.725 +            Gets or sets the <see cref="T:log4net.Core.IErrorHandler"/> for this appender.
  43.726 +            </summary>
  43.727 +            <value>The <see cref="T:log4net.Core.IErrorHandler"/> of the appender</value>
  43.728 +            <remarks>
  43.729 +            <para>
  43.730 +            The <see cref="T:log4net.Appender.AppenderSkeleton"/> provides a default 
  43.731 +            implementation for the <see cref="P:log4net.Appender.AppenderSkeleton.ErrorHandler"/> property. 
  43.732 +            </para>
  43.733 +            </remarks>
  43.734 +        </member>
  43.735 +        <member name="P:log4net.Appender.AppenderSkeleton.FilterHead">
  43.736 +            <summary>
  43.737 +            The filter chain.
  43.738 +            </summary>
  43.739 +            <value>The head of the filter chain filter chain.</value>
  43.740 +            <remarks>
  43.741 +            <para>
  43.742 +            Returns the head Filter. The Filters are organized in a linked list
  43.743 +            and so all Filters on this Appender are available through the result.
  43.744 +            </para>
  43.745 +            </remarks>
  43.746 +        </member>
  43.747 +        <member name="P:log4net.Appender.AppenderSkeleton.Layout">
  43.748 +            <summary>
  43.749 +            Gets or sets the <see cref="T:log4net.Layout.ILayout"/> for this appender.
  43.750 +            </summary>
  43.751 +            <value>The layout of the appender.</value>
  43.752 +            <remarks>
  43.753 +            <para>
  43.754 +            See <see cref="P:log4net.Appender.AppenderSkeleton.RequiresLayout"/> for more information.
  43.755 +            </para>
  43.756 +            </remarks>
  43.757 +            <seealso cref="P:log4net.Appender.AppenderSkeleton.RequiresLayout"/>
  43.758 +        </member>
  43.759 +        <member name="P:log4net.Appender.AppenderSkeleton.Name">
  43.760 +            <summary>
  43.761 +            Gets or sets the name of this appender.
  43.762 +            </summary>
  43.763 +            <value>The name of the appender.</value>
  43.764 +            <remarks>
  43.765 +            <para>
  43.766 +            The name uniquely identifies the appender.
  43.767 +            </para>
  43.768 +            </remarks>
  43.769 +        </member>
  43.770 +        <member name="P:log4net.Appender.AppenderSkeleton.RequiresLayout">
  43.771 +            <summary>
  43.772 +            Tests if this appender requires a <see cref="P:log4net.Appender.AppenderSkeleton.Layout"/> to be set.
  43.773 +            </summary>
  43.774 +            <remarks>
  43.775 +            <para>
  43.776 +            In the rather exceptional case, where the appender 
  43.777 +            implementation admits a layout but can also work without it, 
  43.778 +            then the appender should return <c>true</c>.
  43.779 +            </para>
  43.780 +            <para>
  43.781 +            This default implementation always returns <c>true</c>.
  43.782 +            </para>
  43.783 +            </remarks>
  43.784 +            <returns>
  43.785 +            <c>true</c> if the appender requires a layout object, otherwise <c>false</c>.
  43.786 +            </returns>
  43.787 +        </member>
  43.788 +        <member name="F:log4net.Appender.BufferingAppenderSkeleton.DEFAULT_BUFFER_SIZE">
  43.789 +            <summary>
  43.790 +            The default buffer size.
  43.791 +            </summary>
  43.792 +            <remarks>
  43.793 +            The default size of the cyclic buffer used to store events.
  43.794 +            This is set to 512 by default.
  43.795 +            </remarks>
  43.796 +        </member>
  43.797 +        <member name="M:log4net.Appender.BufferingAppenderSkeleton.#ctor">
  43.798 +            <summary>
  43.799 +            Initializes a new instance of the <see cref="T:log4net.Appender.BufferingAppenderSkeleton"/> class.
  43.800 +            </summary>
  43.801 +            <remarks>
  43.802 +            <para>
  43.803 +            Protected default constructor to allow subclassing.
  43.804 +            </para>
  43.805 +            </remarks>
  43.806 +        </member>
  43.807 +        <member name="M:log4net.Appender.BufferingAppenderSkeleton.#ctor(System.Boolean)">
  43.808 +            <summary>
  43.809 +            Initializes a new instance of the <see cref="T:log4net.Appender.BufferingAppenderSkeleton"/> class.
  43.810 +            </summary>
  43.811 +            <param name="eventMustBeFixed">the events passed through this appender must be
  43.812 +            fixed by the time that they arrive in the derived class' <c>SendBuffer</c> method.</param>
  43.813 +            <remarks>
  43.814 +            <para>
  43.815 +            Protected constructor to allow subclassing.
  43.816 +            </para>
  43.817 +            <para>
  43.818 +            The <paramref name="eventMustBeFixed"/> should be set if the subclass
  43.819 +            expects the events delivered to be fixed even if the 
  43.820 +            <see cref="P:log4net.Appender.BufferingAppenderSkeleton.BufferSize"/> is set to zero, i.e. when no buffering occurs.
  43.821 +            </para>
  43.822 +            </remarks>
  43.823 +        </member>
  43.824 +        <member name="M:log4net.Appender.BufferingAppenderSkeleton.Flush">
  43.825 +            <summary>
  43.826 +            Flush the currently buffered events
  43.827 +            </summary>
  43.828 +            <remarks>
  43.829 +            <para>
  43.830 +            Flushes any events that have been buffered.
  43.831 +            </para>
  43.832 +            <para>
  43.833 +            If the appender is buffering in <see cref="P:log4net.Appender.BufferingAppenderSkeleton.Lossy"/> mode then the contents
  43.834 +            of the buffer will NOT be flushed to the appender.
  43.835 +            </para>
  43.836 +            </remarks>
  43.837 +        </member>
  43.838 +        <member name="M:log4net.Appender.BufferingAppenderSkeleton.Flush(System.Boolean)">
  43.839 +            <summary>
  43.840 +            Flush the currently buffered events
  43.841 +            </summary>
  43.842 +            <param name="flushLossyBuffer">set to <c>true</c> to flush the buffer of lossy events</param>
  43.843 +            <remarks>
  43.844 +            <para>
  43.845 +            Flushes events that have been buffered. If <paramref name="flushLossyBuffer"/> is
  43.846 +            <c>false</c> then events will only be flushed if this buffer is non-lossy mode.
  43.847 +            </para>
  43.848 +            <para>
  43.849 +            If the appender is buffering in <see cref="P:log4net.Appender.BufferingAppenderSkeleton.Lossy"/> mode then the contents
  43.850 +            of the buffer will only be flushed if <paramref name="flushLossyBuffer"/> is <c>true</c>.
  43.851 +            In this case the contents of the buffer will be tested against the 
  43.852 +            <see cref="P:log4net.Appender.BufferingAppenderSkeleton.LossyEvaluator"/> and if triggering will be output. All other buffered
  43.853 +            events will be discarded.
  43.854 +            </para>
  43.855 +            <para>
  43.856 +            If <paramref name="flushLossyBuffer"/> is <c>true</c> then the buffer will always
  43.857 +            be emptied by calling this method.
  43.858 +            </para>
  43.859 +            </remarks>
  43.860 +        </member>
  43.861 +        <member name="M:log4net.Appender.BufferingAppenderSkeleton.ActivateOptions">
  43.862 +            <summary>
  43.863 +            Initialize the appender based on the options set
  43.864 +            </summary>
  43.865 +            <remarks>
  43.866 +            <para>
  43.867 +            This is part of the <see cref="T:log4net.Core.IOptionHandler"/> delayed object
  43.868 +            activation scheme. The <see cref="M:log4net.Appender.BufferingAppenderSkeleton.ActivateOptions"/> method must 
  43.869 +            be called on this object after the configuration properties have
  43.870 +            been set. Until <see cref="M:log4net.Appender.Buff