/// <summary> /// Displays the pass associated with <paramref name="item"/> in the editing controls. /// </summary> /// <param name="item">The <see cref="ListViewItem"/> containing the pass to edit.</param> private void DisplayPass(ListViewItem item) { currentPass = item; ErasureMethodPass pass = (ErasureMethodPass)item.Tag; passEditor.PassData = (byte[])pass.OpaqueValue; passEditor.PassType = pass.Function == PassBasedErasureMethod.WriteRandom ? CustomMethodPassEditorPassType.Random : CustomMethodPassEditorPassType.Text; }
private void passesDuplicateBtn_Click(object sender, EventArgs e) { //Save the current pass to prevent data loss SavePass(currentPass); foreach (ListViewItem item in passesLv.SelectedItems) { ErasureMethodPass oldPass = (ErasureMethodPass)item.Tag; ErasureMethodPass pass = new ErasureMethodPass( oldPass.Function, oldPass.OpaqueValue); AddPass(pass); } }
protected CustomErasureMethod(SerializationInfo info, StreamingContext context) { Name = info.GetString("Name"); Guid = (Guid)info.GetValue("GUID", Guid.GetType()); RandomizePasses = info.GetBoolean("RandomizePasses"); List <PassData> passes = (List <PassData>) info.GetValue("Passes", typeof(List <PassData>)); Passes = new ErasureMethodPass[passes.Count]; for (int i = 0; i != passes.Count; ++i) { Passes[i] = passes[i]; } }
/// <summary> /// Saves the currently edited pass details to memory. /// </summary> private void SavePass(ListViewItem item) { ErasureMethodPass pass = (ErasureMethodPass)item.Tag; if (passEditor.PassType == CustomMethodPassEditorPassType.Random) { pass.Function = PassBasedErasureMethod.WriteRandom; pass.OpaqueValue = null; item.SubItems[1].Text = S._("Random Data"); } else { pass.Function = PassBasedErasureMethod.WriteConstant; pass.OpaqueValue = passEditor.PassData; item.SubItems[1].Text = S._("Constant ({0} bytes)", passEditor.PassData.Length); } }
public PassData(ErasureMethodPass pass) { if (pass.Function == PassBasedErasureMethod.WriteConstant) { Random = false; OpaqueValue = pass.OpaqueValue; } else if (pass.Function == PassBasedErasureMethod.WriteRandom) { Random = true; } else { throw new ArgumentException(S._("The custom erasure method can only comprise " + "passes containing constant or random passes")); } }
/// <summary> /// Adds the given pass to the displayed list of passes. /// </summary> /// <param name="pass">The pass to add.</param> /// <returns>The item added to the list view.</returns> private ListViewItem AddPass(ErasureMethodPass pass) { ListViewItem item = new ListViewItem((passesLv.Items.Count + 1).ToString( CultureInfo.CurrentCulture)); item.Tag = pass; if (pass.Function == PassBasedErasureMethod.WriteRandom) { item.SubItems.Add(S._("Random Data")); } else { item.SubItems.Add(S._("Constant ({0} bytes)", ((byte[])pass.OpaqueValue).Length)); } passesLv.Items.Add(item); return(item); }
/// <summary> /// Shuffles the passes in the input array, effectively randomizing the /// order or rewrites. /// </summary> /// <param name="passes">The input set of passes.</param> /// <returns>The shuffled set of passes.</returns> protected static ErasureMethodPass[] ShufflePasses(ErasureMethodPass[] passes) { //Make a copy. ErasureMethodPass[] result = new ErasureMethodPass[passes.Length]; passes.CopyTo(result, 0); //Randomize. IPrng rand = Host.Instance.Prngs.ActivePrng; for (int i = 0; i < result.Length; ++i) { int val = rand.Next(result.Length - 1); ErasureMethodPass tmpPass = result[val]; result[val] = result[i]; result[i] = tmpPass; } return(result); }
private void passesAddBtn_Click(object sender, EventArgs e) { //Save the current pass being edited if (currentPass != null) { SavePass(currentPass); } //Then create a new, random pass, adding it to the list ErasureMethodPass pass = new ErasureMethodPass(PassBasedErasureMethod.WriteRandom, null); ListViewItem item = AddPass(pass); //If a pass is currently selected, insert the pass after the currently selected one. if (passesLv.SelectedIndices.Count > 0) { item.Remove(); passesLv.Items.Insert(passesLv.SelectedIndices[passesLv.SelectedIndices.Count - 1] + 1, item); RenumberPasses(); } }