private void SurfSetMenu_SelectedIndexChanged(object sender, EventArgs e)
        {
            UpdateCurSurfSetFromUI();

            currSurfSet = SurfSetMenu.SelectedItem as SurfaceSetRecord;

            ShowSurfaceSet(currSurfSet);
        }
        // Copy surface set parameters from the UI to the current surface set
        private void UpdateSurfaceSetFromUI(SurfaceSetRecord surfSet)
        {
            // we're not going to do range checking when harvesting edited values
            // because we did it when we were configuring the editor
            int numSlots = surfSet.SurfaceNames.Count;

            if (slot1Pick.Enabled)
            {
                surfSet.SurfaceNames[0] = slot1Pick.SelectedItem as string;
            }

            if (slot2Pick.Enabled)
            {
                surfSet.SurfaceNames[1] = slot2Pick.SelectedItem as string;
            }

            if (slot3Pick.Enabled)
            {
                surfSet.SurfaceNames[2] = slot3Pick.SelectedItem as string;
            }

            if (slot4Pick.Enabled)
            {
                surfSet.SurfaceNames[3] = slot4Pick.SelectedItem as string;
            }

            if (slot5Pick.Enabled)
            {
                surfSet.SurfaceNames[4] = slot5Pick.SelectedItem as string;
            }

            if (slot6Pick.Enabled)
            {
                surfSet.SurfaceNames[5] = slot6Pick.SelectedItem as string;
            }

            if (slot7Pick.Enabled)
            {
                surfSet.SurfaceNames[6] = slot7Pick.SelectedItem as string;
            }

            if (slot8Pick.Enabled)
            {
                surfSet.SurfaceNames[7] = slot8Pick.SelectedItem as string;
            }


            surfSet.BumpPath = BumpFld.Text;
            surfSet.DirtPath = DirtFld.Text;
        }
        public void Initialize(string filePath, SurfaceDict surfaces)
        {
            fileName  = filePath;
            surfDict  = surfaces;
            this.Text = System.IO.Path.GetFileNameWithoutExtension(fileName);

            xmlDoc = new XmlDocument();
            xmlDoc.Load(fileName);
            // note on persistence: the surface sets are in subnodes of the root xml document
            // each surface set record will hold pointers to these subnodes
            // when we save, we copy date back to the subnodes and then write the whole doc
            // back to the file.
            foreach (XmlNode node in xmlDoc.ChildNodes)
            {
                // look for the actor - should be one per file
                if (node.Name == "XmlGameActor")
                {
                    foreach (XmlNode actorNode in node.ChildNodes)
                    {
                        // now get the surface sets - could be a couple
                        if (actorNode.Name == "SurfaceSets")
                        {
                            foreach (XmlNode surfSetNode in actorNode.ChildNodes)
                            {
                                if (surfSetNode.Name == "SurfaceSet")
                                {
                                    SurfaceSetRecord surfSetRec = new SurfaceSetRecord(surfSetNode);
                                    surfaceSets.Add(surfSetRec);
                                    SurfSetMenu.Items.Add(surfSetRec);
                                }
                            }
                        }
                    }
                }
            }

            Dirty = false;

            BuildSurfacePickers(surfaces);
            SurfSetMenu.SelectedIndex = 0;
        }
        // When we load up a surface set, we want to put the right values
        // into the slot pickers.
        // Any slot pickers above the used number will be disabled.
        private void ShowSurfaceSet(SurfaceSetRecord surfSet)
        {
            int numSlots = surfSet.SurfaceNames.Count;

            if (slot1Pick.Enabled = (numSlots > 0))
            {
                slot1Pick.SelectedItem = surfSet.SurfaceNames[0];
            }
            else
            {
                slot1Pick.SelectedItem = null;
            }

            if (slot2Pick.Enabled = (numSlots > 1))
            {
                slot2Pick.SelectedItem = surfSet.SurfaceNames[1];
            }
            else
            {
                slot2Pick.SelectedItem = null;
            }

            if (slot3Pick.Enabled = (numSlots > 2))
            {
                slot3Pick.SelectedItem = surfSet.SurfaceNames[2];
            }
            else
            {
                slot3Pick.SelectedItem = null;
            }

            if (slot4Pick.Enabled = (numSlots > 3))
            {
                slot4Pick.SelectedItem = surfSet.SurfaceNames[3];
            }
            else
            {
                slot4Pick.SelectedItem = null;
            }

            if (slot5Pick.Enabled = (numSlots > 4))
            {
                slot5Pick.SelectedItem = surfSet.SurfaceNames[4];
            }
            else
            {
                slot5Pick.SelectedItem = null;
            }

            if (slot6Pick.Enabled = (numSlots > 5))
            {
                slot6Pick.SelectedItem = surfSet.SurfaceNames[5];
            }
            else
            {
                slot6Pick.SelectedItem = null;
            }

            if (slot7Pick.Enabled = (numSlots > 6))
            {
                slot7Pick.SelectedItem = surfSet.SurfaceNames[6];
            }
            else
            {
                slot7Pick.SelectedItem = null;
            }

            if (slot8Pick.Enabled = (numSlots > 7))
            {
                slot8Pick.SelectedItem = surfSet.SurfaceNames[7];
            }
            else
            {
                slot8Pick.SelectedItem = null;
            }

            BumpFld.Text = surfSet.BumpPath;
            DirtFld.Text = surfSet.DirtPath;
        }