UpdateSelectionList() 공개 메소드

public UpdateSelectionList ( bool readAll ) : void
readAll bool
리턴 void
예제 #1
0
        /// <summary>
        /// Creates one control of the selected type for each chunk in the reflexive.
        /// Idents will have the tag types filled in & tag names will be auto filled when
        /// the tag type is selected.
        /// String IDs will have the strings list populated here.
        /// </summary>
        private void GenerateFields(int progressBarStart, int progressBarEnd)
        {
            this.SuspendLayout();
            this.progressBar1.Value = progressBarStart;
            try
            {
                pnlAutoFill.Visible = false;
                ToolTip t = new ToolTip();
                this.pnlFieldControls.Controls.Clear();
                this.Size = new Size(400, 500);
                pnlFieldControls.AutoScroll = true;
                //pnlFieldControls.AutoScrollMargin = new Size(20, pnlFieldControls.Height);
                pnlFieldControls.AutoScrollMinSize = new Size(20, pnlFieldControls.Height);

                int StartChunk = int.Parse(cbStartChunk.Text);
                int EndChunk   = int.Parse(cbEndChunk.Text);

                StartOffset = RD.baseOffset + FieldControl.chunkOffset - (RD.chunkSelected * RD.reflexive.chunkSize);
                switch (FieldControl.GetType().ToString())
                {
                case "entity.MetaEditor2.DataValues":
                    try
                    {
                        Control c = FieldControl.Controls[1];
                        for (int x = StartChunk; x <= EndChunk; x++)
                        {
                            // Update progress bar
                            this.progressBar1.Value = (x - StartChunk) * (progressBarEnd - progressBarStart) / Math.Max(1, (EndChunk - StartChunk));
                            this.progressBar1.Refresh();

                            Control Casing = new Control();
                            Casing.Dock    = DockStyle.Top;
                            Casing.Padding = new Padding(4);
                            Casing.Size    = new Size(this.Width, 31);
                            Label LBL = new Label();
                            LBL.Dock      = DockStyle.Left;
                            LBL.Location  = new Point(10, 4);
                            LBL.Size      = new Size(140, 23);
                            LBL.Text      = FieldControl.EntName + " #" + x.ToString();
                            LBL.TextAlign = ContentAlignment.MiddleLeft;
                            TextBox TB = new TextBox();
                            TB.Anchor       = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
                            TB.Location     = new Point(150, 5);
                            TB.Height       = c.Height;
                            TB.Width        = c.Width;
                            TB.Tag          = StartOffset + x * RD.reflexive.chunkSize;
                            TB.Leave       += new EventHandler(Field_Leave);
                            TB.TextChanged += new EventHandler(Field_TextChanged);
                            t.SetToolTip(TB, TB.Tag.ToString());

                            Casing.Controls.Add(TB);
                            Casing.Controls.Add(LBL);
                            pnlFieldControls.Controls.Add(Casing);
                            Casing.BringToFront();
                        }
                        pnlAutoFill.Visible = true;
                    }
                    catch
                    {
                        MessageBox.Show("An error occured reading DataValues fields");
                    }
                    break;

                case "entity.MetaEditor2.EntStrings":
                    try
                    {
                        Control c = FieldControl.Controls[1];
                        for (int x = StartChunk; x <= EndChunk; x++)
                        {
                            // Update progress bar
                            this.progressBar1.Value = (x - StartChunk) * (progressBarEnd - progressBarStart) / Math.Max(1, (EndChunk - StartChunk));
                            this.progressBar1.Refresh();

                            Control Casing = new Control();
                            Casing.Dock    = DockStyle.Top;
                            Casing.Padding = new Padding(4);
                            Casing.Size    = new Size(this.Width, 31);
                            Label LBL = new Label();
                            LBL.Dock      = DockStyle.Left;
                            LBL.Location  = new Point(10, 4);
                            LBL.Size      = new Size(140, 23);
                            LBL.Text      = FieldControl.EntName + " #" + x.ToString();
                            LBL.TextAlign = ContentAlignment.MiddleLeft;
                            TextBox TB = new TextBox();
                            TB.Anchor    = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
                            TB.Location  = new Point(150, 5);
                            TB.Height    = c.Height;
                            TB.MaxLength = ((EntStrings)FieldControl).length;
                            TB.Width     = Casing.Width - TB.Left - 30;
                            TB.Tag       = StartOffset + x * RD.reflexive.chunkSize;
                            TB.Leave    += new EventHandler(Field_Leave);
                            t.SetToolTip(TB, TB.Tag.ToString());

                            Casing.Controls.Add(TB);
                            Casing.Controls.Add(LBL);
                            pnlFieldControls.Controls.Add(Casing);
                            Casing.BringToFront();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("An error occured reading EntStrings fields");
                    }
                    break;

                case "entity.MetaEditor2.Ident":
                    try
                    {
                        Control c = FieldControl.Controls[1];
                        this.Size = new Size(FieldControl.Width, 500);
                        System.Collections.IEnumerator i = FieldControl.map.MetaInfo.TagTypes.Keys.GetEnumerator();
                        List <string> TagTypes           = new List <string>();
                        while (i.MoveNext())
                        {
                            TagTypes.Add((string)i.Current);
                        }
                        TagTypes.Sort();
                        TagTypes.Add((string)"null");

                        for (int x = StartChunk; x <= EndChunk; x++)
                        {
                            // Update progress bar
                            this.progressBar1.Value = (x - StartChunk) * (progressBarEnd - progressBarStart) / Math.Max(1, (EndChunk - StartChunk));
                            this.progressBar1.Refresh();

                            Control Casing = new Control();
                            Casing.Dock    = DockStyle.Top;
                            Casing.Padding = new Padding(4);
                            Casing.Size    = new Size(this.Width, 31);
                            Label LBL = new Label();
                            LBL.Dock      = DockStyle.Left;
                            LBL.Location  = new Point(10, 4);
                            LBL.Size      = new Size(140, 23);
                            LBL.Text      = FieldControl.EntName + " #" + x.ToString();
                            LBL.TextAlign = ContentAlignment.MiddleLeft;
                            ComboBox FieldTagType = new ComboBox();
                            FieldTagType.Anchor        = AnchorStyles.Left | AnchorStyles.Top;
                            FieldTagType.DropDownStyle = ComboBoxStyle.DropDownList;
                            FieldTagType.Location      = new Point(150, 5);
                            FieldTagType.Height        = c.Height;
                            FieldTagType.Items.AddRange(TagTypes.ToArray());
                            FieldTagType.Width = FieldControl.Controls[2].Width;
                            FieldTagType.Tag   = StartOffset + x * RD.reflexive.chunkSize;
                            FieldTagType.SelectedIndexChanged += new EventHandler(FieldTagType_SelectedIndexChanged);
                            FieldTagType.Leave       += new EventHandler(Field_Leave);
                            FieldTagType.TextChanged += new EventHandler(Field_TextChanged);
                            t.SetToolTip(FieldTagType, FieldTagType.Tag.ToString());
                            ComboBox FieldIdent = new ComboBox();
                            FieldIdent.Anchor        = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
                            FieldIdent.DropDownStyle = ComboBoxStyle.DropDownList;
                            FieldIdent.Location      = new Point(250, 5);
                            FieldIdent.Height        = c.Height;
                            FieldIdent.Width         = FieldControl.Controls[1].Width;
                            if (((Ident)FieldControl).HasTagType)
                            {
                                FieldIdent.Tag = StartOffset + x * RD.reflexive.chunkSize + 4;
                            }
                            else
                            {
                                FieldIdent.Tag = StartOffset + x * RD.reflexive.chunkSize;
                            }
                            FieldIdent.Leave += new EventHandler(Field_Leave);
                            t.SetToolTip(FieldIdent, FieldIdent.Tag.ToString());

                            Casing.Controls.Add(FieldTagType);
                            Casing.Controls.Add(FieldIdent);
                            Casing.Controls.Add(LBL);
                            pnlFieldControls.Controls.Add(Casing);
                            Casing.BringToFront();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("An error occured reading Tag/Ident fields");
                    }
                    break;

                case "entity.MetaEditor2.SID":
                    try
                    {
                        Control c = FieldControl.Controls[1];
                        this.Size = new Size(FieldControl.Width, 500);
                        List <SIDData> SIDs = new List <SIDData>();
                        SIDs.AddRange(SIDData.CreateArray(FieldControl.map.Strings.Name));
                        SortStringIDs(ref SIDs);

                        for (int x = StartChunk; x <= EndChunk; x++)
                        {
                            // Update progress bar
                            this.progressBar1.Value = (x - StartChunk) * (progressBarEnd - progressBarStart) / Math.Max(1, (EndChunk - StartChunk));
                            this.progressBar1.Refresh();

                            Control Casing = new Control();
                            Casing.Dock    = DockStyle.Top;
                            Casing.Padding = new Padding(4);
                            Casing.Size    = new Size(this.Width, 31);
                            Label LBL = new Label();
                            LBL.Dock      = DockStyle.Left;
                            LBL.Location  = new Point(10, 4);
                            LBL.Size      = new Size(140, 23);
                            LBL.Text      = FieldControl.EntName + " #" + x.ToString();
                            LBL.TextAlign = ContentAlignment.MiddleLeft;
                            ComboBox SIDBox = new ComboBox();
                            SIDBox.Anchor        = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
                            SIDBox.DropDownStyle = ComboBoxStyle.DropDownList;
                            SIDBox.Location      = new Point(150, 5);
                            SIDBox.Height        = c.Height;
                            SIDBox.Items.AddRange(SIDs.ToArray());
                            SIDBox.DisplayMember = "Name";
                            SIDBox.Width         = FieldControl.Controls[1].Width;
                            SIDBox.Tag           = StartOffset + x * RD.reflexive.chunkSize;
                            SIDBox.Leave        += new EventHandler(Field_Leave);
                            t.SetToolTip(SIDBox, SIDBox.Tag.ToString());

                            Casing.Controls.Add(SIDBox);
                            Casing.Controls.Add(LBL);
                            pnlFieldControls.Controls.Add(Casing);
                            Casing.BringToFront();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("An error occured reading String ID fields");
                    }
                    break;

                case "entity.MetaEditor2.Enums":
                    try
                    {
                        ComboBox c = (ComboBox)FieldControl.Controls[1];
                        for (int x = StartChunk; x <= EndChunk; x++)
                        {
                            // Update progress bar
                            this.progressBar1.Value = (x - StartChunk) * (progressBarEnd - progressBarStart) / Math.Max(1, (EndChunk - StartChunk));
                            this.progressBar1.Refresh();

                            Control Casing = new Control();
                            Casing.Dock    = DockStyle.Top;
                            Casing.Padding = new Padding(4);
                            Casing.Size    = new Size(this.Width, 31);
                            Label LBL = new Label();
                            LBL.Dock      = DockStyle.Left;
                            LBL.Location  = new Point(10, 4);
                            LBL.Size      = new Size(140, 23);
                            LBL.Text      = FieldControl.EntName + " #" + x.ToString();
                            LBL.TextAlign = ContentAlignment.MiddleLeft;
                            ComboBox EnumsBox = new ComboBox();
                            EnumsBox.Anchor   = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
                            EnumsBox.Location = new Point(150, 5);
                            EnumsBox.Height   = c.Height;
                            object[] objs = new object[c.Items.Count];
                            c.Items.CopyTo(objs, 0);
                            EnumsBox.Items.AddRange(objs);
                            EnumsBox.Width  = FieldControl.Controls[1].Width;
                            EnumsBox.Tag    = StartOffset + x * RD.reflexive.chunkSize;
                            EnumsBox.Leave += new EventHandler(Field_Leave);
                            t.SetToolTip(EnumsBox, EnumsBox.Tag.ToString());

                            Casing.Controls.Add(EnumsBox);
                            Casing.Controls.Add(LBL);
                            pnlFieldControls.Controls.Add(Casing);
                            Casing.BringToFront();
                        }
                        pnlAutoFill.Visible = true;
                    }
                    catch
                    {
                        MessageBox.Show("An error occured reading Enums fields");
                    }
                    break;

                case "entity.MetaEditor2.Indices":
                    try
                    {
                        Control c = FieldControl.Controls[1];
                        this.Size = new Size(FieldControl.Width, 500);
                        Indices indices = ((Indices)FieldControl);
                        // Make sure all values have been added to combobox (happens on dropdown)
                        indices.UpdateSelectionList(true);

                        for (int x = StartChunk; x <= EndChunk; x++)
                        {
                            // Update progress bar
                            this.progressBar1.Value = (x - StartChunk) * (progressBarEnd - progressBarStart) / Math.Max(1, (EndChunk - StartChunk));
                            this.progressBar1.Refresh();

                            Control Casing = new Control();
                            Casing.Dock    = DockStyle.Top;
                            Casing.Padding = new Padding(4);
                            Casing.Size    = new Size(this.Width, 31);
                            Label LBL = new Label();
                            LBL.Dock      = DockStyle.Left;
                            LBL.Location  = new Point(10, 4);
                            LBL.Size      = new Size(140, 23);
                            LBL.Text      = FieldControl.EntName + " #" + x.ToString();
                            LBL.TextAlign = ContentAlignment.MiddleLeft;
                            ComboBox Indices = new ComboBox();
                            Indices.Anchor        = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
                            Indices.DropDownStyle = ComboBoxStyle.DropDownList;
                            Indices.Location      = new Point(150, 5);
                            Indices.Height        = c.Height;
                            Indices.Items.AddRange(indices.IndicesList.ToArray());
                            Indices.DisplayMember = "Name";
                            Indices.Width         = Casing.Width - Indices.Left - 50;
                            Indices.Tag           = StartOffset + x * RD.reflexive.chunkSize;
                            Indices.Leave        += new EventHandler(Field_Leave);
                            t.SetToolTip(Indices, Indices.Tag.ToString());

                            Casing.Controls.Add(Indices);
                            Casing.Controls.Add(LBL);
                            pnlFieldControls.Controls.Add(Casing);
                            Casing.BringToFront();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("An error occured reading Indices/Block Index fields");
                    }
                    break;

                default:
                    MessageBox.Show(FieldControl.GetType().ToString() + " fields are currently Unsupported.");
                    this.Close();
                    break;
                }
            }
            finally
            {
                this.ResumeLayout(true);
            }
        }