entity.MetaEditor2.MetaEditorControlPage.tsExternalReferencePoint_Click C# (CSharp) Method

tsExternalReferencePoint_Click() private method

private tsExternalReferencePoint_Click ( object sender, EventArgs e ) : void
sender object
e System.EventArgs
return void
        private void tsExternalReferencePoint_Click(object sender, EventArgs e)
        {
            TreeNode tn = treeViewTagReflexives.SelectedNode;
            reflexiveData rd = (reflexiveData)tn.Tag;
            List<WinMetaEditor.references> refList = ((WinMetaEditor)this.ParentForm).reflexiveReferences;

            #region Form Data
            Form f = new Form();
            f.MinimizeBox = false;
            f.MinimumSize = new Size(300, 130);
            f.Size = new Size(550, 90 + Math.Min(refList.Count * 12, 280));
            f.Text = "Select external reflexive to reference";

            ListBox lb = new ListBox();
            lb.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
            lb.DataSource = refList;
            lb.Location = new Point(5, 5);
            lb.Size = new Size(f.Width - 18, f.Height - 80);

            /*
            for (int i = 0; i < refList.Count; i++)
            {
                // Only add same size references (mostly compatible; could add an incorrect but same size one)
                if (refList[i].size == rd.reflexive.chunkSize)
                    lb.Items.Add(refList[i]);
            }
            */

            Button bSelect = new Button();
            bSelect.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
            bSelect.DialogResult = DialogResult.OK;
            bSelect.MinimumSize = new Size(50, 16);
            bSelect.Location = new Point( f.Width / 2 - bSelect.Width / 2, f.Height - bSelect.Height - 45);
            bSelect.Text = "Select";

            Button bRemove = new Button();
            bRemove.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
            bRemove.Location = new Point(30, f.Height - bSelect.Height - 45);
            bRemove.Text = "Remove";
            bRemove.Click += (s, ev) =>
                {
                    refList.Remove((WinMetaEditor.references)lb.SelectedItem);
                    ((CurrencyManager)lb.BindingContext[lb.DataSource]).Refresh();
                };
            lb.DoubleClick += (s, ev) =>
                {
                    f.DialogResult = DialogResult.OK;
                    f.Close();
                };

            f.Controls.Add(lb);
            f.Controls.Add(bRemove);
            f.Controls.Add(bSelect);
            #endregion

            if (f.ShowDialog() == DialogResult.OK)
            {
                // If changing a reflexive that is contained within the tag to an external, backup the original first
                if (rd.inTagNumber == meta.TagIndex)
                {
                    tsExternalReferenceAdd_Click(this, null);
                    showInfoBox("Original reflexive reference has been added to list (backed up)", 1000);
                    Application.DoEvents();
                    System.Threading.Thread.Sleep(1000);
                }

                WinMetaEditor.references r = (WinMetaEditor.references)lb.SelectedItem;
                if (r != null)
                {
                    BinaryWriter bw = new BinaryWriter(meta.MS);
                    meta.MS.Position = rd.reflexive.offset;
                    bw.Write(r.chunkCount);
                    bw.Write(r.ident);

                    rd.baseOffset = r.offset;
                    rd.inTagNumber = r.tagIndex;

                    // Refresh the tree (to show black/internal or red/external and update tooltip)
                    refreshTreeListing(rd);
                    // Reselect to update external tag lockout and warning box
                    treeViewTagReflexives_AfterSelect(this, new TreeViewEventArgs(tn));
                }
            }
            f.Dispose();
        }