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

Revision 325, 6.6 KB checked in by lowjoel, 6 years ago (diff)

Added TranslateControl? to the Gettext utilities class. The function finds every control on the provided control and translates the control's strings. Specializations for Menus and ContextMenus? provided. Specializations for ListView? groups and columns also provided.
Menus may need to be translated explicitly though, since they may not be associated with any control on the control to be translated.

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