Click here to Skip to main content
15,879,535 members
Articles / Programming Languages / C#

Mars Mission (4) : Astronauts

Rate me:
Please Sign up or sign in to vote.
4.96/5 (26 votes)
5 Jul 2011CPOL55 min read 43.3K   6.5K   29  
strategy/action game defending the solar system : incorporating astronauts, resources, and actions inside and outside the ships
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Xml;
using System.Windows.Forms;
using Mars_Mission;
using CK_Controls;
/// todo 
///		- edit resource CDP
///			- get rid of cdp array and use sprite CDP_ points instead -> edit sprite here
namespace Mars_Mission
{
	public partial class formXmlResourcesActionsEditor : Form
	{
		classResource cRes = new classResource();
		static classAction cAction = new classAction();
		public static Sprite.classSprite cSpriteResource;

		public static classAstronaut cAstronaut;
		public static panelActionsResourceListEditor[] pnlActionsResources = new panelActionsResourceListEditor[(int)enuActionResourceType._numActionResourceType];
		static panelActionRequirements pnlActionRequirements = new panelActionRequirements();

		// resource editing variables
		Color clrResourceSpriteBackground = Color.White;
		Point ptResourceSpriteCenterOnScreen = new Point();
		int intCDPSelected = 0;
		classMath.classDoubleCartesian dptMouse = null;
		classMath.classDoubleCartesian dptPos = new classMath.classDoubleCartesian();
		Point[] ptResourceCDP = new Point[0];
		Point ptMouse = new Point();
		bool[] bolMouseButtons = new bool[3];
		Bitmap bmpResourceCDP = null;

		ContextMenu cMnu = new ContextMenu();
		MenuItem mnuCDP;
		MenuItem mnuCDP_Add;
		MenuItem mnuCDP_Delete;
		
		public formXmlResourcesActionsEditor()
		{
			InitializeComponent();
			cAstronaut = new classAstronaut();
			pnlResPicker.ValueChanged += new EventHandler<EventArgs>(pnlResPicker_ValueChanged);
			pnlActionPicker.ValueChanged += new EventHandler<EventArgs>(pnlActionPicker_ValueChanged);
			tab.SizeChanged += new EventHandler(tab_SizeChanged);

			// resources tab
			btnResource_Save.Click += new EventHandler(btnResource_Save_Click);
			btnResource_CreateNewResource.Click += new EventHandler(btnResource_CreateNewResource_Click);
			btnResource_DeleteResource.Click += new EventHandler(btnResource_DeleteResource_Click);
			txtResource_Name.KeyDown += new KeyEventHandler(txtResource_name_Keydown);
			txtResource_Mass.KeyDown += new KeyEventHandler(txtResource_Mass_KeyDown);
			txtResourceContainer_MaximumMass.KeyDown += new KeyEventHandler(txtResourceContainer_MaximumMass_KeyDown);
			txtResourceDetails_RealWorldHeight.KeyDown += new KeyEventHandler(txtResourceDetails_RealWorldHeight_KeyDown);
			txtResource_AlternateName.KeyDown += new KeyEventHandler(txtResource_AlternateName_KeyDown);
			tabResourceDetails.SizeChanged += new EventHandler(tabResourceDetails_SizeChanged);
			tabResourceDetails.SelectedIndexChanged += new EventHandler(tabResourceDetails_SelectedIndexChanged);
			cmbResource_Type.Items.Clear();
			cmbResource_ContainerType.Items.Clear();
			for (enuResource_Type eTypeCounter = (enuResource_Type)0; eTypeCounter < enuResource_Type._numTypeResource; eTypeCounter++)
			{
				cmbResource_Type.Items.Add(eTypeCounter.ToString());
			}
			cmbResource_State.Items.Clear();
			for (enuResource_State eStateCounter = (enuResource_State)0; eStateCounter < enuResource_State._numResource_State; eStateCounter++)
			{
				cmbResource_State.Items.Add(eStateCounter.ToString());
				cmbResource_ContainerType.Items.Add(eStateCounter.ToString());
			}
			lbtnResource_AlwaysVertical.AfterClick += new EventHandler<EventArgs>(lbtnResource_AfterClick);
			lbtnResource_CanBeConcealed.AfterClick += new EventHandler<EventArgs>(lbtnResource_AfterClick);
			lbtnResource_CanBeMoved.AfterClick += new EventHandler<EventArgs>(lbtnResource_AfterClick);
			lbtnResourceDetails_ViewCDP.AfterClick += new EventHandler<EventArgs>(lbtnResourceDetails_ViewCDP_AfterClick);
			lbtnResourceDetails_ImageAndSprite_SetBackgroundColor.AfterClick += new EventHandler<EventArgs>(lbtnResourceDetails_ImageAndSprite_SetBackgroundColor_AfterClick);
			lbtnResourceDetails_ImageAndSprite_ShowAstronaut.AfterClick += new EventHandler<EventArgs>(lbtnResourceDetails_ImageAndSprite_ShowAstronaut_AfterClick);

			mnuCDP = new MenuItem("CDP");
			mnuCDP_Add = new MenuItem("Add", ResourceCDP_Add);
			mnuCDP.MenuItems.Add(mnuCDP_Add);
			mnuCDP_Delete = new MenuItem("Delete", ResourceCDP_Delete);
			mnuCDP.MenuItems.Add(mnuCDP_Delete);
			cMnu.MenuItems.Add(mnuCDP);
			
			picResourceDetails_ImageAndSprite.MouseMove += new MouseEventHandler(picResourceDetails_ImageAndSprite_MouseMove);
			picResourceDetails_ImageAndSprite.MouseDown += new MouseEventHandler(picResourceDetails_ImageAndSprite_MouseDown);
			picResourceDetails_ImageAndSprite.MouseUp += new MouseEventHandler(picResourceDetails_ImageAndSprite_MouseUp);
			picResourceDetails_ImageAndSprite.ContextMenu = cMnu;

			cmbResource_State.SelectedIndexChanged += new EventHandler(cmbResource_State_SelectedIndexChanged);
			cmbResource_Type.SelectedIndexChanged += new EventHandler(cmbResource_Type_SelectedIndexChanged);
			cmbResource_ContainerType.SelectedIndexChanged += new EventHandler(cmbResource_ContainerType_SelectedIndexChanged);

			txtResource_Name.TabIndex = 0;
			txtResource_AlternateName.TabIndex = 1;
			txtResource_Mass.TabIndex = 2;
			btnResource_CreateNewResource.TabIndex = 3;

			// Actions tab
			btnAction_Save.Click += new EventHandler(btnAction_Save_Click);
			btnAction_CreateNew.Click += new EventHandler(btnAction_CreateNewAction_Click);
			btnAction_DeleteAction.Click += new EventHandler(btnAction_DeleteAction_Click);
			txtAction_Name.EnterValue += new EventHandler<EventArgs>(txtAction_Name_EnterValue);
			txtAction_Title.EnterValue += new EventHandler<EventArgs>(txtAction_Title_EnterValue);

			txtAction_Name.TabIndex = 0;
			btnAction_CreateNew.TabIndex = 4;

			for (enuActionResourceType eActionResourceTypeCounter = (enuActionResourceType)0; eActionResourceTypeCounter < enuActionResourceType._numActionResourceType; eActionResourceTypeCounter++)
			{
				pnlActionsResources[(int)eActionResourceTypeCounter] = new panelActionsResourceListEditor(eActionResourceTypeCounter);
				pnlActionsResources[(int)eActionResourceTypeCounter].ValueChanged += new EventHandler<EventArgs>(formXmlResourcesActionsEditor_ValueChanged);
			}

			///													ActionsPage tabs
			/// actions input resources
			tabActionsPage_InputResource.Controls.Add(pnlActionsResources[(int)enuActionResourceType.Input]);
			pnlActionsResources[(int)enuActionResourceType.Input].Dock = DockStyle.Fill;

			/// actions interrupt resources
			tabActionsPage_InterruptResources.Controls.Add(pnlActionsResources[(int)enuActionResourceType.Interrupt]);
			pnlActionsResources[(int)enuActionResourceType.Interrupt].Dock = DockStyle.Fill;

			/// actions output resources
			tabActionsPage_OutputResources.Controls.Add(pnlActionsResources[(int)enuActionResourceType.Output]);
			pnlActionsResources[(int)enuActionResourceType.Output].Dock = DockStyle.Fill;

			/// actions requirements
			tabActionsPage_Select.Controls.Add(pnlActionRequirements);
			pnlActionRequirements.ValueChanged += new EventHandler<EventArgs>(pnlActionRequirements_ValueChanged);
			
			/// load first res record
			pnlResPicker.bolResource_IgnoreChangesToSelectedItemlist = true;
			pnlResPicker.vsbResource_RecordNumber.Value  = 112;
			pnlResPicker.bolResource_IgnoreChangesToSelectedItemlist = false;

			/// load first action record
			pnlActionPicker.bolAction_IgnoreChangesToSelectedItemlist = true;
			pnlActionPicker.loadXml();
			Action_ShowRecord(0);
			pnlActionPicker.bolAction_IgnoreChangesToSelectedItemlist = false;

			tab.SelectedIndexChanged += new EventHandler(tab_SelectedIndexChanged);

			VisibleChanged += new EventHandler(formXmlResourcesEditor_VisibleChanged);
		}

		void txtAction_Title_EnterValue(object sender, EventArgs e)
		{
			txtAction_Title.Text  =cleanString( txtAction_Title.Text);
			SaveAction();
			Action_ShowRecord(); 
		}

		string cleanString(string str)
		{
			return str.Replace(" ", "_").Replace("!", "_").Replace("#", "_").Replace("$", "_");
		}

		void txtAction_Name_EnterValue(object sender, EventArgs e)
		{
			string strOldName = cAction.Name;
			string strNewName = cleanString(txtAction_Name.Text);
			txtAction_Name.Text = strNewName;

			for (int intActionCounter = 0; intActionCounter < classActionXML.xActionList.Count; intActionCounter++)
			{
				classAction cThisAction = classActionXML.getAction(intActionCounter);
				if (cThisAction.cRequirements.strLoopActionName == strOldName)
				{
					cThisAction.cRequirements.strLoopActionName = strNewName;
					classActionXML.setAction(ref cThisAction, intActionCounter);
				}
			}

			pnlActionRequirements.lbtaLoopAction.ActionName = strNewName;
			SaveAction();

			Action_ShowRecord(); 
			//cAction.Name = txtAction_Name.Text;
		}

		void picResourceDetails_ImageAndSprite_MouseUp(object sender, MouseEventArgs e)
		{
			switch (e.Button)
			{
				case System.Windows.Forms.MouseButtons.Left:
					bolMouseButtons[(int)enuMouseButtons.Left] = false;
					if (intCDPSelected >= 0)
						SaveResource();
					break;

				case System.Windows.Forms.MouseButtons.Middle:
					bolMouseButtons[(int)enuMouseButtons.Middle] = false;
					break;

				case System.Windows.Forms.MouseButtons.Right:
					bolMouseButtons[(int)enuMouseButtons.Right] = false;
					break;
			}
		}

		void picResourceDetails_ImageAndSprite_MouseDown(object sender, MouseEventArgs e)
		{
			switch (e.Button)
			{
				case System.Windows.Forms.MouseButtons.Left:
					bolMouseButtons[(int)enuMouseButtons.Left] = true;
					break;

				case System.Windows.Forms.MouseButtons.Middle:
					bolMouseButtons[(int)enuMouseButtons.Middle] = true;
					break;

				case System.Windows.Forms.MouseButtons.Right:
					bolMouseButtons[(int)enuMouseButtons.Right] = true;
					break;
			}	
		}

		void ResourceCDP_Delete(object sender, EventArgs e)
		{
			//if (cRes.cCDP.cRadPoly.Length > 3)
			//    Array.Resize<classMath.classRadialCoor>(ref cRes.cCDP.cRadPoly, cRes.cCDP.cRadPoly.Length - 1);
			//showResourceCDP();
		}

		void ResourceCDP_Add(object sender, EventArgs e)
		{
			//Array.Resize<classMath.classRadialCoor>(ref cRes.cCDP.cRadPoly, cRes.cCDP.cRadPoly.Length + 1);
			//cRes.cCDP.cRadPoly[cRes.cCDP.cRadPoly.Length - 1] = new classMath.classRadialCoor();
			//showResourceCDP();
		}

		void picResourceDetails_ImageAndSprite_MouseMove(object sender, MouseEventArgs e)
		{
			//if (lbtnResourceDetails_ViewCDP.Flag)
			//{
			//    ptMouse = new Point(e.X, e.Y);
			//    dptMouse = classLandscape.getPointLandscape(ptMouse, ptResourceSpriteCenterOnScreen, dptPos);
			//    bool bolRefresh = false;
			//    int intSelectStart = intCDPSelected;

			//    if (bolMouseButtons[(int)enuMouseButtons.Left])
			//    { // may be dragging a CDP
			//        if (intCDPSelected >= 0)
			//        {
			//            //  move CDP
			//            classMath.classRadialCoor  cRadRememberBeforeReorder 
			//                = cRes.cCDP.cRadPoly[intCDPSelected] 
			//                = classMath.convertCarToRad(dptPos, dptMouse);
			//            cRes.cCDP.OrderPolygon();

			//            for (int intRadCounter = 0; intRadCounter < cRes.cCDP.cRadPoly.Length; intRadCounter++)
			//                if (cRadRememberBeforeReorder == cRes.cCDP.cRadPoly[intRadCounter])
			//                    intCDPSelected = intRadCounter;

			//            bolRefresh = true;
			//        }
			//    }
			//    else
			//    {
			//        // find CDP
			//        int intRange = 5;
			//        intCDPSelected = -1;
			//        for (int intPointCounter = 0; intPointCounter < ptResourceCDP.Length; intPointCounter++)
			//        {
			//            if (Math.Abs(ptMouse.X - ptResourceCDP[intPointCounter].X) < intRange && Math.Abs(ptMouse.Y - ptResourceCDP[intPointCounter].Y) < intRange)
			//            {
			//                intCDPSelected = intPointCounter;
			//                bolRefresh = true;
			//                break;
			//            }
			//        }
			//    }
			//    if (bolRefresh || intCDPSelected != intSelectStart)
			//        showResourceCDP();
			//}
		}
		
		void lbtnResourceDetails_ViewCDP_AfterClick(object sender, EventArgs e)
		{
			//if (lbtnResourceDetails_ViewCDP.Flag)
			//    showResourceCDP();
		}

		void showResourceCDP()
		{
			//Bitmap bmpPic = (Bitmap)bmpResourceCDP.Clone();
			//classMath.classDoubleCartesian[] dpt = new classMath.classDoubleCartesian[cRes.cCDP.cRadPoly.Length];
			//ptResourceCDP = new Point[cRes.cCDP.cRadPoly.Length];
			//// convert radial coordinates to cartesian coordinates around (0,0)
			//for (int intPointCounter = 0; intPointCounter < cRes.cCDP.cRadPoly.Length; intPointCounter++)
			//{
			//    dpt[intPointCounter] = classMath.convertRadToDCar(cRes.cCDP.cRadPoly[intPointCounter]);
			//    ptResourceCDP[intPointCounter] = classLandscape.getPointScreen(dpt[intPointCounter], dptPos, ptResourceSpriteCenterOnScreen);
			//}
			//int intPointRadius = 2;
			//using (Graphics g = Graphics.FromImage(bmpPic))
			//{
			//    g.DrawPolygon(classPensAndBrushes.pRed1, ptResourceCDP);
			//    for (int intPointCounter = 0; intPointCounter < ptResourceCDP.Length; intPointCounter++)
			//    {
			//        Pen p = intPointCounter == intCDPSelected ? classPensAndBrushes.pBlack2 : classPensAndBrushes.pGray2;
			//        g.DrawEllipse(p, new Rectangle(ptResourceCDP[intPointCounter].X - intPointRadius, ptResourceCDP[intPointCounter].Y - intPointRadius, 2 * intPointRadius, 2 * intPointRadius));
			//    }
			//    g.DrawEllipse(classPensAndBrushes.pBlue2, ptResourceSpriteCenterOnScreen.X - intPointRadius, ptResourceSpriteCenterOnScreen.Y - intPointRadius, 2 *intPointRadius, 2*intPointRadius);
			//}
			////bmpPic.Save("c:\\temp\\marsmission\\cdp.bmp");
			//picResourceDetails_ImageAndSprite.Image = bmpPic;
		}

		void tabResourceDetails_SelectedIndexChanged(object sender, EventArgs e)
		{
			tabResourceDetails_SizeChanged(sender, e);
		}

		void cmbResource_ContainerType_SelectedIndexChanged(object sender, EventArgs e)
		{
			SaveResource();
		}
		
		void tabResourceDetails_SizeChanged(object sender, EventArgs e)
		{
			
			lblResource_Mass.Top
				= lblResource_Type.Top
				= lblResource_State.Top
				= 5;

			txtResource_Mass.Top
				= cmbResource_Type.Top
				= cmbResource_State.Top
				= lblResource_Mass.Top + lblResource_Mass.Height;

			lblResource_Mass.Left
				= txtResource_Mass.Left
				= 5;

			lblResource_Type.Left
				= cmbResource_Type.Left
				= txtResource_Mass.Left + txtResource_Mass.Width + 5;

			lblResource_State.Left
				= cmbResource_State.Left
				= cmbResource_Type.Left + cmbResource_Type.Width + 5;

			lbtnResource_AlwaysVertical.Left
				= lbtnResource_CanBeConcealed.Left
				= lbtnResource_CanBeMoved.Left
				= cmbResource_State.Left + cmbResource_State.Width + 5;

			lbtnResource_AlwaysVertical.Top = 5;
			lbtnResource_CanBeConcealed.Top = lbtnResource_AlwaysVertical.Bottom;
			lbtnResource_CanBeMoved.Top = lbtnResource_CanBeConcealed.Bottom;

			LabelButton[] lbtnArray = new LabelButton[3];
			lbtnArray[0] = lbtnResource_AlwaysVertical;
			lbtnArray[1] = lbtnResource_CanBeConcealed;
			lbtnArray[2] = lbtnResource_CanBeMoved;

			int intMinWidth = 0;
			for (int intLbtnCounter = 0; intLbtnCounter < lbtnArray.Length; intLbtnCounter++)
			{
				lbtnArray[intLbtnCounter].AutoSize = true;
				if (lbtnArray[intLbtnCounter].Width > intMinWidth)
					intMinWidth = lbtnArray[intLbtnCounter].Width;
				lbtnArray[intLbtnCounter].AutoSize = false;
			}
			for (int intLbtnCounter = 0; intLbtnCounter < lbtnArray.Length; intLbtnCounter++)
				lbtnArray[intLbtnCounter].Width = intMinWidth;

			pnlResPicker.Top = lbtnArray[lbtnArray.Length - 1].Bottom;
			pnlResPicker.Width = tabResourceDetails.Width - 10;
			pnlResPicker.Left = 0;
			pnlResPicker.Height = tabResourceDetails.Height  - pnlResPicker.Top - 25;

			/// sprite & image
			lbtnResourceDetails_ViewCDP.Top
				= lblResourceDetail_RealWorldHeight.Top
				= txtResourceDetails_RealWorldHeight.Top
				= lbtnResourceDetails_ImageAndSprite_SetBackgroundColor.Top 
				= lbtnResourceDetails_ImageAndSprite_ShowAstronaut.Top 
				= tabResourceDetails_ImageAndSprite.Height - txtResourceDetails_RealWorldHeight.Height - 5;

			txtResourceDetails_RealWorldHeight.Left = tabResourceDetails_ImageAndSprite.Width - txtResourceDetails_RealWorldHeight.Width - 5;
			lblResourceDetail_RealWorldHeight.Left = txtResourceDetails_RealWorldHeight.Left - lblResourceDetail_RealWorldHeight.Width - 5;
			lbtnResourceDetails_ViewCDP.Left = lblResourceDetail_RealWorldHeight.Left - lbtnResourceDetails_ViewCDP.Width - 5;
			lbtnResourceDetails_ImageAndSprite_ShowAstronaut.Left = lbtnResourceDetails_ViewCDP.Left - lbtnResourceDetails_ImageAndSprite_ShowAstronaut.Width - 5;
			lbtnResourceDetails_ImageAndSprite_SetBackgroundColor.Left = lbtnResourceDetails_ImageAndSprite_ShowAstronaut.Left - lbtnResourceDetails_ImageAndSprite_SetBackgroundColor .Width - 5;

			tabResourceDetails_ImageAndSprite.BackColor = Color.DarkGray;
			picResourceDetails_ImageAndSprite.Top = 5;
			picResourceDetails_ImageAndSprite.Left = 3;
			picResourceDetails_ImageAndSprite.Width = tabResourceDetails_ImageAndSprite.Width - picResourceDetails_ImageAndSprite.Left - 5;
			picResourceDetails_ImageAndSprite.Height = lbtnResourceDetails_ViewCDP.Top - picResourceDetails_ImageAndSprite.Top - 5;

			showResourceSprite();
		}

		void lbtnResourceDetails_ImageAndSprite_SetBackgroundColor_AfterClick(object sender, EventArgs e)
		{
			ColorDialog cd = new ColorDialog();
			if (cd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
			{
				clrResourceSpriteBackground = cd.Color;
				showResourceSprite();
			}
		}
		void lbtnResourceDetails_ImageAndSprite_ShowAstronaut_AfterClick(object sender, EventArgs e) { showResourceSprite(); }
		
		void showResourceSprite()
		{
			try
			{
				if (cSpriteResource == null)
				{
					picResourceDetails_ImageAndSprite.Image = (Bitmap)Bitmap.FromFile(classResource.strWorkingDirectory + "image not found.bmp");
				}
				else
				{
					Bitmap bmpDefaultSize = null;
					Sprite.classBmpAndPtTLInfo cBmpDefaultSize = cSpriteResource.getImageOnBitmap(0, 0, 0, 1.0, Sprite.enuMirror.none, false);
					bmpDefaultSize = cBmpDefaultSize.bmp;
					Sprite.classBmpAndPtTLInfo cBmpAstronautDefaultSize = classAstronaut.cSprAstronaut_Complete.getImageOnBitmap(0,0,0, 1.0, Sprite.enuMirror.none, false);////cAstronaut.cSprAstronaut_Body.getImageOnBitmap(0, 0, 0, 1.0, Sprite.enuMirror.none, false);
					Bitmap bmpAstronautDefaultSize = cBmpAstronautDefaultSize.bmp;

					double dblDrawSizeFactor_Resource = formMarsMission.getDrawSizeFactor(cRes.dblRealWorldHeight, bmpDefaultSize.Height);
					double dblAspectRatioYOverX_PicBox = (double)picResourceDetails_ImageAndSprite.Height / (double)picResourceDetails_ImageAndSprite.Width;
					double dblAspectRatioYOverX_Resource = (double)bmpDefaultSize.Height / (double)bmpDefaultSize.Width;
					double dblAspectRatioYOverX_Astronaut = (double)bmpAstronautDefaultSize.Height / (double)bmpAstronautDefaultSize.Width;

					double dblZoom_AstronautLimit = 1.0;
					double dblZoom_ResourceLimit = 1.0;

					if (dblAspectRatioYOverX_Resource > dblAspectRatioYOverX_PicBox)
					{ // limit is height of resource image
						dblZoom_ResourceLimit = (double)bmpDefaultSize.Height * dblDrawSizeFactor_Resource / (double)picResourceDetails_ImageAndSprite.Height;
					}
					else
					{ // limit is width of resource image
						dblZoom_ResourceLimit = (double)bmpDefaultSize.Width * dblDrawSizeFactor_Resource / (double)picResourceDetails_ImageAndSprite.Width;
					}

					if (dblAspectRatioYOverX_Astronaut > dblAspectRatioYOverX_PicBox)
					{
						dblZoom_AstronautLimit = (double)bmpAstronautDefaultSize.Height * cAstronaut.dblDrawSizeFactor / (double)picResourceDetails_ImageAndSprite.Height;
					}
					else
					{
						dblZoom_AstronautLimit = (double)bmpAstronautDefaultSize.Width * cAstronaut.dblDrawSizeFactor / (double)picResourceDetails_ImageAndSprite.Width;
					}

					if (lbtnResourceDetails_ImageAndSprite_ShowAstronaut.Flag)
					{
						classGameState.setZoom( dblZoom_AstronautLimit > dblZoom_ResourceLimit ? dblZoom_AstronautLimit : dblZoom_ResourceLimit);
						double dblDrawSize_Resource = dblDrawSizeFactor_Resource / classGameState.dblZoom;
						Bitmap bmpResource = new Bitmap(bmpDefaultSize, new System.Drawing.Size((int)((double)bmpDefaultSize.Width * dblDrawSize_Resource), (int)((double)bmpDefaultSize.Height * dblDrawSize_Resource)));
						Point ptDrawResource = new Point((picResourceDetails_ImageAndSprite.Width - bmpResource.Width) / 2, picResourceDetails_ImageAndSprite.Height - bmpResource.Height);
						ptResourceSpriteCenterOnScreen = new Point(ptDrawResource.X + bmpResource.Width / 2, ptDrawResource.Y + bmpResource.Height / 2);

						double dblDrawSize_Astronaut = cAstronaut.dblDrawSizeFactor / classGameState.dblZoom;
						Bitmap bmpAstronaut = classAstronaut.cSprAstronaut_Complete.getImageOnBitmap(0,0,0, dblDrawSize_Astronaut, Sprite.enuMirror.none,false).bmp;
						Point ptDrawAstronaut = new Point(0, picResourceDetails_ImageAndSprite.Height - bmpAstronaut.Height);

						Bitmap bmpPic = new Bitmap(picResourceDetails_ImageAndSprite.Width, picResourceDetails_ImageAndSprite.Height);
						using (Graphics g = Graphics.FromImage(bmpPic))
						{
							using (SolidBrush br = new SolidBrush(clrResourceSpriteBackground))
							{
								g.FillRectangle(br, new Rectangle(0, 0, picResourceDetails_ImageAndSprite.Width, picResourceDetails_ImageAndSprite.Height));
								g.DrawImage(bmpResource, ptDrawResource);
								g.DrawImage(bmpAstronaut, ptDrawAstronaut);
							}
						}

						picResourceDetails_ImageAndSprite.Image = bmpPic;
						bmpResourceCDP =(Bitmap)bmpPic.Clone();
					}
					else
					{
						classGameState.setZoom ( dblZoom_ResourceLimit);
						double dblDrawSize_Resource = dblDrawSizeFactor_Resource / classGameState.dblZoom;
						Bitmap bmpResource = new Bitmap(bmpDefaultSize, new System.Drawing.Size((int)((double)bmpDefaultSize.Width * dblDrawSize_Resource), (int)((double)bmpDefaultSize.Height * dblDrawSize_Resource)));
						Point ptDrawResource = new Point((picResourceDetails_ImageAndSprite.Width - bmpResource.Width) / 2, picResourceDetails_ImageAndSprite.Height - bmpResource.Height);
						ptResourceSpriteCenterOnScreen = new Point(ptDrawResource.X + bmpResource.Width / 2, ptDrawResource.Y +bmpResource.Height / 2);

						Bitmap bmpPic = new Bitmap(picResourceDetails_ImageAndSprite.Width, picResourceDetails_ImageAndSprite.Height);
						using (Graphics g = Graphics.FromImage(bmpPic))
						{
							using (SolidBrush br = new SolidBrush(clrResourceSpriteBackground))
							{
								g.FillRectangle(br, new Rectangle(0, 0, picResourceDetails_ImageAndSprite.Width, picResourceDetails_ImageAndSprite.Height));
								g.DrawImage(bmpResource, ptDrawResource);
							}
						}

						picResourceDetails_ImageAndSprite.Image = bmpPic;
						bmpResourceCDP = (Bitmap)bmpPic.Clone();
					}
				}
				picResourceDetails_ImageAndSprite.Visible = true;
				if (lbtnResourceDetails_ViewCDP.Flag)
					showResourceCDP();
			}
			catch (Exception e)
			{
			}
		}

		void cmbResource_Type_SelectedIndexChanged(object sender, EventArgs e)
		{
			if ((enuResource_Type)cmbResource_Type.SelectedIndex == enuResource_Type.molecule)
			{
				double dblMass = 0;
				classChemistry.classMoleculeComponent[] cComponents = classChemistry.getMoleculeComponents(txtResource_AlternateName.Text);
				if (cComponents.Length == 1 && cComponents[0].eResource == enuResources._numResources)
					return;
				for (int intComponentCounter = 0; intComponentCounter < cComponents.Length; intComponentCounter++)
				{
					classResource cComponentResource = classResourceXML.getResourceByName(cComponents[intComponentCounter].eResource.ToString());
					dblMass += cComponents[intComponentCounter].intNumber * cComponentResource.Mass;
				}
				txtResource_Mass.Text = dblMass.ToString("f3");
			}
			SaveResource();
		}

		void pnlActionRequirements_ValueChanged(object sender, EventArgs e) { SaveAction(); }
		void formXmlResourcesActionsEditor_ValueChanged(object sender, EventArgs e) { SaveAction(); }
		
		void pnlActionPicker_ValueChanged(object sender, EventArgs e)
		{
			Action_ShowRecord(pnlActionPicker.Index);
		}

		void tab_SelectedIndexChanged(object sender, EventArgs e)
		{
			tab_SizeChanged(sender, e);
		}

		void pnlResPicker_ValueChanged(object sender, EventArgs e)
		{
			cmbResource_State.Enabled
				= cmbResource_Type.Enabled
				= txtResource_AlternateName.Enabled
				= txtResource_Mass.Enabled
				= txtResource_Name.Enabled
				= lbtnResource_AlwaysVertical.Enabled
				= lbtnResource_CanBeConcealed.Enabled
				= lbtnResource_CanBeMoved.Enabled
				= pnlResPicker.vsbResource_RecordNumber.Value >= 112;
			Resource_ShowRecord(pnlResPicker.Index);
		}

		#region Resources

		void lbtnResource_AfterClick(object sender, EventArgs e)
		{
			SaveResource();
		}

		void cmbResource_State_SelectedIndexChanged(object sender, EventArgs e)
		{
			SaveResource();
		}
		
		void formXmlResourcesEditor_VisibleChanged(object sender, EventArgs e)
		{
			if (Visible)
			{
				Width = 750; Height = 600;
				Top = (Screen.PrimaryScreen.WorkingArea.Height - Height) / 2;
				Left = (Screen.PrimaryScreen.WorkingArea.Width - Width) / 2;
			}
		}


		void txtResource_AlternateName_KeyDown(object sender, KeyEventArgs e)
		{
			switch (e.KeyCode)
			{
				case Keys.Enter:
					SaveResource();
					break;
			}
		}
		void txtResourceContainer_MaximumMass_KeyDown(object sender, KeyEventArgs e)
		{
			switch (e.KeyCode)
			{
				case Keys.D0:
				case Keys.D1:
				case Keys.D2:
				case Keys.D3:
				case Keys.D4:
				case Keys.D5:
				case Keys.D6:
				case Keys.D7:
				case Keys.D8:
				case Keys.D9:
				case Keys.Left:
				case Keys.Right:
				case Keys.End:
				case Keys.Home:
				case Keys.Back:
				case Keys.Delete:
				case Keys.Decimal:
				case Keys.OemPeriod:
					break;

				case Keys.Enter:
					SaveResource();
					break;

				default:
					e.SuppressKeyPress = true;
					break;
			}
		}

		void txtResourceDetails_RealWorldHeight_KeyDown(object sender, KeyEventArgs e)
		{
			switch (e.KeyCode)
			{
				case Keys.D0:
				case Keys.D1:
				case Keys.D2:
				case Keys.D3:
				case Keys.D4:
				case Keys.D5:
				case Keys.D6:
				case Keys.D7:
				case Keys.D8:
				case Keys.D9:
				case Keys.Left:
				case Keys.Right:
				case Keys.End:
				case Keys.Home:
				case Keys.Back:
				case Keys.Delete:
				case Keys.Decimal:
				case Keys.OemPeriod:
					break;

				case Keys.Enter:
					SaveResource();
					break;

				default:
					e.SuppressKeyPress = true;
					break;
			}
		}

		
		void txtResource_Mass_KeyDown(object sender, KeyEventArgs e)
		{
			if (pnlResPicker.vsbResource_RecordNumber.Value < 112)
			{
				e.SuppressKeyPress = true;
				return;
			}
			switch (e.KeyCode)
			{
				case Keys.D0:
				case Keys.D1:
				case Keys.D2:
				case Keys.D3:
				case Keys.D4:
				case Keys.D5:
				case Keys.D6:
				case Keys.D7:
				case Keys.D8:
				case Keys.D9:
				case Keys.Left:
				case Keys.Right:
				case Keys.End:
				case Keys.Home:
				case Keys.Back:
				case Keys.Delete:
				case Keys.Decimal:
				case Keys.OemPeriod:
					break;

				case Keys.Enter:
					SaveResource();
					break;

				default:
					e.SuppressKeyPress = true;
					break;
			}
		}

	

		void txtResource_name_Keydown(object sender, KeyEventArgs e)
		{
			if (pnlResPicker.vsbResource_RecordNumber.Value < 112)
			{
				e.SuppressKeyPress = true;
				return;
			}

			switch (e.KeyCode)
			{
				case Keys.Enter:
					for (int intResourceCounter = 0; intResourceCounter < classResourceXML.xResList.Count; intResourceCounter++)
					{
						classResource cThisResource = classResourceXML.getResource(intResourceCounter);
						if (intResourceCounter != pnlResPicker.vsbResource_RecordNumber.Value)
						if (cThisResource.Name.ToUpper().Trim() == txtResource_Name.Text.ToUpper().Trim())
						{
							MessageBox.Show("resource name must be unique");
							txtResource_Name.Text = cRes.Name;
							return;
						}
					}
					string strResourceName_Old = cRes.Name;
					string strResourceName_New = txtResource_Name.Text.Replace(" ", "_").Replace("!", "_").Replace("#", "_").Replace("$", "_");
					txtResource_Name.Text = strResourceName_New;

					SaveResource();
					bolIgnoreChangesToAction = true;
					pnlResPicker.Resource_PopulateLstSelected();
					bolIgnoreChangesToAction = false;

					// rename resources in actions
					for (int intActionCounter = 0; intActionCounter < classActionXML.xActionList.Count; intActionCounter++)
					{
						classAction cThisAction = classActionXML.getAction(intActionCounter);
						for (enuActionResourceType eActionResourceType = (enuActionResourceType)0; eActionResourceType < enuActionResourceType._numActionResourceType; eActionResourceType++)
						{
							classActionResourceType cActionResourceType = cThisAction.cResourceTypes[(int)eActionResourceType];
							for (int intActionResourceCounter = 0; intActionResourceCounter < cActionResourceType.cResources.Length; intActionResourceCounter++)
							{
								classActionResource cActionResource = cActionResourceType.cResources[intActionResourceCounter];
								if (cActionResource.strResourceName.ToUpper().Trim() == strResourceName_Old.ToUpper().Trim())
								{
									cActionResource.strResourceName = strResourceName_New;
									classActionXML.setAction(ref cThisAction, intActionCounter);
								}
							}
						}
					}
					Action_ShowRecord();
					e.SuppressKeyPress = true;
					break;

				case Keys.Shift:
				case Keys.ShiftKey:
					break;

				default:
					break;
			}
		}	
		
		void SaveResource()
		{
			if (pnlResPicker.bolResource_IgnoreChangesToSelectedItemlist) return;
			
			cRes.Name = txtResource_Name.Text;
			cRes.AlternateName = txtResource_AlternateName.Text;
			cRes.Mass = Convert.ToDouble(txtResource_Mass.Text);
			cRes.eType = (enuResource_Type)cmbResource_Type.SelectedIndex;
			cRes.eState = (enuResource_State)cmbResource_State.SelectedIndex;
			cRes.AlwaysVertical = lbtnResource_AlwaysVertical.Flag;
			cRes.CanBeConcealed = lbtnResource_CanBeConcealed.Flag;
			cRes.CanBeMoved = lbtnResource_CanBeMoved.Flag;
			cRes.eContainerType = (enuResource_State)cmbResource_ContainerType.SelectedIndex;
			cRes.dblContainerMaxMass = Convert.ToDouble(txtResourceContainer_MaximumMass.Text);
			cRes.dblRealWorldHeight = Convert.ToDouble(txtResourceDetails_RealWorldHeight.Text);
			
			classResourceXML.setResource(ref cRes, pnlResPicker.Index);
			Resource_ShowRecord();
		}

		void btnResource_DeleteResource_Click(object sender, EventArgs e)
		{
			if (MessageBox.Show("Are you sure you want to delete record #"
								+ pnlResPicker.Index.ToString() 
								+ " \"" 
								+ txtResource_Name.Text 
								+ "\"?", 
								"Delete Resource?", 
								MessageBoxButtons.YesNo, 
								MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
			{
				for (int intActionCounter = 0; intActionCounter < classActionXML.xActionList.Count; intActionCounter++)
				{
					classAction cThisAction = classActionXML.getAction(intActionCounter);
					for (enuActionResourceType eActionResourceTypeCounter = (enuActionResourceType)0; eActionResourceTypeCounter < enuActionResourceType._numActionResourceType; eActionResourceTypeCounter++)
					{
						classActionResourceType cActionResourceType = cThisAction.cResourceTypes[(int)eActionResourceTypeCounter];
						for (int intActionResourceCounter = 0; intActionResourceCounter < cActionResourceType.cResources.Length; intActionResourceCounter++)
						{
							classActionResource cActionResource = cActionResourceType.cResources[intActionResourceCounter];
							if (cActionResource.strResourceName.ToUpper().Trim() == cRes.Name.ToUpper().Trim())
							{
								do
								{
									for (int intActionResourceRemainingCounter = intActionResourceCounter; intActionResourceRemainingCounter < cActionResourceType.cResources.Length - 1; intActionResourceRemainingCounter++)
									{
										cActionResourceType.cResources[intActionResourceRemainingCounter] = cActionResourceType.cResources[intActionResourceRemainingCounter + 1];
									}
									Array.Resize<classActionResource>(ref cActionResourceType.cResources, cActionResourceType.cResources.Length - 1);
									if (intActionResourceCounter < cActionResourceType.cResources.Length)
									cActionResource = cActionResourceType.cResources[intActionResourceCounter];
								} while (intActionResourceCounter < cActionResourceType.cResources.Length && cActionResource.strResourceName.ToUpper().Trim() == cRes.Name.ToUpper().Trim());
								classActionXML.setAction(ref cThisAction, intActionCounter);
							}
						}
					}
				}

				classResourceXML.xRoot.RemoveChild(classResourceXML.xResList[pnlResPicker.Index]);				
			}
			Action_ShowRecord();
			Resource_ShowRecord();
			pnlResPicker.Resource_PopulateLstSelected();
		}

		void Resource_ShowRecord() 
		{
			Resource_ShowRecord(pnlResPicker.Index); 
		}

		void Resource_ShowRecord(int index)
		{
			cRes = classResourceXML.getResource(index);
			pnlResPicker.bolResource_IgnoreChangesToSelectedItemlist = true;
			txtResource_Name.Text = cRes.Name.Trim();
			txtResource_AlternateName.Text = cRes.AlternateName.Trim();
			txtResource_Mass.Text = cRes.Mass.ToString();
			cmbResource_Type.SelectedIndex = (int)cRes.eType;
			cmbResource_Type.Text = cmbResource_Type.Items[cmbResource_Type.SelectedIndex].ToString();
			cmbResource_State.SelectedIndex = (int)cRes.eState;
			cmbResource_State.Text = cmbResource_State.Items[cmbResource_State.SelectedIndex].ToString();

			if (cRes.AlwaysVertical)
				lbtnResource_AlwaysVertical.set();
			else
				lbtnResource_AlwaysVertical.reset();

			if (cRes.CanBeConcealed)
				lbtnResource_CanBeConcealed.set();
			else
				lbtnResource_CanBeConcealed.reset();

			if (cRes.CanBeMoved)
				lbtnResource_CanBeMoved.set();
			else
				lbtnResource_CanBeMoved.reset();

			cmbResource_ContainerType.SelectedIndex = (int)cRes.eContainerType;
			cmbResource_ContainerType.Text = cRes.eContainerType.ToString();

			txtResourceContainer_MaximumMass.Text = cRes.dblContainerMaxMass.ToString();

			pnlResPicker.bolResource_IgnoreChangesToSelectedItemlist = false;
			txtResourceDetails_RealWorldHeight.Text = cRes.dblRealWorldHeight.ToString();

			cSpriteResource = classResource.getSprite(cRes.eResource);
			//cSprCom = classResourceObject.getComposite(cRes.eResource, ref cSpriteResource);

			showResourceSprite();
		}
		
		void btnResource_CreateNewResource_Click(object sender, EventArgs e)
		{	
			cRes.Name = "New Resource";
			cRes.AlternateName = "";
			cRes.Mass = 1;
			classResourceXML.appendResourcesXml(ref cRes);
			pnlResPicker.Resource_PopulateLstSelected();
			pnlResPicker.Last();
			txtResource_Name.SelectAll();
			txtResource_Name.Focus();
		}

		void btnResource_Save_Click(object sender, EventArgs e)
		{
			classResourceXML.saveXml();
		}

		void tab_SizeChanged(object sender, EventArgs e)
		{
			// tab - Resources
			btnResource_Save.Location = new Point(tab.Width - btnResource_Save.Width - 10, tab.Height - btnResource_Save.Height - 30);
			btnResource_CreateNewResource.Location = new Point(5, btnResource_Save.Top);
			btnResource_DeleteResource.Location = new Point(btnResource_CreateNewResource.Left + btnResource_CreateNewResource.Width + 5, btnResource_Save.Top);
			btnResource_GetEnum.Location = new Point(btnResource_Save.Left - btnResource_GetEnum.Width, btnResource_Save.Top);
			
			txtResource_Name.Width
				= txtResource_AlternateName.Width
				= (tab.Width - txtResource_Name.Left - 15) / 2;

			lblResource_Name.Top
				= lblResource_AlternateName.Top
				= 0;
			txtResource_Name.Top
				= txtResource_AlternateName.Top
				= lblResource_Name.Top + lblResource_Name.Height;
			txtResource_Name.Left
				= lblResource_Name.Left
				= 5;

			txtResource_AlternateName.Left
				= lblResource_AlternateName.Left
				= txtResource_Name.Left + txtResource_Name.Width + 5;

			tabResourceDetails.Top = txtResource_Name.Bottom + 5;
			tabResourceDetails.Left = txtResource_Name.Left;
			tabResourceDetails.Width = txtResource_AlternateName.Right - tabResourceDetails.Left;
			tabResourceDetails.Height = btnResource_Save.Top - tabResourceDetails.Top - 10;
						
			// actions tab
			tabActionsPage.Top = txtAction_Name.Bottom + 5;
			tabActionsPage.Width = tabActions.Width - 10;
			tabActionsPage.Height = tabActions.Height - tabActionsPage.Top;
		
			btnAction_Save.Location = new Point(tabActionsPage.Width - btnAction_Save.Width - 10, tabActionsPage.Height - btnAction_Save.Height - 30);
			btnAction_CreateNew.Location = new Point(5, btnAction_Save.Top);
			btnAction_DeleteAction.Location = new Point(btnAction_CreateNew.Left + btnAction_CreateNew.Width + 5, btnAction_Save.Top);
			btnAction_GetEnum.Location = new Point(btnAction_Save.Left - btnAction_GetEnum.Width, btnAction_Save.Top);

			txtAction_Name.Width= (tabActionsPage.Width/2 - txtAction_Name.Left - 5);
			lblAction_Title.Left = txtAction_Name.Right + 5;
			txtAction_Title.Left = lblAction_Title.Right;
			txtAction_Title.Width = (tabActionsPage.Width - txtAction_Title.Left - 10);

			pnlActionPicker.Left =0;
			pnlActionRequirements.Left = 5;
			pnlActionRequirements.Top = 0;
			pnlActionRequirements.Width = Width - 10;
			pnlActionRequirements.Height = 70;
			
			pnlActionPicker.Top = pnlActionRequirements.Bottom;
			pnlActionPicker.Width = tabActionsPage.Width - 10;
			pnlActionPicker.Height = btnAction_Save.Top - pnlActionPicker.Top - 5;
			pnlActionPicker.Action_PopulateLstSelected();

		}

		private void btnResource_GetEnum_Click(object sender, EventArgs e)
		{
			string strNL = "\r\n";
			string strEnum = "#region enuResources";
			strEnum += strNL + "public enum enuResources {";

			for (int intResourceCouter = 0; intResourceCouter < classResourceXML.xResList.Count; intResourceCouter++)
			{
				classResource cRes = classResourceXML.getResource(intResourceCouter);
				strEnum += strNL + "\t\t" + cRes.Name.Trim()
					.Replace(" ", "_")
					.Replace("$", "_")
					.Replace("!", "_")
					.Replace("#", "_") + ",";
			}
			strEnum += strNL + "\t\t_numResources";
			strEnum += strNL + "\t\t};";
			strEnum += strNL+"#endregion";
			Clipboard.SetText(strEnum);

		}
		#endregion

		#region Actions
	
		private void btnAction_GetEnum_Click(object sender, EventArgs e)
		{
			string strNL = "\r\n";
			string strEnum = "#region enum_Actions";
			strEnum += strNL + "public enum enuActions {";

			for (int intActionCouter = 0; intActionCouter < classActionXML.xActionList.Count; intActionCouter++)
			{
				classAction cAction = classActionXML.getAction(intActionCouter);
				strEnum += strNL + cAction.Name.Trim()
					.Replace(" ", "_")
					.Replace("$", "_")
					.Replace("!", "_")
					.Replace("#", "_");
				strEnum += ",";
			}
			strEnum += strNL + "_numActions";
			strEnum += strNL + "};";
			strEnum += strNL + "#endregion";
			Clipboard.SetText(strEnum);
		}

		void btnAction_Save_Click(object sender, EventArgs e)
		{
			classActionXML.saveXml();
		}

		void btnAction_CreateNewAction_Click(object sender, EventArgs e)
		{
			cAction.Name = "New Action";
			classActionXML.appendActionsXml(ref cAction);
			pnlActionPicker.Action_PopulateLstSelected();
			for (enuActionResourceType eActionResourceTypeCounter = 0; eActionResourceTypeCounter < enuActionResourceType._numActionResourceType; eActionResourceTypeCounter++)
			{
				pnlActionsResources[(int)eActionResourceTypeCounter].clear();
			}

			pnlActionPicker.Last();
			txtAction_Name.SelectAll();
			txtAction_Name.Focus();
		}

		void Action_ShowRecord()
		{
			Action_ShowRecord(pnlActionPicker.Index);
		}

		void Action_ShowRecord(int index)
		{
			if (bolIgnoreChangesToAction) return;
			cAction = classActionXML.getAction(index);
			panelActionsResource.bolIgnoreChangesToResourcesIReplaceCombo = true;

			for (enuActionResourceType eActionResourceTypeCounter = 0; eActionResourceTypeCounter < enuActionResourceType._numActionResourceType; eActionResourceTypeCounter++)
			{
				pnlActionsResources[(int)eActionResourceTypeCounter].clear();
			}

			if (cAction != null && cAction.Name != null)
			{
				bolIgnoreChangesToAction = true;
				
				pnlActionPicker.bolAction_IgnoreChangesToSelectedItemlist = true;
				txtAction_Name.Text = cAction.Name.Trim();
				txtAction_Title.Text = cAction.Title.Trim();

				pnlActionsResources[(int)enuActionResourceType.Input].bolIgnoreChangesToVSB = true;
				pnlActionsResources[(int)enuActionResourceType.Input].clear();
				for (int intResInputCounter = 0; intResInputCounter < cAction.cResourceTypes[(int)enuActionResourceType.Input].cResources.Length; intResInputCounter++)
					pnlActionsResources[(int)enuActionResourceType.Input].Add(ref cAction.cResourceTypes[(int)enuActionResourceType.Input].cResources[intResInputCounter]);
				pnlActionsResources[(int)enuActionResourceType.Input].bolIgnoreChangesToVSB = false;
				pnlActionsResources[(int)enuActionResourceType.Input].placePanels();

				pnlActionsResources[(int)enuActionResourceType.Interrupt].bolIgnoreChangesToVSB = true;
				pnlActionsResources[(int)enuActionResourceType.Interrupt].clear();
				for (int intResInputCounter = 0; intResInputCounter < cAction.cResourceTypes[(int)enuActionResourceType.Interrupt].cResources.Length; intResInputCounter++)
					pnlActionsResources[(int)enuActionResourceType.Interrupt].Add(ref cAction.cResourceTypes[(int)enuActionResourceType.Interrupt].cResources[intResInputCounter]);
				pnlActionsResources[(int)enuActionResourceType.Interrupt].bolIgnoreChangesToVSB = false;
				pnlActionsResources[(int)enuActionResourceType.Interrupt].placePanels();

				pnlActionsResources[(int)enuActionResourceType.Output].bolIgnoreChangesToVSB = true;
				pnlActionsResources[(int)enuActionResourceType.Output].clear();
				for (int intResInputCounter = 0; intResInputCounter < cAction.cResourceTypes[(int)enuActionResourceType.Output].cResources.Length; intResInputCounter++)
					pnlActionsResources[(int)enuActionResourceType.Output].Add(ref cAction.cResourceTypes[(int)enuActionResourceType.Output].cResources[intResInputCounter]);
				pnlActionsResources[(int)enuActionResourceType.Output].bolIgnoreChangesToVSB = false;
				pnlActionsResources[(int)enuActionResourceType.Output].placePanels();
				
				pnlActionPicker.bolAction_IgnoreChangesToSelectedItemlist = false;

				pnlActionsResources[(int)enuActionResourceType.Input].rebuildResourceNames();

				pnlActionRequirements.load(ref cAction.cRequirements);
				bolIgnoreChangesToAction = false;

				panelActionsResource.bolIgnoreChangesToResourcesIReplaceCombo = false;
				rebuildResourceIReplaceComboBox();
			}
		}

		static public void rebuildResourceIReplaceComboBox()
		{
			for (enuActionResourceType eResType = enuActionResourceType.Interrupt; eResType <= enuActionResourceType.Output; eResType++)
			{
				for (int intPanelCounter = 0; intPanelCounter < pnlActionsResources[(int)eResType].pnlResArray.Length; intPanelCounter++)
				{
					int intSelectedIndex = pnlActionsResources[(int)eResType].pnlResArray[intPanelCounter].cmbResourceThisReplaces.SelectedIndex;
					pnlActionsResources[(int)eResType].pnlResArray[intPanelCounter].cmbResourceThisReplaces.Items.Clear();
					for (int intInputResourceCounter = 0; intInputResourceCounter < cAction.cResourceTypes[(int)enuActionResourceType.Input].cResources.Length; intInputResourceCounter++)
						pnlActionsResources[(int)eResType]
							.pnlResArray[intPanelCounter]
							.cmbResourceThisReplaces.Items.Add(
										pnlActionsResources[(int)enuActionResourceType.Input].pnlResArray[intInputResourceCounter].lbtrResource.Text
															  );
					pnlActionsResources[(int)eResType].pnlResArray[intPanelCounter].cmbResourceThisReplaces.Items.Add("--none--");

					if (intPanelCounter < pnlActionsResources[(int)eResType].pnlResArray.Length
						&& intSelectedIndex >= 0
						&& intSelectedIndex < pnlActionsResources[(int)eResType].pnlResArray[intPanelCounter].cmbResourceThisReplaces.Items .Count)
						pnlActionsResources[(int)eResType].pnlResArray[intPanelCounter].cmbResourceThisReplaces.SelectedIndex = intSelectedIndex;
					else 
						pnlActionsResources[(int)eResType].pnlResArray[intPanelCounter].cmbResourceThisReplaces.SelectedIndex
							= cAction.cResourceTypes[(int)eResType].cResources[intPanelCounter].intIndexInputResourceIReplace >= 0
											? cAction.cResourceTypes[(int)eResType].cResources[intPanelCounter].intIndexInputResourceIReplace
											: pnlActionsResources[(int)eResType].pnlResArray[intPanelCounter].cmbResourceThisReplaces.Items.Count - 1;
					pnlActionsResources[(int)eResType].pnlResArray[intPanelCounter].cmbResourceThisReplaces.Text = pnlActionsResources[(int)eResType].pnlResArray[intPanelCounter].cmbResourceThisReplaces.Items[pnlActionsResources[(int)eResType].pnlResArray[intPanelCounter].cmbResourceThisReplaces.SelectedIndex].ToString();
				}
			}
		}

		void vsbAction_RecordNumber_ValueChanged(object sender, EventArgs e)
		{
			if (pnlActionPicker.bolActions_IgnoreChangesToNUD) return;
			Action_ShowRecord();
			bolIgnoreChangesToAction = true;
			pnlActionPicker.Action_PopulateLstSelected();
			bolIgnoreChangesToAction = false;
		}

		static bool bolIgnoreChangesToAction = false;
		public void SetAction()
		{
			if (bolIgnoreChangesToAction) return;
			if (pnlActionPicker.bolAction_IgnoreChangesToSelectedItemlist) return;
			// name
			cAction.Name = txtAction_Name.Text;
			cAction.Title = txtAction_Title.Text;
			
			for (enuActionResourceType eActionTypeCounter = (enuActionResourceType)0; eActionTypeCounter < enuActionResourceType._numActionResourceType; eActionTypeCounter++)
			{
				cAction.cResourceTypes[(int)eActionTypeCounter].cResources = new classActionResource[pnlActionsResources[(int)eActionTypeCounter].pnlResArray.Length];
				for (int intResCounter = 0; intResCounter < cAction.cResourceTypes[(int)eActionTypeCounter].cResources.Length; intResCounter++)
				{
					cAction.cResourceTypes[(int)eActionTypeCounter].cResources[intResCounter] = pnlActionsResources[(int)eActionTypeCounter].pnlResArray[intResCounter].getActionResource();
				}
			}
			
			cAction.cRequirements = pnlActionRequirements.Requirements;
		}

		public void SaveAction()
		{
			if (bolIgnoreChangesToAction) return;
			if (pnlActionPicker.bolAction_IgnoreChangesToSelectedItemlist) return;

			SetAction();
			classActionXML.setAction(ref cAction, pnlActionPicker.Index);

			bolIgnoreChangesToAction = true;
			pnlActionPicker.Action_PopulateLstSelected();
			bolIgnoreChangesToAction = false;
		}

		void btnAction_DeleteAction_Click(object sender, EventArgs e)
		{
			if (MessageBox.Show("Are you sure you want to delete record #"
								+ pnlActionPicker.Index.ToString()
								+ " \""
								+ txtAction_Name.Text
								+ "\"?",
								"Delete Action?",
								MessageBoxButtons.YesNo,
								MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
			{
				classActionXML.xRoot.RemoveChild(classActionXML.xActionList[pnlActionPicker.Index]);
			}
			Action_ShowRecord();
			pnlActionPicker.Action_PopulateLstSelected();
		}

		void txtActionName_Keydown(object sender, KeyEventArgs e)
		{
			switch (e.KeyCode)
			{
				case Keys.Enter:
					string strOldName = cAction.Name;
					string strNewName = txtAction_Name.Text.Replace(" ", "_").Replace("!", "_").Replace("#","_").Replace("$", "_");
					txtAction_Name.Text = strNewName;

					for (int intActionCounter = 0; intActionCounter < classActionXML.xActionList.Count; intActionCounter++)
					{
						classAction cThisAction = classActionXML.getAction(intActionCounter);
						if (cThisAction.cRequirements.strLoopActionName == strOldName)
						{
							cThisAction.cRequirements.strLoopActionName = strNewName;
							classActionXML.setAction(ref cThisAction, intActionCounter);
						}
					}

					pnlActionRequirements.lbtaLoopAction.ActionName = strNewName;
					SaveAction();
					
					Action_ShowRecord();
					e.SuppressKeyPress = true;
					break;

				case Keys.Shift:
				case Keys.ShiftKey:
					break;

				default:
					break;
			} 
		}		
		#endregion
	}

	public class panelActionsResourceListEditor : Panel
	{
		public event EventHandler<EventArgs> ValueChanged;
		Panel pnlResources = new Panel();
		VScrollBar vsbResources = new VScrollBar();
		LabelButton lbtnAddResource = new LabelButton();
		public enuActionResourceType eResourceType = enuActionResourceType.Input;
		public panelActionsResource[] pnlResArray = new panelActionsResource[0];
		public string[] strResourceNames = { };

		public panelActionsResourceListEditor(enuActionResourceType Resourcetype)
		{
			eResourceType = Resourcetype;

			Controls.Add(pnlResources);
			Controls.Add(vsbResources);
			Controls.Add(lbtnAddResource);

			vsbResources.Minimum = 0;
			vsbResources.Maximum = 1000;

			lbtnAddResource.ClickTogglesFlag = false;

			SizeChanged += new EventHandler(panelActionsResourceListEditor_SizeChanged);
			lbtnAddResource.Click += new EventHandler(lbtnAddResource_Click);
			pnlResources.SizeChanged += new EventHandler(pnlResources_SizeChanged);
			vsbResources.VisibleChanged += new EventHandler(vsbResources_VisibleChanged);
			vsbResources.ValueChanged += new EventHandler(vsbResources_ValueChanged);
		}

		protected virtual void OnValueChange(EventArgs e)
		{
			if (ValueChanged != null)
			{
				ValueChanged(this, e);
			}
		}

		public void testQuantities()
		{
			if (panelActionsResource.bolIgnoreChangesToResourcesIReplaceCombo) return;
			if (eResourceType == enuActionResourceType.Input)
			{
				formXmlResourcesActionsEditor.pnlActionsResources[(int)enuActionResourceType.Interrupt].testQuantities();
				formXmlResourcesActionsEditor.pnlActionsResources[(int)enuActionResourceType.Output].testQuantities();
			}
			else
			{
				bool[] bolHighlightInput = new bool[formXmlResourcesActionsEditor.pnlActionsResources[(int)enuActionResourceType.Input].pnlResArray.Length];
				for (int intPanelCounter = 0; intPanelCounter < pnlResArray.Length; intPanelCounter++)
				{
					Color clrBackground = Color.White;
					panelActionsResource pnlInput = null;
					if (pnlResArray[intPanelCounter].cmbResourceThisReplaces.SelectedIndex < formXmlResourcesActionsEditor.pnlActionsResources[(int)enuActionResourceType.Input].pnlResArray.Length - 1
						&& pnlResArray[intPanelCounter].cmbResourceThisReplaces.SelectedIndex>=0)
					{
						int intInputPanel = pnlResArray[intPanelCounter].cmbResourceThisReplaces.SelectedIndex;
						string strInputQuantity = formXmlResourcesActionsEditor.pnlActionsResources[(int)enuActionResourceType.Input].pnlResArray[intInputPanel].txtQuantity.Text;
						string strMyQuantity = pnlResArray[intPanelCounter].txtQuantity.Text;
						pnlInput = formXmlResourcesActionsEditor.pnlActionsResources[(int)enuActionResourceType.Input]
																.pnlResArray[
																	pnlResArray[intPanelCounter]
																		.cmbResourceThisReplaces.SelectedIndex
																			];
						try
						{
							int intInputQuantity = Convert.ToInt16(strInputQuantity);
							int intMyQuantity = Convert.ToInt16(strMyQuantity);
							if (intInputQuantity != intMyQuantity)
							{
								clrBackground = Color.Red;
								bolHighlightInput[pnlResArray[intPanelCounter].cmbResourceThisReplaces.SelectedIndex] = true;
							}
						}
						catch (Exception)
						{
							clrBackground = Color.Red;
						}
					}
					pnlResArray[intPanelCounter].txtQuantity.BackColor 
						= clrBackground;
				}
				for (int intInputPanelCounter =0; intInputPanelCounter < formXmlResourcesActionsEditor.pnlActionsResources[(int)enuActionResourceType.Input].pnlResArray.Length; intInputPanelCounter++)
				{
					formXmlResourcesActionsEditor.pnlActionsResources[(int)enuActionResourceType.Input].pnlResArray[intInputPanelCounter].txtQuantity.BackColor 
						= bolHighlightInput[intInputPanelCounter] 
									? Color.Red 
									: Color.White;
				}		
			}
		}
		
		public void Add()
		{
			panelActionsResource pnlNew = new panelActionsResource(eResourceType);
			Add(ref pnlNew);
		}

		public void Add(ref panelActionsResource pnlNew)
		{
			Array.Resize<panelActionsResource>(ref pnlResArray, pnlResArray.Length + 1);
			pnlResArray[pnlResArray.Length - 1] = pnlNew;
			pnlResources.Controls.Add(pnlNew);
			placePanels();

			pnlNew.lbtnDelete.Click += new EventHandler(lbtnDelete_Click);
			pnlNew.ValueChanged += new EventHandler<EventArgs>(pnlNew_ValueChanged);
			rebuildResourceNames();
		}

		public void rebuildResourceNames()
		{
			string[] strNewResourceNames = new string[pnlResArray.Length + (eResourceType == enuActionResourceType.Input ? 1:0)];
			for (int intResPanelCounter = 0; intResPanelCounter < pnlResArray.Length; intResPanelCounter++)
			{
				strNewResourceNames[intResPanelCounter] = pnlResArray[intResPanelCounter].lbtrResource.Text;
			}
			strResourceNames = strNewResourceNames;
			if (eResourceType == enuActionResourceType.Input)
			{
				strNewResourceNames[strNewResourceNames.Length - 1] = "--none--";
				formXmlResourcesActionsEditor.rebuildResourceIReplaceComboBox();
			}
		}

		void pnlNew_ValueChanged(object sender, EventArgs e)
		{
			OnValueChange(EventArgs.Empty);
		}

		public void Add(ref classActionResource cActionResource)
		{
			panelActionsResource pnlActionResource = new panelActionsResource(ref cActionResource, eResourceType);
			Add(ref pnlActionResource);
			OnValueChange(EventArgs.Empty);
		}

		public void clear()
		{
			for (int intResCounter = 0; intResCounter < pnlResArray.Length; intResCounter++)
			{
				pnlResArray[intResCounter].Hide();
				pnlResArray[intResCounter].Dispose();
			}
			pnlResArray = new panelActionsResource[0];
		}

		public bool bolIgnoreChangesToVSB = false;
		void vsbResources_ValueChanged(object sender, EventArgs e)
		{
			if (bolIgnoreChangesToVSB) return;
			int intTop = vsbResources.Top;
			int intBottom = vsbResources.Bottom - pnlResources.Height;

			double dblFraction = ((double)vsbResources.Value / (double)(vsbResources.Maximum - vsbResources.LargeChange));
			pnlResources.Top = intTop + (int)((double)(intBottom - intTop) * dblFraction);
		}

		void vsbResources_VisibleChanged(object sender, EventArgs e)
		{
			if (vsbResources.Visible)
			{
				bolIgnoreChangesToVSB = true;
				vsbResources.LargeChange = (int)((double)vsbResources.Height / (double)pnlResources.Height * (double)vsbResources.Maximum);
				bolIgnoreChangesToVSB = false;
				vsbResources.Value = vsbResources.Minimum;
			}
		}

		void pnlResources_SizeChanged(object sender, EventArgs e)
		{
			vsbResources.Visible = (pnlResources.Height >vsbResources.Height);			
		}

		void lbtnAddResource_Click(object sender, EventArgs e)
		{
			Add();
		}

		public void placePanels()
		{
			if (bolIgnoreChangesToVSB) return;
			for (int intPanelCounter = 0; intPanelCounter < pnlResArray.Length; intPanelCounter++)
			{
				if (intPanelCounter == 0)
					pnlResArray[intPanelCounter].Top = 5;
				else
					pnlResArray[intPanelCounter].Top = pnlResArray[intPanelCounter - 1].Bottom;
				pnlResArray[intPanelCounter].Left = 0;
				pnlResArray[intPanelCounter].Width = vsbResources.Left - pnlResArray[intPanelCounter].Left - 15;
			}
			if (pnlResArray.Length > 0)
				pnlResources.Height = pnlResArray[pnlResArray.Length - 1].Bottom;
			else
				pnlResources.Height = 10;
		}

		void lbtnDelete_Click(object sender, EventArgs e)
		{
			LabelButton lbtn = (LabelButton)sender;
			panelActionsResource pnlAR = (panelActionsResource)lbtn.Parent;
			for (int intPnlCounter = 0; intPnlCounter < pnlResArray.Length; intPnlCounter++)
				if (pnlResArray[intPnlCounter] == pnlAR)
				{ // delete this panel
					for (int intMoveCounter = intPnlCounter; intMoveCounter < pnlResArray.Length - 1; intMoveCounter++)
					{
						pnlResArray[intMoveCounter] = pnlResArray[intMoveCounter + 1];
					}
					Array.Resize<panelActionsResource>(ref pnlResArray, pnlResArray.Length - 1);
					pnlAR.Hide();
					pnlAR.Dispose();
					placePanels();
					OnValueChange(EventArgs.Empty);
					rebuildResourceNames();
					return;
				}
		}

		void panelActionsResourceListEditor_SizeChanged(object sender, EventArgs e)
		{
			vsbResources.Left = Width - 5 - vsbResources.Width;
			vsbResources.Top = 25;
			vsbResources.Height = Height - vsbResources.Top - 10;

			vsbResources.Visible = (pnlResources.Height > Height - 25);
			pnlResources.Left = 5;
			pnlResources.Width = vsbResources.Left - 10;

			lbtnAddResource.Left = Width - lbtnAddResource.Width - 5;
			lbtnAddResource.Top = Height - lbtnAddResource.Height - 5;
			lbtnAddResource.Visible = true;
			lbtnAddResource.Text = "Add Resource";
			lbtnAddResource.BringToFront();
			placePanels();
		}
	}
	
	public class panelActionsResource : Panel
	{
		public event EventHandler<EventArgs> ValueChanged;

		public TextBox txtQuantity = new TextBox();
		public Label lblQuantity = new Label();
		public labelResource lbtrResource = new labelResource();
		public LabelButton lbtnDisappearsWhileInuse = new LabelButton();
		public ComboBox cmbLocation = new ComboBox();
		public LabelButton lbtnDelete = new LabelButton();
		public LabelButton lbtnRemainsAvailableToOtherActions = new LabelButton();
		
		public Label lblResourceThisReplaces = new Label();
		public ComboBox cmbResourceThisReplaces = new ComboBox();

		enuActionResourceType eResourcetype = enuActionResourceType.Input;

		public panelActionsResource(enuActionResourceType ResourceType)
		{
			eResourcetype = ResourceType;
			createObjects();
			cmbResourceThisReplaces.SelectedIndexChanged += new EventHandler(cmbResourceThisReplaces_SelectedIndexChanged);
		}

		public panelActionsResource(ref classActionResource cActionResource, enuActionResourceType ResourceType)
		{
			eResourcetype = ResourceType;
			createObjects();
			lbtrResource.ResourceName = cActionResource.strResourceName;
			txtQuantity.Text = cActionResource.intQuantity.ToString();
			lbtnDisappearsWhileInuse.Flag = cActionResource.bolDisappearsWhileInUse;
			cmbLocation.SelectedIndex = (int)cActionResource.eLocation;
			cmbResourceThisReplaces.SelectedIndexChanged += new EventHandler(cmbResourceThisReplaces_SelectedIndexChanged);
			bolIgnoreChangesToResourcesIReplaceCombo = false;
		}

		public static bool bolIgnoreChangesToResourcesIReplaceCombo = false;
		void cmbResourceThisReplaces_SelectedIndexChanged(object sender, EventArgs e)
		{
			if (bolIgnoreChangesToResourcesIReplaceCombo) return;
			ValueChanged(this, e);
			formXmlResourcesActionsEditor.pnlActionsResources[(int)eResourcetype].testQuantities();
		}

		protected virtual void OnValueChange(EventArgs e)
		{
			if (ValueChanged != null)
			{
				ValueChanged(this, e);
			}
		}

		void createObjects()
		{
			Controls.Add(txtQuantity);
			Controls.Add(lblQuantity);
			Controls.Add(lbtrResource);
			Controls.Add(lbtnDelete);
			Controls.Add(lbtnDisappearsWhileInuse);
			Controls.Add(cmbLocation);
			Controls.Add(lblResourceThisReplaces);
			Controls.Add(cmbResourceThisReplaces);
			Controls.Add(lbtnRemainsAvailableToOtherActions);

			txtQuantity.Font 
				= lbtrResource.Font 
				= new Font("ms sans-serif", 12);

			lbtrResource.AutoSize = false;

			lbtrResource.ClickTogglesFlag = false;
			lbtnDelete.ClickTogglesFlag = false;

			lbtrResource.ResourceName = "";
			lblQuantity.Text = "quantity";

			lbtnDelete.Text = "Delete";
			lbtnDisappearsWhileInuse.Text = "Disappears While In Use";

			lbtnRemainsAvailableToOtherActions.Text = "Remains available while in use";
			lbtnRemainsAvailableToOtherActions.Visible = eResourcetype == enuActionResourceType.Input;

			for (enuActionResourceLocation eLocationCounter =(enuActionResourceLocation)0 ; eLocationCounter < (enuActionResourceLocation)4; eLocationCounter++)
				cmbLocation.Items.Add(eLocationCounter.ToString());
			cmbLocation.Text = cmbLocation.Items[0].ToString();

			Height = lbtnDelete.Height
				+ txtQuantity.Height
				+ lblQuantity.Height + 20;

			txtQuantity.Text = "1";
			txtQuantity.TextAlign = HorizontalAlignment.Right;
			txtQuantity.KeyDown += new KeyEventHandler(txtQuantity_KeyDown);
			txtQuantity.TextChanged += new EventHandler(txtQuantity_TextChanged);

			lblResourceThisReplaces.Text = "Resource this replaces:";
			lblResourceThisReplaces.AutoSize = true;
			
			BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;

			lbtrResource.AfterClick += new EventHandler<EventArgs>(lbtrResource_AfterClick);
			lbtnDisappearsWhileInuse.AfterClick += new EventHandler<EventArgs>(lbtnDisappearsWhileInuse_AfterClick);
			lbtnRemainsAvailableToOtherActions.AfterClick += new EventHandler<EventArgs>(lbtnRemainsAvailableToOtherActions_AfterClick);
			cmbLocation.SelectedIndexChanged += new EventHandler(cmbLocation_SelectedIndexChanged);
			
			SizeChanged += new EventHandler(panelActionsResource_SizeChanged);
		}

		void lbtnRemainsAvailableToOtherActions_AfterClick(object sender, EventArgs e)
		{
			OnValueChange(EventArgs.Empty);
		}

		void txtQuantity_TextChanged(object sender, EventArgs e)
		{
			formXmlResourcesActionsEditor.pnlActionsResources[(int)eResourcetype].testQuantities(); 
		}

		void cmbLocation_SelectedIndexChanged(object sender, EventArgs e)
		{
			testResource();
			OnValueChange(EventArgs.Empty);
		}

		void testResource()
		{
			if (cmbLocation.SelectedIndex == (int)enuActionResourceLocation.vehicle)
			{
				enuResources eResource = classResource.getResourceFromString(lbtrResource.Text);
				classResource cResource = classResourceXML.getResource((int)eResource);

				if (eResource == enuResources.__special__
					|| (cResource != null
						&& cResource.eType != enuResource_Type.vehicle))
				{
					MessageBox.Show("warning : the resources " + eResource.ToString() + " is not a vehicle");
				}
			}
		}

		void lbtnDisappearsWhileInuse_AfterClick(object sender, EventArgs e)
		{
			OnValueChange(EventArgs.Empty);
		}

		void lbtrResource_AfterClick(object sender, EventArgs e)
		{
			testResource(); 
			OnValueChange(EventArgs.Empty);
			formXmlResourcesActionsEditor.rebuildResourceIReplaceComboBox();
		}

		void txtQuantity_KeyDown(object sender, KeyEventArgs e)
		{
			switch (e.KeyCode)
			{
				case Keys.D0:
				case Keys.D1:
				case Keys.D2:
				case Keys.D3:
				case Keys.D4:
				case Keys.D5:
				case Keys.D6:
				case Keys.D7:
				case Keys.D8:
				case Keys.D9:
				case Keys.Left:
				case Keys.Right:
				case Keys.End:
				case Keys.Home:
				case Keys.Back:
				case Keys.Delete:
					break;

				case Keys.Enter:
					OnValueChange(EventArgs.Empty);
					break;	

				default:
					e.SuppressKeyPress = true;
					break;
			}
		}



		public classActionResource getActionResource()
		{
			classActionResource cRetVal = new classActionResource();

			cRetVal.bolDisappearsWhileInUse = lbtnDisappearsWhileInuse.Flag;
			cRetVal.eLocation = (enuActionResourceLocation)cmbLocation.SelectedIndex;
			cRetVal.intQuantity = Convert.ToInt16(txtQuantity.Text);
			cRetVal.strResourceName = lbtrResource.ResourceName ;
			cRetVal.intIndexInputResourceIReplace = (cmbResourceThisReplaces.SelectedIndex >= formXmlResourcesActionsEditor.pnlActionsResources[(int)enuActionResourceType.Input].pnlResArray.Length ? -1: cmbResourceThisReplaces.SelectedIndex);
			cRetVal.bolRemainsAvailableForOtherActions = lbtnRemainsAvailableToOtherActions.Flag;
			return cRetVal;
		}

		void panelActionsResource_SizeChanged(object sender, EventArgs e)
		{
			lblQuantity.Top = 5;
			lbtrResource.Left = 5;
			txtQuantity.Width = 75;
			lbtrResource.Width = (Width - txtQuantity.Width - 15);
			lbtrResource.Top 
				= txtQuantity.Top 
				= lblQuantity.Top + lblQuantity.Height;
			lblQuantity.Left 
				= txtQuantity.Left 
				= lbtrResource.Left + lbtrResource.Width + 5;
			lbtnDelete.Location = new Point(Width - lbtnDelete.Width - 5, txtQuantity.Top + txtQuantity.Height + 5);

			cmbLocation.Left = lbtrResource.Left;
			cmbLocation.Top = lbtrResource.Top + lbtrResource.Height+5;

			lblResourceThisReplaces.Left = cmbLocation.Right + 10;
			cmbResourceThisReplaces.Left = lblResourceThisReplaces.Right;

			cmbResourceThisReplaces.Width = lbtnDelete.Left - cmbResourceThisReplaces.Left - 10;

			lblResourceThisReplaces.Top
				= cmbResourceThisReplaces.Top
				= cmbLocation.Top;

			lblResourceThisReplaces.Visible
				= cmbResourceThisReplaces.Visible
				= eResourcetype != enuActionResourceType.Input;

			lbtnDisappearsWhileInuse.Location = new Point(2, 2);
			lbtnRemainsAvailableToOtherActions.Location = new Point(lbtnDisappearsWhileInuse.Right + 5, lbtnDisappearsWhileInuse.Top);
		}
	}

	public class labelResource : LabelButton
	{
		string strResourceName;
		public string ResourceName
		{
			get { return strResourceName; }
			set
			{
				if (value != null)
				{
					strResourceName = value;

					if (strResourceName.Length > 0)
						Text = strResourceName;
					else
						Text = "---";
				}
			}
		}

		public labelResource()
		{
			ClickTogglesFlag = false;
			Click += new EventHandler(labelResource_Click);
		}

		void labelResource_Click(object sender, EventArgs e)
		{
			formResourcePicker frmResourcePicker = new formResourcePicker(strResourceName);
			frmResourcePicker.ResourceName = strResourceName;
			frmResourcePicker.ShowDialog();
			ResourceName = frmResourcePicker.ResourceName;
		}
	}

	public class labelAction : LabelButton
	{
		string _ActionName;
		public string ActionName
		{
			get { return _ActionName; }
			set
			{
				classAction cAct = classActionXML.getActionByName(value);
				if (cAct != null)
				{
					_ActionName = value;

					if (cAct.Name != null && cAct.Name.Length > 0)
						Text = cAct.Name;
					else
					{
						Text = "---";
						_ActionName = null;
					}
				}
				else
				{
					_ActionName = null;
					Text = "---";
				}
			}
		}

		public labelAction()
		{
			Click += new EventHandler(labelAction_Click);
		}

		void labelAction_Click(object sender, EventArgs e)
		{
			formActionPicker frmActionPicker = new formActionPicker();
			
			frmActionPicker.ShowDialog();
			ActionName = frmActionPicker.ActionName;
			
		}
	}

	public class formResourcePicker : Form
	{
		public PanelResourcePicker pnlResPicker = new PanelResourcePicker();
		Button btnOk = new Button();
		Button btnCancel = new Button();
		string strDefaultResourceName;
		public string ResourceName;
		string strText = "Resource Picker";
		public formResourcePicker(string strDefaultResourceName)
		{
			Controls.Add(pnlResPicker);
			Controls.Add(btnOk);
			Controls.Add(btnCancel);
			
			strDefaultResourceName
				=  ResourceName 
				= strDefaultResourceName;

			btnOk.Text = "Ok";
			btnOk.Click += new EventHandler(btnOk_Click);
			
			btnCancel.Text = "Cancel";
			btnCancel.Click += new EventHandler(btnCancel_Click);

			SizeChanged += new EventHandler(formResourcePicker_SizeChanged);
			VisibleChanged += new EventHandler(formResourcePicker_VisibleChanged);
			pnlResPicker.ValueChanged += new EventHandler<EventArgs>(pnlResPicker_ValueChanged);

			Text = strText;
		}

		void pnlResPicker_ValueChanged(object sender, EventArgs e)
		{
			classResource cResource = classResourceXML.getResource(pnlResPicker.vsbResource_RecordNumber.Value);
			Text = strText + "(" + cResource.Name + ")";
		}

		void formResourcePicker_VisibleChanged(object sender, EventArgs e)
		{
			if (Visible)
			{
				Size = new Size(500, 500);
				pnlResPicker.vsbResource_RecordNumber.Value = 112;
			}
		}

		void formResourcePicker_SizeChanged(object sender, EventArgs e)
		{
			pnlResPicker.Location = new Point(5, 5);
			pnlResPicker.Width = Width - 20;

			btnOk.Top
				= btnCancel.Top
				= Height - 45 - btnOk.Height;

			btnOk.Left = Width - btnOk.Width - 20;
			btnCancel.Left = btnOk.Left - btnCancel.Width - 5;

			pnlResPicker.Height = btnOk.Top - pnlResPicker.Top - 5;
		}

		void btnCancel_Click(object sender, EventArgs e)
		{
			ResourceName = strDefaultResourceName;
			Dispose();
		}

		void btnOk_Click(object sender, EventArgs e)
		{
			ResourceName = pnlResPicker.ResourceName;
			Dispose();
		}
	}

	public class formActionPicker : Form
	{
		PanelActionPicker pnlActionPicker = new PanelActionPicker();
		Button btnOk = new Button();
		Button btnCancel = new Button();

		public string ActionName;

		public formActionPicker()
		{
			Controls.Add(pnlActionPicker);
			Controls.Add(btnOk);
			Controls.Add(btnCancel);

			btnOk.Text = "Ok";
			btnOk.Click += new EventHandler(btnOk_Click);

			btnCancel.Text = "Cancel";
			btnCancel.Click += new EventHandler(btnCancel_Click);

			SizeChanged += new EventHandler(formActionPicker_SizeChanged);
			VisibleChanged += new EventHandler(formActionPicker_VisibleChanged);

			Text = "Action Picker";
			pnlActionPicker.loadXml();
		}

		void formActionPicker_VisibleChanged(object sender, EventArgs e)
		{
			if (Visible)
			{
				Size = new Size(500, 500);
				pnlActionPicker.Action_PopulateLstSelected();
			}
		}

		void formActionPicker_SizeChanged(object sender, EventArgs e)
		{
			pnlActionPicker.Location = new Point(5, 5);
			pnlActionPicker.Width = Width - 20;

			btnOk.Top
				= btnCancel.Top
				= Height - 45 - btnOk.Height;

			btnOk.Left = Width - btnOk.Width - 20;
			btnCancel.Left = btnOk.Left - btnCancel.Width - 5;

			pnlActionPicker.Height = btnOk.Top - pnlActionPicker.Top - 5;
		}

		void btnCancel_Click(object sender, EventArgs e)
		{
			ActionName = null;
			Dispose();
		}

		void btnOk_Click(object sender, EventArgs e)
		{
			ActionName = pnlActionPicker.ActionName;
			Dispose();
		}
	}

	public class PanelResourcePicker : Panel
	{
		public event EventHandler<EventArgs> ValueChanged;

		int[] intResource_SearchResults;
		public bool bolResources_IgnoreChangesToNUD = false;
		public bool bolResource_IgnoreChangesToSelectedItemlist = false;

		string strResourceName;
		public string ResourceName
		{
			get { return strResourceName; }
		}

		public void Last() { vsbResource_RecordNumber.Value = vsbResource_RecordNumber.Maximum; }
		public void First() { vsbResource_RecordNumber.Value = vsbResource_RecordNumber.Minimum; }

		public int Index
		{
			get { return vsbResource_RecordNumber.Value; }
			set
			{
				if (value >= vsbResource_RecordNumber.Minimum && value <= vsbResource_RecordNumber.Maximum)
					vsbResource_RecordNumber.Value = value;
			}
		}

		protected virtual void OnValueChange(EventArgs e)
		{
			if (ValueChanged!= null)
			{
				ValueChanged(this, e);
			}
		}

		Label lblResource_RecordNumber = new System.Windows.Forms.Label();
		Label lblResource_Search = new System.Windows.Forms.Label();
		ListBox lstResource_Search = new System.Windows.Forms.ListBox();
		ListBox lstResource_SelectedItem = new System.Windows.Forms.ListBox();
		TextBox txtResource_RecordNumber = new System.Windows.Forms.TextBox();
		TextBox txtResource_Search = new System.Windows.Forms.TextBox();
		public 	VScrollBar vsbResource_RecordNumber = new System.Windows.Forms.VScrollBar();

		public PanelResourcePicker()
		{
			Controls.Add(lstResource_SelectedItem);
			Controls.Add(vsbResource_RecordNumber);
			
			Controls.Add(lblResource_RecordNumber);
			Controls.Add(txtResource_RecordNumber);

			Controls.Add(lblResource_Search);
			Controls.Add(txtResource_Search);
			Controls.Add(lstResource_Search);

			// 
			// lblResource_RecordNumber
			// 
			lblResource_RecordNumber.AutoSize = true;
			lblResource_RecordNumber.Location = new System.Drawing.Point(275, 215);
			lblResource_RecordNumber.Name = "lblResource_RecordNumber";
			lblResource_RecordNumber.Size = new System.Drawing.Size(52, 13);
			lblResource_RecordNumber.TabIndex = 43;
			lblResource_RecordNumber.Text = "Rec Num";
			// 
			// txtResource_RecordNumber
			// 
			txtResource_RecordNumber.Location = new System.Drawing.Point(330, 215);
			txtResource_RecordNumber.Name = "txtResource_RecordNumber";
			txtResource_RecordNumber.Size = new System.Drawing.Size(100, 20);
			txtResource_RecordNumber.TabIndex = 42;
			// 
			// txtResource_Search
			// 
			txtResource_Search.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
			txtResource_Search.Location = new System.Drawing.Point(3, 20);
			txtResource_Search.Name = "txtResource_Search";
			txtResource_Search.Size = new System.Drawing.Size(257, 26);
			txtResource_Search.TabIndex = 32;
			// 
			// lblResource_Search
			// 
			lblResource_Search.AutoSize = true;
			lblResource_Search.Location = new System.Drawing.Point(3, 3);
			lblResource_Search.Name = "lblResource_Search";
			lblResource_Search.Size = new System.Drawing.Size(41, 13);
			lblResource_Search.TabIndex = 31;
			lblResource_Search.Text = "Search";
			// 
			// lstResource_Search
			// 
			lstResource_Search.FormattingEnabled = true;
			lstResource_Search.Location = new System.Drawing.Point(3, 35);
			lstResource_Search.Name = "lstResource_Search";
			lstResource_Search.Size = new System.Drawing.Size(200, 200);
			lstResource_Search.TabIndex = 33;
			// 
			// lstResource_SelectedItem
			// 
			lstResource_SelectedItem.FormattingEnabled = true;
			lstResource_SelectedItem.Location = new System.Drawing.Point(208, 35);
			lstResource_SelectedItem.Name = "lstResource_SelectedItem";
			lstResource_SelectedItem.Size = new System.Drawing.Size(200, 200);
			lstResource_SelectedItem.TabIndex = 40;
			// 
			// vsbResource_RecordNumber
			// 
			vsbResource_RecordNumber.Location = new System.Drawing.Point(412, 35);
			vsbResource_RecordNumber.Name = "vsbResource_RecordNumber";
			vsbResource_RecordNumber.Size = new System.Drawing.Size(17, 200);
			vsbResource_RecordNumber.TabIndex = 41;
			//placeObjects();

			vsbResource_RecordNumber.LargeChange = 1;
			vsbResource_RecordNumber.SmallChange = 1;
			Resource_WriteRecordNumber();
			txtResource_RecordNumber.KeyDown += new KeyEventHandler(txtResource_RecordNumber_KeyDown);
			txtResource_RecordNumber.Text = "0";

			txtResource_Search.KeyDown += new KeyEventHandler(txtResource_Search_KeyDown);
			lstResource_Search.SelectedIndexChanged += new EventHandler(lstResource_Search_SelectedIndexChanged);
			lstResource_SelectedItem.SelectedIndexChanged += new EventHandler(lstResource_SelectedItem_SelectedIndexChanged);
			lstResource_SelectedItem.MouseWheel += new MouseEventHandler(lstResource_SelectedItem_MouseWheel);
			vsbResource_RecordNumber.ValueChanged += new EventHandler(vsbResource_RecordNumber_ValueChanged);

			SizeChanged += new EventHandler(PanelResourcePicker_SizeChanged);
		}

		void txtResource_RecordNumber_KeyDown(object sender, KeyEventArgs e)
		{
			switch (e.KeyCode)
			{
				case Keys.D0:
				case Keys.D1:
				case Keys.D2:
				case Keys.D3:
				case Keys.D4:
				case Keys.D5:
				case Keys.D6:
				case Keys.D7:
				case Keys.D8:
				case Keys.D9:
				case Keys.Left:
				case Keys.Right:
				case Keys.End:
				case Keys.Home:
				case Keys.Back:
				case Keys.Delete:
					break;

				case Keys.Enter:
					OnValueChange(EventArgs.Empty);
					break;

				default:
					e.SuppressKeyPress = true;
					break;
			}
		}

		void PanelResourcePicker_SizeChanged(object sender, EventArgs e)
		{
			placeObjects();
			Resource_WriteRecordNumber();
			Resource_PopulateLstSelected();
		}

		void placeObjects()
		{
			lblResource_Search.Top = 2;
			txtResource_Search.Top = lblResource_Search.Bottom;
			lblResource_Search.Left
				= txtResource_Search.Left
				= 5;
			lstResource_Search.Width
				= lstResource_SelectedItem.Width
				= (Width -vsbResource_RecordNumber.Width - 15) / 2;

			txtResource_RecordNumber.Top = 5;
			txtResource_RecordNumber.Left = Width - txtResource_RecordNumber.Width - 5;
			Resource_PlaceLblRecordNumber();

			lstResource_Search.Top
				= lstResource_SelectedItem.Top
				= vsbResource_RecordNumber.Top
				= txtResource_Search.Bottom;

			vsbResource_RecordNumber.Left = Width - vsbResource_RecordNumber.Width - 5;
			lstResource_Search.Left = 5;
			lstResource_SelectedItem.Left = lstResource_Search.Right + 5;
			lstResource_SelectedItem.Height
				= lstResource_Search.Height
				= vsbResource_RecordNumber.Height
				= Height - lstResource_Search.Top - 5;
		}

		public void loadXml()
		{
			if (classResourceXML.xResList == null)
				classResourceXML.loadXml();

			vsbResource_RecordNumber.Maximum = classResourceXML.xResList.Count - 1;
			Resource_WriteRecordNumber();
			Resource_PopulateLstSelected();
		}

		void Resource_WriteRecordNumber()
		{
			txtResource_RecordNumber.Text = vsbResource_RecordNumber.Value.ToString();
			lblResource_RecordNumber.Text = "Rec#(" + vsbResource_RecordNumber.Maximum.ToString() + ")";
			Resource_PlaceLblRecordNumber();
		}

		void Resource_PlaceLblRecordNumber()
		{
			lblResource_RecordNumber.Left = txtResource_RecordNumber.Left - lblResource_RecordNumber.Width - 5;
			lblResource_RecordNumber.Top = txtResource_RecordNumber.Top;
		}
	
		void lstResource_SelectedItem_MouseWheel(object sender, MouseEventArgs e)
		{
			if (e.Delta > 0)
			{ // move up
				if (vsbResource_RecordNumber.Value > 112)// -> do not change the order of chemical elements
				{ // swap current with previous
					classResource cRes_Current = classResourceXML.getResource(vsbResource_RecordNumber.Value);
					classResource cRes_Prev = classResourceXML.getResource(vsbResource_RecordNumber.Value - 1);

					classResourceXML.setResource(ref cRes_Current, vsbResource_RecordNumber.Value - 1);
					classResourceXML.setResource(ref cRes_Prev, vsbResource_RecordNumber.Value);

					vsbResource_RecordNumber.Value--;
				}
			}
			else
			{ // move down
				if (vsbResource_RecordNumber.Value < classResourceXML.xResList.Count - 1 && vsbResource_RecordNumber.Value > 112)
				{ // swap current with previous
					classResource cRes_Current = classResourceXML.getResource(vsbResource_RecordNumber.Value);
					classResource cRes_Prev = classResourceXML.getResource(vsbResource_RecordNumber.Value + 1);

					classResourceXML.setResource(ref cRes_Current, vsbResource_RecordNumber.Value + 1);
					classResourceXML.setResource(ref cRes_Prev, vsbResource_RecordNumber.Value);

					vsbResource_RecordNumber.Value++;
				}
			}
		}

		void lstResource_Search_SelectedIndexChanged(object sender, EventArgs e)
		{
			if (lstResource_Search.SelectedIndex < vsbResource_RecordNumber.Maximum)
			{
				if (intResource_SearchResults[lstResource_Search.SelectedIndex] >= vsbResource_RecordNumber.Minimum 
					&& intResource_SearchResults[lstResource_Search.SelectedIndex] <= vsbResource_RecordNumber.Maximum)
				vsbResource_RecordNumber.Value = intResource_SearchResults[lstResource_Search.SelectedIndex];
			}
		}

		void txtResource_Search_KeyDown(object sender, KeyEventArgs e)
		{
			switch (e.KeyCode)
			{
				case Keys.Enter:
					e.SuppressKeyPress = true;
					SearchResourceByName();
					OnValueChange(EventArgs.Empty);
					break;
			}
		}

		void SearchResourceByName()
		{
			intResource_SearchResults = new int[0];
			string strSearchText = txtResource_Search.Text.ToUpper();
			for (int intResourceCounter = 0; intResourceCounter < classResourceXML.xResList.Count; intResourceCounter++)
			{
				if (classResourceXML.xResList[intResourceCounter].InnerText.ToUpper().Contains(strSearchText))
				{
					Array.Resize<int>(ref intResource_SearchResults, intResource_SearchResults.Length + 1);
					intResource_SearchResults[intResource_SearchResults.Length - 1] = intResourceCounter;
				}
			}
			lstResource_Search.Items.Clear();
			classResource cResTemp;
			for (int intResultCounter = 0; intResultCounter < intResource_SearchResults.Length; intResultCounter++)
			{
				cResTemp = classResourceXML.getResource(intResource_SearchResults[intResultCounter]);
				lstResource_Search.Items.Add(cResTemp.Name.Trim());
			}
		}

		void lstResource_SelectedItem_SelectedIndexChanged(object sender, EventArgs e)
		{
			if (bolResource_IgnoreChangesToSelectedItemlist)
				return;
			int intNewItemIndex = (int)(vsbResource_RecordNumber.Value - lstResource_SelectedItem.Items.Count / 2 + lstResource_SelectedItem.SelectedIndex);
			if (intNewItemIndex >= 0 && intNewItemIndex <= vsbResource_RecordNumber.Maximum)
			{
				if (intNewItemIndex >= vsbResource_RecordNumber.Minimum && intNewItemIndex <= vsbResource_RecordNumber.Maximum)
				{
					bolResource_IgnoreChangesToSelectedItemlist = true;
					vsbResource_RecordNumber.Value = intNewItemIndex;
					bolResource_IgnoreChangesToSelectedItemlist = false;
				}
			}
		}

		public void Resource_PopulateLstSelected()
		{
			if (classResourceXML.xResList == null)
				loadXml();
			int intMaxLength = (lstResource_SelectedItem.Height / (lstResource_SelectedItem.ItemHeight));
			int intHalfMaxLength = intMaxLength / 2;
			string[] strLstData = new string[intMaxLength];

			int intStartList = (int)(vsbResource_RecordNumber.Value - intHalfMaxLength);

			for (int intItemCounter = 0; intItemCounter < intMaxLength; intItemCounter++)
			{
				int intItemIndex = intStartList + intItemCounter;
				if (intItemIndex >= 0 && intItemIndex < classResourceXML.xResList.Count)
				{
					classResource  cRes = classResourceXML.getResource(intItemIndex);
					strLstData[intItemCounter] = cRes.Name.Trim(); ;
				}
				else
				{
					strLstData[intItemCounter] = "";
				}
			}
			vsbResource_RecordNumber.Maximum  = classResourceXML.xResList.Count - 1;
			bolResource_IgnoreChangesToSelectedItemlist = true;
			lstResource_SelectedItem.DataSource = strLstData;
			try
			{
				if (vsbResource_RecordNumber.Value > intStartList && vsbResource_RecordNumber.Value < intStartList + intMaxLength)
					lstResource_SelectedItem.SelectedIndex = (int)(vsbResource_RecordNumber.Value - intStartList);
			}
			catch (Exception) { }
			bolResource_IgnoreChangesToSelectedItemlist = false;
		}

		void vsbResource_RecordNumber_ValueChanged(object sender, EventArgs e)
		{
			if (bolResources_IgnoreChangesToNUD) return;
			OnValueChange(EventArgs.Empty);

			classResource cResource = classResourceXML.getResource(vsbResource_RecordNumber.Value);
			strResourceName = cResource.Name;
			Resource_WriteRecordNumber();
			Resource_PopulateLstSelected();
		}

		void BuildObjects()
		{
			
		}
	}

	public class PanelActionPicker : Panel
	{
		public event EventHandler<EventArgs> ValueChanged;

		int[] intAction_SearchResults;
		public bool bolActions_IgnoreChangesToNUD = false;
		public bool bolAction_IgnoreChangesToSelectedItemlist = false;


		string _ActionName;
		public string ActionName
		{
			get { return _ActionName; }
		}

		string ActName
		{
			get { return _ActionName; }
			set
			{
				_ActionName = value;
				OnValueChange(EventArgs.Empty);
			}
		}

		public void Last() { vsbAction_RecordNumber.Value = vsbAction_RecordNumber.Maximum; }
		public void First() { vsbAction_RecordNumber.Value = vsbAction_RecordNumber.Minimum; }
		public int Index
		{
			get { return vsbAction_RecordNumber.Value; }
			set
			{
				if (value >= vsbAction_RecordNumber.Minimum && value <= vsbAction_RecordNumber.Maximum)
				{
					vsbAction_RecordNumber.Value = value;
					ActName= lstAction_SelectedItem.Text;
				}
			}
		}

		protected virtual void OnValueChange(EventArgs e)
		{
			if (ValueChanged != null)
			{
				ValueChanged(this, e);
			}
		}

		Label lblAction_RecordNumber = new System.Windows.Forms.Label();
		Label lblAction_Search = new System.Windows.Forms.Label();
		ListBox lstAction_Search = new System.Windows.Forms.ListBox();
		ListBox lstAction_SelectedItem = new System.Windows.Forms.ListBox();
		TextBox txtAction_RecordNumber = new System.Windows.Forms.TextBox();
		TextBox txtAction_Search = new System.Windows.Forms.TextBox();
		VScrollBar vsbAction_RecordNumber = new System.Windows.Forms.VScrollBar();

		public PanelActionPicker()
		{
			Controls.Add(lstAction_SelectedItem);
			Controls.Add(vsbAction_RecordNumber);

			Controls.Add(lblAction_RecordNumber);
			Controls.Add(txtAction_RecordNumber);

			Controls.Add(lblAction_Search);
			Controls.Add(txtAction_Search);
			Controls.Add(lstAction_Search);
			// 
			// lblAction_RecordNumber
			// 
			lblAction_RecordNumber.AutoSize = true;
			lblAction_RecordNumber.Location = new System.Drawing.Point(275, 215);
			lblAction_RecordNumber.Name = "lblAction_RecordNumber";
			lblAction_RecordNumber.Size = new System.Drawing.Size(52, 13);
			lblAction_RecordNumber.TabIndex = 43;
			lblAction_RecordNumber.Text = "Rec Num";
			// 
			// txtAction_RecordNumber
			// 
			txtAction_RecordNumber.Location = new System.Drawing.Point(330, 215);
			txtAction_RecordNumber.Name = "txtAction_RecordNumber";
			txtAction_RecordNumber.Size = new System.Drawing.Size(100, 20);
			txtAction_RecordNumber.TabIndex = 42;
			// 
			// txtAction_Search
			// 
			txtAction_Search.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
			txtAction_Search.Location = new System.Drawing.Point(3, 20);
			txtAction_Search.Name = "txtAction_Search";
			txtAction_Search.Size = new System.Drawing.Size(257, 26);
			txtAction_Search.TabIndex = 32;
			// 
			// lblAction_Search
			// 
			lblAction_Search.AutoSize = true;
			lblAction_Search.Location = new System.Drawing.Point(3, 3);
			lblAction_Search.Name = "lblAction_Search";
			lblAction_Search.Size = new System.Drawing.Size(41, 13);
			lblAction_Search.TabIndex = 31;
			lblAction_Search.Text = "Search";
			// 
			// lstAction_Search
			// 
			lstAction_Search.FormattingEnabled = true;
			lstAction_Search.Location = new System.Drawing.Point(3, 35);
			lstAction_Search.Name = "lstAction_Search";
			lstAction_Search.Size = new System.Drawing.Size(200, 200);
			lstAction_Search.TabIndex = 33;
			// 
			// lstAction_SelectedItem
			// 
			lstAction_SelectedItem.FormattingEnabled = true;
			lstAction_SelectedItem.Location = new System.Drawing.Point(208, 35);
			lstAction_SelectedItem.Name = "lstAction_SelectedItem";
			lstAction_SelectedItem.Size = new System.Drawing.Size(200, 200);
			lstAction_SelectedItem.TabIndex = 40;
			// 
			// vsbAction_RecordNumber
			// 
			vsbAction_RecordNumber.Location = new System.Drawing.Point(412, 35);
			vsbAction_RecordNumber.Name = "vsbAction_RecordNumber";
			vsbAction_RecordNumber.Size = new System.Drawing.Size(17, 200);
			vsbAction_RecordNumber.TabIndex = 41;
			placeObjects();

			vsbAction_RecordNumber.LargeChange = 1;
			vsbAction_RecordNumber.SmallChange = 1;
			Action_WriteRecordNumber();
			txtAction_RecordNumber.KeyDown += new KeyEventHandler(txtAction_Keydown);
			txtAction_RecordNumber.Text = "0";

			if (classActionXML.xActionList != null)
			{
				classAction cActionDefault = classActionXML.getAction(0);
				ActName = cActionDefault.Name;
			}

			txtAction_Search.KeyDown += new KeyEventHandler(txtAction_Search_KeyDown);
			lstAction_Search.SelectedIndexChanged += new EventHandler(lstAction_Search_SelectedIndexChanged);
			lstAction_SelectedItem.SelectedIndexChanged += new EventHandler(lstAction_SelectedItem_SelectedIndexChanged);
			lstAction_SelectedItem.MouseWheel += new MouseEventHandler(lstAction_SelectedItem_MouseWheel);
			lstAction_SelectedItem.MouseClick += new MouseEventHandler(lstAction_SelectedItem_MouseClick);
			vsbAction_RecordNumber.ValueChanged += new EventHandler(vsbAction_RecordNumber_ValueChanged);
			
			SizeChanged += new EventHandler(PanelActionPicker_SizeChanged);
		}

		void lstAction_SelectedItem_MouseClick(object sender, MouseEventArgs e)
		{
			switch (e.Button)
			{
				case System.Windows.Forms.MouseButtons.Left:
					string strAction = lstAction_SelectedItem.Text;
					int intActionIndex = classActionXML.getActionIndexByName(strAction);
					if (intActionIndex >= 0)
					{
						vsbAction_RecordNumber.Value = intActionIndex;
						classAction cAction = classActionXML.getAction(vsbAction_RecordNumber.Value);
						ActName = cAction.Name;
						OnValueChange(EventArgs.Empty);
					}
					break;
			}
		}

		void PanelActionPicker_SizeChanged(object sender, EventArgs e)
		{
			placeObjects();
		}

		void placeObjects()
		{
			lblAction_Search.Top = 2;
			txtAction_Search.Top = lblAction_Search.Bottom;
			lblAction_Search.Left
				= txtAction_Search.Left
				= 5;
			lstAction_Search.Width
				= lstAction_SelectedItem.Width
				= (Width - vsbAction_RecordNumber.Width - 15) / 2;

			txtAction_RecordNumber.Top = 5;
			txtAction_RecordNumber.Left = Width - txtAction_RecordNumber.Width - 5;
			Action_PlaceLblRecordNumber();

			lstAction_Search.Top
				= lstAction_SelectedItem.Top
				= vsbAction_RecordNumber.Top
				= txtAction_Search.Bottom;

			vsbAction_RecordNumber.Left = Width - vsbAction_RecordNumber.Width - 5;
			lstAction_Search.Left = 5;
			lstAction_SelectedItem.Left = lstAction_Search.Right + 5;
			lstAction_SelectedItem.Height
				= lstAction_Search.Height
				= vsbAction_RecordNumber.Height
				= Height - lstAction_Search.Top - 5;

		}

		public void loadXml()
		{
			if (classActionXML.xActionList == null)
				classActionXML.loadXml();
			classAction.loadActions();
			vsbAction_RecordNumber.Maximum = classActionXML.xActionList.Count - 1;
			Action_WriteRecordNumber();
			Action_PopulateLstSelected();
		}

		void Action_WriteRecordNumber()
		{
			txtAction_RecordNumber.Text = vsbAction_RecordNumber.Value.ToString();
			lblAction_RecordNumber.Text = "Rec#(" + vsbAction_RecordNumber.Maximum.ToString() + ")";
			Action_PlaceLblRecordNumber();
		}

		void Action_PlaceLblRecordNumber()
		{
			lblAction_RecordNumber.Left = txtAction_RecordNumber.Left - lblAction_RecordNumber.Width - 5;
			lblAction_RecordNumber.Top = txtAction_RecordNumber.Top;
		}
		void txtAction_Keydown(object sender, KeyEventArgs e)
		{
			switch (e.KeyCode)
			{
				case Keys.D0:
				case Keys.D1:
				case Keys.D2:
				case Keys.D3:
				case Keys.D4:
				case Keys.D5:
				case Keys.D6:
				case Keys.D7:
				case Keys.D8:
				case Keys.D9:
				case Keys.Back:
				case Keys.Delete:
				case Keys.Left:
				case Keys.Right:
				case Keys.Home:
				case Keys.ShiftKey:
				case Keys.End:
				case Keys.Decimal:
					return;

				case Keys.Enter:
					try
					{
						int intIndex = Convert.ToInt16(txtAction_RecordNumber.Text);
						if (intIndex >= 0 && intIndex < classActionXML.xActionList.Count)
						{
							if (intIndex >= vsbAction_RecordNumber.Minimum && intIndex <= vsbAction_RecordNumber.Maximum)
							{
								vsbAction_RecordNumber.Value = intIndex;
							}
						}
					}
					catch (Exception)
					{
					}
					OnValueChange(EventArgs.Empty);
					break;

				case Keys.Up:
					if (vsbAction_RecordNumber.Value < vsbAction_RecordNumber.Maximum)
						vsbAction_RecordNumber.Value++;
					break;

				case Keys.Down:
					if (vsbAction_RecordNumber.Value > 0)
						vsbAction_RecordNumber.Value--;
					break;

				default:
					break;
			}
			e.SuppressKeyPress = true;
		}

		void lstAction_SelectedItem_MouseWheel(object sender, MouseEventArgs e)
		{
			if (e.Delta > 0)
			{ // move up
				if (vsbAction_RecordNumber.Value >0 )
				{ // swap current with previous
					classAction cRes_Current = classActionXML.getAction(vsbAction_RecordNumber.Value);
					classAction cRes_Prev = classActionXML.getAction(vsbAction_RecordNumber.Value - 1);

					classActionXML.setAction(ref cRes_Current, vsbAction_RecordNumber.Value - 1);
					classActionXML.setAction(ref cRes_Prev, vsbAction_RecordNumber.Value);

					vsbAction_RecordNumber.Value--;
				}
			}
			else
			{ // move down
				if (vsbAction_RecordNumber.Value < classActionXML.xActionList.Count - 1)
				{ // swap current with previous
					classAction cRes_Current = classActionXML.getAction(vsbAction_RecordNumber.Value);
					classAction cRes_Prev = classActionXML.getAction(vsbAction_RecordNumber.Value + 1);

					classActionXML.setAction(ref cRes_Current, vsbAction_RecordNumber.Value + 1);
					classActionXML.setAction(ref cRes_Prev, vsbAction_RecordNumber.Value);

					vsbAction_RecordNumber.Value++;
				}
			}
		}

		void lstAction_Search_SelectedIndexChanged(object sender, EventArgs e)
		{
			if (lstAction_Search.SelectedIndex < vsbAction_RecordNumber.Maximum)
			{
				if (intAction_SearchResults[lstAction_Search.SelectedIndex] >= vsbAction_RecordNumber.Minimum && intAction_SearchResults[lstAction_Search.SelectedIndex] <= vsbAction_RecordNumber.Maximum)
				{
					vsbAction_RecordNumber.Value = intAction_SearchResults[lstAction_Search.SelectedIndex];
				}
			}
		}

		void txtAction_Search_KeyDown(object sender, KeyEventArgs e)
		{
			switch (e.KeyCode)
			{
				case Keys.Enter:
					e.SuppressKeyPress = true;
					SearchActionByName();
					OnValueChange(EventArgs.Empty);
					break;
			}
		}

		void SearchActionByName()
		{
			intAction_SearchResults = new int[0];
			string strSearchText = txtAction_Search.Text.ToUpper();
			for (int intActionCounter = 0; intActionCounter < classActionXML.xActionList.Count; intActionCounter++)
			{
				if (classActionXML.xActionList[intActionCounter].InnerText.ToUpper().Contains(strSearchText))
				{
					Array.Resize<int>(ref intAction_SearchResults, intAction_SearchResults.Length + 1);
					intAction_SearchResults[intAction_SearchResults.Length - 1] = intActionCounter;
				}
			}
			lstAction_Search.Items.Clear();
			classAction cResTemp;
			for (int intResultCounter = 0; intResultCounter < intAction_SearchResults.Length; intResultCounter++)
			{
				cResTemp = classActionXML.getAction(intAction_SearchResults[intResultCounter]);
				lstAction_Search.Items.Add(cResTemp.Name.Trim());
			}
		}

		void lstAction_SelectedItem_SelectedIndexChanged(object sender, EventArgs e)
		{
			if (bolAction_IgnoreChangesToSelectedItemlist)
				return;
			int intNewItemIndex = (int)(vsbAction_RecordNumber.Value - lstAction_SelectedItem.Items.Count / 2 + lstAction_SelectedItem.SelectedIndex);
			if (intNewItemIndex >= vsbAction_RecordNumber.Minimum && intNewItemIndex <= vsbAction_RecordNumber.Maximum)
			{
				//bolAction_IgnoreChangesToSelectedItemlist = true;
				vsbAction_RecordNumber.Value = intNewItemIndex;
				//bolAction_IgnoreChangesToSelectedItemlist = false;
			}
		}

		public void Action_PopulateLstSelected()
		{
			int intMaxLength = (lstAction_SelectedItem.Height / (lstAction_SelectedItem.ItemHeight));
			int intHalfMaxLength = intMaxLength / 2;
			string[] strLstData = new string[intMaxLength];

			int intStartList = (int)(vsbAction_RecordNumber.Value - intHalfMaxLength);

			for (int intItemCounter = 0; intItemCounter < intMaxLength; intItemCounter++)
			{
				int intItemIndex = intStartList + intItemCounter;
				if (intItemIndex >= 0 && intItemIndex < classActionXML.xActionList.Count)
				{
					classAction cAct = classActionXML.getAction(intItemIndex);
					strLstData[intItemCounter] 
						= cAct.Name.Trim();
				}
				else
				{
					strLstData[intItemCounter] = "";
				}
			}
			vsbAction_RecordNumber.Maximum = classActionXML.xActionList.Count - 1;
			bolAction_IgnoreChangesToSelectedItemlist = true;
			lstAction_SelectedItem.DataSource = strLstData;
			if (vsbAction_RecordNumber.Value > intStartList && vsbAction_RecordNumber.Value < intStartList + intMaxLength)
				lstAction_SelectedItem.SelectedIndex = (int)(vsbAction_RecordNumber.Value - intStartList);

			bolAction_IgnoreChangesToSelectedItemlist = false;
		}

		void vsbAction_RecordNumber_ValueChanged(object sender, EventArgs e)
		{
			if (bolActions_IgnoreChangesToNUD) return;
			Action_WriteRecordNumber();
			Action_PopulateLstSelected();
					
		}

		void BuildObjects()
		{

		}
	}

	public class panelActionRequirements  : Panel 
	{
		public event EventHandler<EventArgs> ValueChanged;

		Label lblLocation = new Label();
		public ComboBox cmbLocation = new ComboBox();

		Label lblProficiencyType = new Label();
		public ComboBox cmbProficiencyType = new ComboBox();

		Label lblProficiencyLevel = new Label();
		public TextBox_Numeric ntxtProficiencyLevel = new TextBox_Numeric();

		Label lblPublishingCriteria = new Label();
		public ComboBox cmbPublishingCriteria = new ComboBox();

		public LabelButton lbtnPerformedSolo = new LabelButton();
		public LabelButton lbtnAutomatedSelection = new LabelButton();
		public LabelButton lbtnHidden = new LabelButton();
		public LabelButton lbtnDoesNotRequireAstronautAttention = new LabelButton();

		public Label lblDescription = new Label();
		public TextBox txtDescription = new TextBox();

		Label lblLoopAction = new Label();
		public labelAction lbtaLoopAction = new labelAction();

		Label lblHoursOfLabour = new Label();
		public TextBox_Numeric ntxtHoursOfLabour = new TextBox_Numeric();

		public panelActionRequirements()
		{
			Controls.Add(lblLocation); lblLocation.Text = "Location";
			Controls.Add(cmbLocation);

			Controls.Add(lblProficiencyType); lblProficiencyType.Text = "Proficiency Type";
			Controls.Add(cmbProficiencyType);

			Controls.Add(lblProficiencyLevel); lblProficiencyLevel.Text = "Proficiency Level";
			Controls.Add(ntxtProficiencyLevel);

			Controls.Add(lblPublishingCriteria); lblPublishingCriteria.Text = "Publish Criteria";
			Controls.Add(cmbPublishingCriteria);

			Controls.Add(lbtnPerformedSolo); lbtnPerformedSolo.Text = "Performed Solo";
			Controls.Add(lbtnAutomatedSelection); lbtnAutomatedSelection.Text = "Automated Selection";
			Controls.Add(lbtnHidden); lbtnHidden.Text = "Hidden";
			Controls.Add(lbtnDoesNotRequireAstronautAttention); lbtnDoesNotRequireAstronautAttention.Text = "Does Not Require Astronaut Attention";
			Controls.Add(lblHoursOfLabour); lblHoursOfLabour.Text = "Hours of Labour";
			Controls.Add(ntxtHoursOfLabour);

			Controls.Add(lblDescription); lblDescription.Text = "Description"; lblDescription.AutoSize = true;
			Controls.Add(txtDescription);

			Controls.Add(lblLoopAction); lblLoopAction.Text = "Loop Action"; lblLoopAction.AutoSize = true;
			Controls.Add(lbtaLoopAction); lbtaLoopAction.Text = "null";
			lbtaLoopAction.ClickTogglesFlag = false;
			Height = lblProficiencyType.Height
						+ cmbProficiencyType.Height
						+ lbtnPerformedSolo.Height
						+ 20;

			for (enuAstronautProficiencies eProficiencyCounter = (enuAstronautProficiencies)0; eProficiencyCounter < (enuAstronautProficiencies)4; eProficiencyCounter++)
				cmbProficiencyType.Items.Add(eProficiencyCounter.ToString());
			cmbProficiencyType.Text = cmbProficiencyType.Items[0].ToString();

			for (enuLocation eLocationCounter = (enuLocation)0; eLocationCounter < enuLocation._numLocations; eLocationCounter++)
				cmbLocation.Items.Add(eLocationCounter.ToString());
			cmbLocation.Text = cmbLocation.Items[0].ToString();

			for (enuActionsPublishCriteria ePublishCriteria = (enuActionsPublishCriteria)0; ePublishCriteria < (enuActionsPublishCriteria)3; ePublishCriteria++)
				cmbPublishingCriteria.Items.Add(ePublishCriteria.ToString());
			cmbPublishingCriteria.Text = cmbPublishingCriteria.Items[0].ToString();

			txtDescription.Multiline = true;
			txtDescription.Size = new System.Drawing.Size(400, 50);
			txtDescription.BringToFront();
			lblDescription.BringToFront();
			txtDescription.Visible = false;

			cmbLocation.SelectedIndexChanged += new EventHandler(cmbLocation_SelectedIndexChanged);
			cmbProficiencyType.SelectedIndexChanged += new EventHandler(cmbProficiencyType_SelectedIndexChanged);
			ntxtProficiencyLevel.EnterValue += new EventHandler<EventArgs>(ntxtProficiencyLevel_EnterValue);
			lbtnPerformedSolo.AfterClick += new EventHandler<EventArgs>(lbtnPerformedSolo_AfterClick);
			lbtnAutomatedSelection.AfterClick += new EventHandler<EventArgs>(lbtnAutomatedSelection_AfterClick);
			lbtnHidden.AfterClick += new EventHandler<EventArgs>(lbtnHidden_AfterClick);
			lbtnDoesNotRequireAstronautAttention.AfterClick += new EventHandler<EventArgs>(lbtnDoesNotRequireAstronautAttention_AfterClick);
			cmbPublishingCriteria.SelectedIndexChanged += new EventHandler(cmbPublishingCriteria_SelectedIndexChanged);
			lblDescription.MouseEnter += new EventHandler(lblDescription_MouseEnter);
			txtDescription.MouseLeave += new EventHandler(txtDescription_MouseLeave);

			ntxtHoursOfLabour.EnterValue += new EventHandler<EventArgs>(ntxtHoursOfLabour_EnterValue);
			lbtaLoopAction.AfterClick += new EventHandler<EventArgs>(lbtaLoopAction_AfterClick);
			lbtaLoopAction.SizeChanged += new EventHandler(lbtaLoopAction_SizeChanged);

			SizeChanged += new EventHandler(panelActionRequirements_SizeChanged);
		}

		void cmbPublishingCriteria_SelectedIndexChanged(object sender, EventArgs e)
		{
			OnValueChange(EventArgs.Empty);
		}

		void txtDescription_MouseLeave(object sender, EventArgs e)
		{
			txtDescription.Visible = false;
			OnValueChange(EventArgs.Empty);
		}

		void lblDescription_MouseEnter(object sender, EventArgs e)
		{
			txtDescription.Visible = true;
			if (txtDescription.Right > Width - 40)
				txtDescription.Left = Width - txtDescription.Width - 40;
			Rectangle recBouonds = RectangleToScreen(txtDescription.Bounds);
			MouseKeyboardLibrary.MouseSimulator.Position = new Point(recBouonds.Left + 15, recBouonds.Top + 15);
			txtDescription.BringToFront();
			txtDescription.SelectionLength = 0;
			txtDescription.SelectionStart = 0;
			txtDescription.Focus();
		}

		void lbtnAutomatedSelection_AfterClick(object sender, EventArgs e) { OnValueChange(EventArgs.Empty); }
		void lbtnPerformedSolo_AfterClick(object sender, EventArgs e) { OnValueChange(EventArgs.Empty); }
		void lbtnHidden_AfterClick(object sender, EventArgs e) { OnValueChange(EventArgs.Empty); }
		void cmbProficiencyType_SelectedIndexChanged(object sender, EventArgs e) { OnValueChange(EventArgs.Empty); }
		void cmbLocation_SelectedIndexChanged(object sender, EventArgs e) { OnValueChange(EventArgs.Empty); }
		void ntxtHoursOfLabour_EnterValue(object sender, EventArgs e) { OnValueChange(EventArgs.Empty); }
		void ntxtProficiencyLevel_EnterValue(object sender, EventArgs e) { OnValueChange(EventArgs.Empty); }
		void lbtnDoesNotRequireAstronautAttention_AfterClick(object sender, EventArgs e) { OnValueChange(EventArgs.Empty); }
		void lbtnPublishCompletedReport_AfterClick(object sender, EventArgs e) { OnValueChange(EventArgs.Empty); }
		void lbtaLoopAction_AfterClick(object sender, EventArgs e) { OnValueChange(EventArgs.Empty); }

		void lbtaLoopAction_SizeChanged(object sender, EventArgs e)
		{
			placeLabelButtons();
		}

		void placeLabelButtons()
		{
			lbtnPerformedSolo.Left = lbtaLoopAction.Right + 5;
			lbtnPerformedSolo.Top = lbtaLoopAction.Top;

			lbtnAutomatedSelection.Left = lbtnPerformedSolo.Right + 5;
			lbtnAutomatedSelection.Top = lbtnPerformedSolo.Top;

			lbtnHidden.Left = lbtnAutomatedSelection.Right + 5;
			lbtnHidden.Top = lbtnPerformedSolo.Top;

			lbtnDoesNotRequireAstronautAttention.Left = lbtnHidden.Right + 5;
			lbtnDoesNotRequireAstronautAttention.Top = lbtnPerformedSolo.Top;
		}

		void txtHoursOfLabour_KeyDown(object sender, KeyEventArgs e)
		{
			switch (e.KeyCode)
			{
				case Keys.D0:
				case Keys.D1:
				case Keys.D2:
				case Keys.D3:
				case Keys.D4:
				case Keys.D5:
				case Keys.D6:
				case Keys.D7:
				case Keys.D8:
				case Keys.D9:
				case Keys.Left:
				case Keys.Right:
				case Keys.End:
				case Keys.Home:
				case Keys.Back:
				case Keys.Delete:
				case Keys.Decimal:
				case Keys.OemPeriod:
					break;

				case Keys.Enter:
					OnValueChange(EventArgs.Empty);
					break;

				default:
					e.SuppressKeyPress = true;
					break;
			}
		}
	
		protected virtual void OnValueChange(EventArgs e)
		{
			if (ValueChanged != null)
				ValueChanged(this, e);
		}

		public classActionRequirements Requirements
		{
			get
			{
				classActionRequirements cRetVal = new classActionRequirements();

				cRetVal.bolPerformedSolo = lbtnPerformedSolo.Flag;
				cRetVal.bolAutomatedSelection = lbtnAutomatedSelection.Flag;
				cRetVal.bolHidden = lbtnHidden.Flag;
				cRetVal.bolDoesNotNeedAstronautAttention = lbtnDoesNotRequireAstronautAttention.Flag;
				//cRetVal.bolPublishCompletedReport = lbtnPublishCompletedReport.Flag;
				cRetVal.ePublishCriteria = (enuActionsPublishCriteria)cmbPublishingCriteria.SelectedIndex;
				
				cRetVal.cProficiency = new classActionRequirement_Proficiency();
				cRetVal.cProficiency.eProficiency = (enuAstronautProficiencies)cmbProficiencyType.SelectedIndex;
				cRetVal.cProficiency.Level = (int)ntxtProficiencyLevel.Value;

				cRetVal.dblHoursOfLabour = ntxtHoursOfLabour.Value;
				cRetVal.eLoc = (enuLocation)Convert.ToInt16(cmbLocation.SelectedIndex);
				cRetVal.strLoopActionName = lbtaLoopAction.ActionName;
				cRetVal.eLoopAction = classAction.getActionFromString(cRetVal.strLoopActionName);
				cRetVal.strDescription = txtDescription.Text;

				return cRetVal;
			}
		}

		public void load(ref classActionRequirements cActionRequirements)
		{
			cmbLocation.SelectedIndex = (int)cActionRequirements.eLoc;
			
			cmbProficiencyType.SelectedIndex = (int)cActionRequirements.cProficiency.eProficiency;
			ntxtProficiencyLevel.Value = cActionRequirements.cProficiency.Level;

			ntxtHoursOfLabour.Value = cActionRequirements.dblHoursOfLabour;
			lbtaLoopAction.ActionName = cActionRequirements.strLoopActionName;

			lbtnPerformedSolo.Flag = cActionRequirements.bolPerformedSolo;
			lbtnAutomatedSelection.Flag = cActionRequirements.bolAutomatedSelection;
			lbtnHidden.Flag = cActionRequirements.bolHidden;
			lbtnDoesNotRequireAstronautAttention.Flag = cActionRequirements.bolDoesNotNeedAstronautAttention;
			//lbtnPublishCompletedReport.Flag = cActionRequirements.bolPublishCompletedReport;
			cmbPublishingCriteria.SelectedIndex = (int)cActionRequirements.ePublishCriteria;
			txtDescription.Text = cActionRequirements.strDescription;
		}

		void panelActionRequirements_SizeChanged(object sender, EventArgs e)
		{
			lblProficiencyType.Top
				= lblProficiencyLevel.Top
				= lblHoursOfLabour.Top
				= lblLocation.Top
				= 2;

			cmbProficiencyType.Top
				= ntxtHoursOfLabour.Top
				= ntxtProficiencyLevel.Top
				= cmbLocation.Top
				= lblProficiencyType.Bottom;

			lblProficiencyType.Left
				= cmbProficiencyType.Left
				= lblLoopAction.Left
				= 5;

			lblProficiencyLevel.Left
				= ntxtProficiencyLevel.Left
				= cmbProficiencyType.Right + 5;

			lblHoursOfLabour.Left
				= ntxtHoursOfLabour.Left
				= ntxtProficiencyLevel.Right + 5;

			lblLocation.Left
				= cmbLocation.Left
				= ntxtHoursOfLabour.Right + 5;

			lbtaLoopAction.Left = lblLoopAction.Right;

			lblLoopAction.Top
				= lbtaLoopAction.Top
				= cmbProficiencyType.Bottom + 5;

			lblPublishingCriteria.Top = lblLocation.Top;
			lblPublishingCriteria.Left = cmbLocation.Right + 5;
			cmbPublishingCriteria.Top = cmbLocation.Top;
			cmbPublishingCriteria.Left = cmbLocation.Right + 5;

			lblDescription.Top = lblLocation.Top;
			lblDescription.Left = Width - lblDescription.Width - 40;
			txtDescription.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

			txtDescription.Location = new Point(lblDescription.Left - 5, lblDescription.Bottom + 5);
			if (txtDescription.Right > Width-5)
				txtDescription.Left = Width - txtDescription.Width - 5;

			placeLabelButtons();
		}
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
CEO unemployable
Canada Canada
Christ Kennedy grew up in the suburbs of Montreal and is a bilingual Quebecois with a bachelor’s degree in computer engineering from McGill University. He is unemployable and currently living in Moncton, N.B. writing his next novel.

Comments and Discussions