diff --git a/HaRepacker/GUI/MainForm.cs b/HaRepacker/GUI/MainForm.cs index 4c7570ff..0d46dbe5 100644 --- a/HaRepacker/GUI/MainForm.cs +++ b/HaRepacker/GUI/MainForm.cs @@ -1184,6 +1184,7 @@ private void InsertWzNodeThreadSafe(WzNode node, WzNode parent) private bool yesToAll = false; private bool noToAll = false; + private ReplaceResult result; private bool ShowReplaceDialog(string name) { @@ -1191,9 +1192,8 @@ private bool ShowReplaceDialog(string name) else if (noToAll) return false; else { - ReplaceBox dialog = new ReplaceBox(name); - dialog.ShowDialog(); - switch (dialog.result) + ReplaceBox.Show(name, out result); + switch (result) { case ReplaceResult.NoToAll: noToAll = true; diff --git a/HaRepackerLib/Controls/HaRepackerMainPanels/HaRepackerMainPanel.cs b/HaRepackerLib/Controls/HaRepackerMainPanels/HaRepackerMainPanel.cs index cf443d47..3dc07ca6 100644 --- a/HaRepackerLib/Controls/HaRepackerMainPanels/HaRepackerMainPanel.cs +++ b/HaRepackerLib/Controls/HaRepackerMainPanels/HaRepackerMainPanel.cs @@ -879,34 +879,6 @@ private void changeSoundButton_Click(object sender, EventArgs e) } } - private bool yesToAll = false; - private bool noToAll = false; - - private bool ShowReplaceDialog(string name) - { - if (yesToAll) return true; - else if (noToAll) return false; - else - { - ReplaceBox dialog = new ReplaceBox(name); - dialog.ShowDialog(); - switch (dialog.result) - { - case ReplaceResult.NoToAll: - noToAll = true; - return false; - case ReplaceResult.No: - return false; - case ReplaceResult.YesToAll: - yesToAll = true; - return true; - case ReplaceResult.Yes: - return true; - } - } - throw new Exception("cant get here anyway"); - } - public WzObject CloneWzObject(WzObject obj) { if (obj is WzDirectory) @@ -946,6 +918,8 @@ public void DoCopy() } } + private ReplaceResult replaceBoxResult = ReplaceResult.NoneSelectedYet; + /// /// Paste to the selected WzObject /// @@ -954,8 +928,9 @@ public void DoPaste() if (!Warning.Warn(Properties.Resources.MainConfirmPaste)) return; - yesToAll = false; - noToAll = false; + // Reset replace option + replaceBoxResult = ReplaceResult.NoneSelectedYet; + WzNode parent = (WzNode)DataTree.SelectedNode; WzObject parentObj = (WzObject)parent.Tag; @@ -967,6 +942,7 @@ public void DoPaste() if (parentObj is WzFile) parentObj = ((WzFile)parentObj).WzDirectory; + bool bNoToAllComplete = false; foreach (WzObject obj in clipboard) { if (((obj is WzDirectory || obj is WzImage) && parentObj is WzDirectory) || (obj is WzImageProperty && parentObj is IPropertyContainer)) @@ -974,16 +950,45 @@ public void DoPaste() WzObject clone = CloneWzObject(obj); if (clone == null) continue; - WzNode node = new WzNode(clone); + WzNode node = new WzNode(clone, true); + WzNode child = WzNode.GetChildNode(parent, node.Text); - if (child != null) + if (child != null) // A Child already exist { - if (ShowReplaceDialog(node.Text)) - child.Delete(); - else return; - } - parent.AddNode(node); + if (replaceBoxResult == ReplaceResult.NoneSelectedYet) + { + ReplaceBox.Show(node.Text, out replaceBoxResult); + } + + switch (replaceBoxResult) + { + case ReplaceResult.No: // Skip just this + replaceBoxResult = ReplaceResult.NoneSelectedYet; // reset after use + break; + + case ReplaceResult.Yes: // Replace just this + child.Delete(); + parent.AddNode(node); + replaceBoxResult = ReplaceResult.NoneSelectedYet; // reset after use + break; + + case ReplaceResult.NoToAll: + bNoToAllComplete = true; + break; + + case ReplaceResult.YesToAll: + child.Delete(); + parent.AddNode(node); + break; + } + if (bNoToAllComplete) + break; + } + else // not not in this + { + parent.AddNode(node); + } } } } diff --git a/HaRepackerLib/Controls/ReplaceBox.Designer.cs b/HaRepackerLib/Controls/ReplaceBox.Designer.cs index 1abc0be9..d12de3fb 100644 --- a/HaRepackerLib/Controls/ReplaceBox.Designer.cs +++ b/HaRepackerLib/Controls/ReplaceBox.Designer.cs @@ -80,7 +80,6 @@ private void InitializeComponent() this.Controls.Add(this.label1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; this.Name = "ReplaceBox"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ReplaceBox_FormClosing); this.ResumeLayout(false); } diff --git a/HaRepackerLib/Controls/ReplaceBox.cs b/HaRepackerLib/Controls/ReplaceBox.cs index 3f79f4f5..f4fcd2cc 100644 --- a/HaRepackerLib/Controls/ReplaceBox.cs +++ b/HaRepackerLib/Controls/ReplaceBox.cs @@ -14,49 +14,56 @@ public enum ReplaceResult Yes, No, YesToAll, - NoToAll + NoToAll, + NoneSelectedYet } public partial class ReplaceBox : Form { public ReplaceResult result = ReplaceResult.No; - public ReplaceBox(string name) + private ReplaceBox() { InitializeComponent(); - label1.Text = string.Format(Properties.Resources.ReplaceConfirm, name); } - private void ReplaceBox_FormClosing(object sender, FormClosingEventArgs e) + public static bool Show(string name, out ReplaceResult result) { - e.Cancel = true; + ReplaceBox box = new ReplaceBox(); + + box.label1.Text = string.Format(Properties.Resources.ReplaceConfirm, name); + + box.ShowDialog(); + result = box.result; + + return true; } + private void btnYes_Click(object sender, EventArgs e) { result = ReplaceResult.Yes; - FormClosing -= ReplaceBox_FormClosing; Close(); } private void btnNo_Click(object sender, EventArgs e) { result = ReplaceResult.No; - FormClosing -= ReplaceBox_FormClosing; + Close(); } private void btnYestoall_Click(object sender, EventArgs e) { result = ReplaceResult.YesToAll; - FormClosing -= ReplaceBox_FormClosing; + Close(); } private void btnNotoall_Click(object sender, EventArgs e) { result = ReplaceResult.NoToAll; - FormClosing -= ReplaceBox_FormClosing; + Close(); } }