source: branches/eraser6/Eraser/TaskDataSelectionForm.cs @ 349

Revision 349, 7.3 KB checked in by lowjoel, 6 years ago (diff)

Added the copyright headers to all the source files.

  • Property svn:keywords set to Id
Line 
1/*
2 * $Id$
3 * Copyright 2008 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;
29
30using Eraser.Manager;
31using Eraser.Util;
32using System.IO;
33
34namespace Eraser
35{
36    public partial class TaskDataSelectionForm : Form
37    {
38        private class DriveItem
39        {
40            public override string ToString()
41            {
42                return Label;
43            }
44
45            public string Drive;
46            public string Label;
47            public Icon Icon;
48        }
49
50        public TaskDataSelectionForm()
51        {
52            //Create the UI
53            InitializeComponent();
54            S.TranslateControl(this);
55            file.Checked = true;
56
57            //Populate the drives list
58            string[] drives = Environment.GetLogicalDrives();
59            foreach (string drive in drives)
60            {
61                DriveType driveType = new DriveInfo(drive).DriveType;
62                if (driveType != DriveType.Unknown &&
63                    driveType != DriveType.NoRootDirectory &&
64                    driveType != DriveType.CDRom &&
65                    driveType != DriveType.Network)
66                {
67                    DriveItem item = new DriveItem();
68                    item.Drive = drive.Substring(0, drive.Length - 1);
69                    item.Label = Eraser.Util.File.GetFileDescription(item.Drive +
70                        Path.DirectorySeparatorChar);
71                    item.Icon = Eraser.Util.File.GetFileIcon(item.Drive +
72                        Path.DirectorySeparatorChar);
73                    unusedDisk.Items.Add(item);
74                }
75            }
76
77            if (unusedDisk.Items.Count != 0)
78                unusedDisk.SelectedIndex = 0;
79
80            //And the methods list
81            Dictionary<Guid, ErasureMethod> methods = ErasureMethodManager.GetAll();
82            this.method.Items.Add(ErasureMethodManager.Default);
83            foreach (ErasureMethod method in methods.Values)
84                this.method.Items.Add(method);
85            if (this.method.Items.Count != 0)
86                this.method.SelectedIndex = 0;
87        }
88
89        /// <summary>
90        /// Retrieves the settings on the property page as the Eraser Manager API equivalent.
91        /// </summary>
92        /// <returns>An Eraser.Manager.Task.Data or Eraser.Manager.Task.UnusedSpace object
93        /// or any of its inherited classes, depending on the task selected</returns>
94        public Task.ErasureTarget Target
95        {
96            get
97            {
98                Task.ErasureTarget result = null;
99                if (file.Checked)
100                {
101                    Manager.Task.File fileTask = new Task.File();
102                    result = fileTask;
103
104                    fileTask.Path = filePath.Text;
105                }
106                else if (folder.Checked)
107                {
108                    Manager.Task.Folder folderTask = new Task.Folder();
109                    result = folderTask;
110
111                    folderTask.Path = folderPath.Text;
112                    folderTask.IncludeMask = folderInclude.Text;
113                    folderTask.ExcludeMask = folderExclude.Text;
114                    folderTask.DeleteIfEmpty = folderDelete.Checked;
115                }
116                else
117                {
118                    Task.UnusedSpace unusedSpaceTask = new Task.UnusedSpace();
119                    result = unusedSpaceTask;
120
121                    unusedSpaceTask.Drive = ((DriveItem)unusedDisk.SelectedItem).Drive;
122                    unusedSpaceTask.EraseClusterTips = unusedClusterTips.Checked;
123                }
124
125                result.Method = (ErasureMethod)this.method.SelectedItem;
126                return result;
127            }
128            set
129            {
130                //Set the erasure method.
131                foreach (object item in method.Items)
132                    if (item == value.Method)
133                        method.SelectedItem = item;
134
135                //Then the data to be erased.
136                if (value is Task.File)
137                {
138                    file.Checked = true;
139                    filePath.Text = ((Task.File)value).Path;
140                }
141                else if (value is Task.Folder)
142                {
143                    folder.Checked = true;
144                    Manager.Task.Folder folderTask = (Task.Folder)value;
145
146                    folderPath.Text = folderTask.Path;
147                    folderInclude.Text = folderTask.IncludeMask;
148                    folderExclude.Text = folderTask.ExcludeMask;
149                    folderDelete.Checked = folderTask.DeleteIfEmpty;
150                }
151                else if (value is Task.UnusedSpace)
152                {
153                    unused.Checked = true;
154                    Task.UnusedSpace unusedSpaceTask = new Task.UnusedSpace();
155                    foreach (object item in unusedDisk.Items)
156                        if (((DriveItem)item).Drive == ((Task.UnusedSpace)value).Drive)
157                            unusedDisk.SelectedItem = item;
158                    unusedClusterTips.Checked = unusedSpaceTask.EraseClusterTips;
159                }
160                else
161                    throw new NotImplementedException("Unknown erasure target.");
162            }
163        }
164
165        private void method_SelectedIndexChanged(object sender, EventArgs e)
166        {
167            if (!(method.SelectedItem is UnusedSpaceErasureMethod) &&
168                method.SelectedItem != ErasureMethodManager.Default)
169            {
170                if (unused.Checked)
171                {
172                    file.Checked = true;
173                    errorProvider.SetError(unused, S._("The erasure method selected does " +
174                        "not support unused disk space erasures."));
175                }
176                unused.Enabled = false;
177            }
178            else if (!unused.Enabled)
179            {
180                unused.Enabled = true;
181                errorProvider.Clear();
182            }
183        }
184
185        private void data_CheckedChanged(object sender, EventArgs e)
186        {
187            filePath.Enabled = fileBrowse.Enabled = file.Checked;
188            folderPath.Enabled = folderBrowse.Enabled = folderIncludeLbl.Enabled =
189                folderInclude.Enabled = folderExcludeLbl.Enabled = folderExclude.Enabled =
190                folderDelete.Enabled = folder.Checked;
191            unusedDisk.Enabled = unusedClusterTips.Enabled = unused.Checked;
192            errorProvider.Clear();
193        }
194
195        private void fileBrowse_Click(object sender, EventArgs e)
196        {
197            fileDialog.FileName = filePath.Text;
198            if (fileDialog.ShowDialog() == DialogResult.OK)
199                filePath.Text = fileDialog.FileName;
200        }
201
202        private void folderBrowse_Click(object sender, EventArgs e)
203        {
204            folderDialog.SelectedPath = folderPath.Text;
205            if (folderDialog.ShowDialog() == DialogResult.OK)
206                folderPath.Text = folderDialog.SelectedPath;
207        }
208
209        private void unusedDisk_DrawItem(object sender, DrawItemEventArgs e)
210        {
211            if (e.Index == -1)
212                return;
213
214            Graphics g = e.Graphics;
215            DriveItem item = (DriveItem)unusedDisk.Items[e.Index];
216            Color textColour = e.ForeColor;
217            PointF textPos = e.Bounds.Location;
218            textPos.X += item.Icon.Width + 4;
219            textPos.Y += 2;
220
221            //Set the text colour and background colour if the control is disabled
222            if ((e.State & DrawItemState.Disabled) == 0)
223                e.DrawBackground();
224            else
225            {
226                g.FillRectangle(new SolidBrush(SystemColors.ButtonFace), e.Bounds);
227                textColour = SystemColors.GrayText;
228            }
229
230            g.DrawIcon(item.Icon, e.Bounds.X + 2, e.Bounds.Y);
231            g.DrawString(item.Label, e.Font, new SolidBrush(textColour), textPos);
232            if ((e.State & DrawItemState.Focus) != 0)
233                e.DrawFocusRectangle();
234        }
235
236        private void ok_Click(object sender, EventArgs e)
237        {
238            if (file.Checked && filePath.Text.Length == 0)
239                errorProvider.SetError(filePath, S._("Invalid file path"));
240            else if (folder.Checked && folderPath.Text.Length == 0)
241                errorProvider.SetError(folderPath, S._("Invalid folder path"));
242            else
243            {
244                errorProvider.Clear();
245                DialogResult = DialogResult.OK;
246                Close();
247            }
248        }
249    }
250}
Note: See TracBrowser for help on using the repository browser.