private void btnSave_Click(object sender, System.EventArgs e)
		{
			if (SaveButtonEnabled())
			{
				if (dlgSave.ShowDialog(this) == DialogResult.OK)
				{
					ShipTemplate	template	= new ShipTemplate(shipyard.ShipSpec, txtName.Text);

					if (imgIndex > Consts.MaxShip)
					{
						template.ImageIndex	= (int)ShipType.Custom;
						template.Images			= customImages;
					}
					else
						template.ImageIndex	= imgIndex;

					Functions.SaveFile(dlgSave.FileName, template.Serialize(), this);

					LoadTemplateList();
				}
			}
		}
		private void LoadTemplateList()
		{
			ShipTemplate	currentShip	= new ShipTemplate(game.Commander.Ship, Strings.ShipNameCurrentShip);
			selTemplate.Items.Add(currentShip);

			selTemplate.Items.Add(Consts.ShipTemplateSeparator);

			// Add the minimal sizes templates.
			foreach (Size size in sizes)
				selTemplate.Items.Add(new ShipTemplate(size, Strings.Sizes[(int)size] + Strings.ShipNameTemplateSuffixMinimum));

			selTemplate.Items.Add(Consts.ShipTemplateSeparator);

			// Add the purchasable ship spec templates.
			foreach (ShipSpec spec in Consts.ShipSpecs)
			{
				if (sizes.Contains(spec.Size) && (int)spec.Type <= Consts.MaxShip)
					selTemplate.Items.Add(new ShipTemplate(spec, spec.Name + Strings.ShipNameTemplateSuffixDefault));
			}

			selTemplate.Items.Add(Consts.ShipTemplateSeparator);

			// Add the user-created templates.
			ArrayList	userTemplates	= new ArrayList();
			foreach (string fileName in Directory.GetFiles(Consts.CustomTemplatesDirectory, "*.sst"))
			{
				ShipTemplate	template	= new ShipTemplate((Hashtable)Functions.LoadFile(fileName, true, this));
				if (sizes.Contains(template.Size))
					userTemplates.Add(template);
			}
			userTemplates.Sort();
			selTemplate.Items.AddRange((ShipTemplate[])userTemplates.ToArray(typeof(ShipTemplate)));

			selTemplate.SelectedIndex	= 0;
		}