source: branches/eraser6/CodeReview/Eraser.DefaultPlugins/SettingsForm.cs @ 1792

Revision 1792, 6.0 KB checked in by lowjoel, 4 years ago (diff)

Implemented an IRegistrar interface for all registrars, and an IRegisterable interface for all classes which need to be registered with IRegistrar, and migrated the Entropy and Erasure Method classes to the new interfaces. Addresses #276: Implement Eraser Registrar Interface

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
Line 
1/*
2 * $Id$
3 * Copyright 2008-2010 The Eraser Project
4 * Original Author: Joel Low <lowjoel@users.sourceforge.net>
5 * Modified By:
6 *
7 * This file is part of Eraser.
8 *
9 * Eraser is free software: you can redistribute it and/or modify it under the
10 * terms of the GNU General Public License as published by the Free Software
11 * Foundation, either version 3 of the License, or (at your option) any later
12 * version.
13 *
14 * Eraser is distributed in the hope that it will be useful, but WITHOUT ANY
15 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
16 * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
17 *
18 * A copy of the GNU General Public License can be found at
19 * <http://www.gnu.org/licenses/>.
20 */
21
22using System;
23using System.Collections.Generic;
24using System.ComponentModel;
25using System.Data;
26using System.Drawing;
27using System.Text;
28using System.Windows.Forms;
29using System.Globalization;
30
31using Eraser.Manager;
32using Eraser.Util;
33
34namespace Eraser.DefaultPlugins
35{
36    public partial class SettingsForm : Form
37    {
38        public SettingsForm()
39        {
40            InitializeComponent();
41            Theming.ApplyTheme(this);
42
43            //Populate the list of erasure passes, except the FL16KB.
44            foreach (ErasureMethod method in ManagerLibrary.Instance.ErasureMethodManager)
45                if (method.Guid != new Guid("{0C2E07BF-0207-49a3-ADE8-46F9E1499C01}"))
46                    fl16MethodCmb.Items.Add(method);
47
48            //Load the settings.
49            DefaultPluginSettings settings = DefaultPlugin.Settings;
50            if (settings.FL16Method != Guid.Empty)
51                foreach (object item in fl16MethodCmb.Items)
52                    if (((ErasureMethod)item).Guid == settings.FL16Method)
53                    {
54                        fl16MethodCmb.SelectedItem = item;
55                        break;
56                    }
57
58            if (fl16MethodCmb.SelectedIndex == -1)
59            {
60                Guid methodGuid =
61                    ManagerLibrary.Settings.DefaultFileErasureMethod;
62                if (methodGuid == new FirstLast16KB().Guid)
63                    methodGuid = new Gutmann().Guid;
64               
65                foreach (object item in fl16MethodCmb.Items)
66                    if (((ErasureMethod)item).Guid == methodGuid)
67                    {
68                        fl16MethodCmb.SelectedItem = item;
69                        break;
70                    } 
71            }
72
73            if (DefaultPlugin.Settings.EraseCustom != null)
74            {
75                customMethods = new Dictionary<Guid,CustomErasureMethod>(
76                    DefaultPlugin.Settings.EraseCustom);
77
78                //Display the whole set on the list.
79                foreach (Guid guid in customMethods.Keys)
80                    AddMethod(customMethods[guid]);
81            }
82            else
83                customMethods = new Dictionary<Guid, CustomErasureMethod>();
84        }
85
86        private void customMethod_ItemActivate(object sender, EventArgs e)
87        {
88            //Create the dialog
89            CustomMethodEditorForm editorForm = new CustomMethodEditorForm();
90            ListViewItem item = customMethod.SelectedItems[0];
91            editorForm.Method = (CustomErasureMethod)item.Tag;
92
93            if (editorForm.ShowDialog() == DialogResult.OK)
94            {
95                //Remove the old definition of the erasure method
96                CustomErasureMethod method = editorForm.Method;
97                if (customMethods.ContainsKey(method.Guid) &&
98                    removeCustomMethods.IndexOf(method.Guid) == -1)
99                {
100                    removeCustomMethods.Add(method.Guid);
101                }
102
103                //Add the new definition
104                foreach (CustomErasureMethod addMethod in addCustomMethods)
105                {
106                    if (addMethod.Guid == method.Guid)
107                    {
108                        addCustomMethods.Remove(addMethod);
109                        break;
110                    }
111                }
112
113                addCustomMethods.Add(method);
114                item.Tag = method;
115                UpdateMethod(item);
116            }
117        }
118
119        private void customMethodAdd_Click(object sender, EventArgs e)
120        {
121            CustomMethodEditorForm form = new CustomMethodEditorForm();
122            if (form.ShowDialog() == DialogResult.OK)
123            {
124                CustomErasureMethod method = form.Method;
125                addCustomMethods.Add(method);
126                AddMethod(method);
127            }
128        }
129
130        private void customMethodContextMenuStrip_Opening(object sender, CancelEventArgs e)
131        {
132            e.Cancel = customMethod.SelectedIndices.Count == 0;
133        }
134
135        private void deleteMethodToolStripMenuItem_Click(object sender, EventArgs e)
136        {
137            foreach (ListViewItem item in customMethod.SelectedItems)
138            {
139                CustomErasureMethod method = (CustomErasureMethod)item.Tag;
140                if (addCustomMethods.IndexOf(method) >= 0)
141                    addCustomMethods.Remove(method);
142                else
143                    removeCustomMethods.Add(method.Guid);
144                customMethod.Items.Remove(item);
145            }
146        }
147
148        private void okBtn_Click(object sender, EventArgs e)
149        {
150            //Save the settings to the settings dictionary
151            if (fl16MethodCmb.SelectedIndex == -1)
152            {
153                errorProvider.SetError(fl16MethodCmb, S._("An invalid erasure method was selected."));
154                return;
155            }
156
157            DefaultPlugin.Settings.FL16Method = ((ErasureMethod)fl16MethodCmb.SelectedItem).Guid;
158
159            //Remove the old methods.
160            foreach (Guid guid in removeCustomMethods)
161            {
162                customMethods.Remove(guid);
163                ManagerLibrary.Instance.ErasureMethodManager.Remove(guid);
164            }
165
166            //Update the Erasure method manager on the methods
167            foreach (CustomErasureMethod method in addCustomMethods)
168            {
169                customMethods.Add(method.Guid, method);
170                ManagerLibrary.Instance.ErasureMethodManager.Add(new EraseCustom(method));
171            }
172
173            //Save the list of custom erasure methods
174            DefaultPlugin.Settings.EraseCustom = customMethods;
175
176            //Close the dialog
177            DialogResult = DialogResult.OK;
178            Close();
179        }
180
181        /// <summary>
182        /// Adds the given method to the custom methods list.
183        /// </summary>
184        /// <param name="method">The method to add.</param>
185        private void AddMethod(CustomErasureMethod method)
186        {
187            ListViewItem item = customMethod.Items.Add(method.Name);
188            item.SubItems.Add(method.Passes.Length.ToString(CultureInfo.CurrentCulture));
189            item.Tag = method;
190        }
191
192        /// <summary>
193        /// Updates the UI which represents the given custom erasure method.
194        /// </summary>
195        /// <param name="item">The method to update.</param>
196        private static void UpdateMethod(ListViewItem item)
197        {
198            CustomErasureMethod method = (CustomErasureMethod)item.Tag;
199            item.Text = method.Name;
200            item.SubItems[1].Text = method.Passes.Length.ToString(CultureInfo.CurrentCulture);
201        }
202
203        private Dictionary<Guid, CustomErasureMethod> customMethods;
204        private List<CustomErasureMethod> addCustomMethods = new List<CustomErasureMethod>();
205        private List<Guid> removeCustomMethods = new List<Guid>();
206    }
207}
Note: See TracBrowser for help on using the repository browser.