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();
}