source: branches/eraser6/Eraser/TaskPropertiesForm.cs @ 156

Revision 156, 5.4 KB checked in by lowjoel, 7 years ago (diff)

Slightly friendlier ErrorProvider? behaviour - display the error icon by switching to the tasks page otherwise the dialog seems to remain stubbornly open.

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 System.Globalization;
10using Eraser.Manager;
11
12namespace Eraser
13{
14    public partial class TaskPropertiesForm : Form
15    {
16        public TaskPropertiesForm()
17        {
18            InitializeComponent();
19            scheduleTime.CustomFormat = DateTimeFormatInfo.CurrentInfo.ShortTimePattern;
20
21            //Set a default task type
22            typeImmediate.Checked = true;
23            scheduleDaily.Checked = true;
24        }
25
26        /// <summary>
27        /// Sets or retrieves the task object to be edited or being edited.
28        /// </summary>
29        public Task Task
30        {
31            get { UpdateTaskFromUI(); return task; }
32            set { task = value; UpdateUIFromTask(); }
33        }
34
35        private void UpdateTaskFromUI()
36        {
37            //Set the name of the task
38            task.Name = name.Text;
39
40            //And the schedule, if selected.
41            if (typeImmediate.Checked)
42            {
43                task.Schedule = Schedule.RunNow;
44            }
45            else if (typeRestart.Checked)
46            {
47                task.Schedule = Schedule.RunOnRestart;
48            }
49            else if (typeRecurring.Checked)
50            {
51                RecurringSchedule schedule = new RecurringSchedule();
52                task.Schedule = schedule;
53                schedule.ExecutionTime = new DateTime(0, 0, 1, scheduleTime.Value.Hour,
54                    scheduleTime.Value.Minute, scheduleTime.Value.Second);
55
56                if (scheduleDaily.Checked)
57                {
58                    if (scheduleDailyByDay.Checked)
59                    {
60                        schedule.Type = RecurringSchedule.ScheduleUnit.DAILY;
61                        schedule.Frequency = (uint)scheduleDailyByDayFreq.Value;
62                    }
63                    else
64                    {
65                        schedule.Type = RecurringSchedule.ScheduleUnit.WEEKDAYS;
66                    }
67                }
68                else if (scheduleWeekly.Checked)
69                {
70                    schedule.Type = RecurringSchedule.ScheduleUnit.WEEKLY;
71                    schedule.Frequency = (uint)scheduleWeeklyFreq.Value;
72                    RecurringSchedule.DaysOfWeek weeklySchedule = 0;
73                    if (scheduleWeeklyMonday.Checked)
74                        weeklySchedule |= RecurringSchedule.DaysOfWeek.MONDAY;
75                    if (scheduleWeeklyTuesday.Checked)
76                        weeklySchedule |= RecurringSchedule.DaysOfWeek.TUESDAY;
77                    if (scheduleWeeklyWednesday.Checked)
78                        weeklySchedule |= RecurringSchedule.DaysOfWeek.WEDNESDAY;
79                    if (scheduleWeeklyThursday.Checked)
80                        weeklySchedule |= RecurringSchedule.DaysOfWeek.THURSDAY;
81                    if (scheduleWeeklyFriday.Checked)
82                        weeklySchedule |= RecurringSchedule.DaysOfWeek.FRIDAY;
83                    if (scheduleWeeklySaturday.Checked)
84                        weeklySchedule |= RecurringSchedule.DaysOfWeek.SATURDAY;
85                    if (scheduleWeeklySunday.Checked)
86                        weeklySchedule |= RecurringSchedule.DaysOfWeek.SUNDAY;
87                    schedule.WeeklySchedule = weeklySchedule;
88                }
89                else if (scheduleMonthly.Checked)
90                {
91                    schedule.Type = RecurringSchedule.ScheduleUnit.MONTHLY;
92                    schedule.Frequency = (uint)scheduleMonthlyFreq.Value;
93                    schedule.MonthlySchedule = (uint)scheduleMonthlyDayNumber.Value;
94                }
95                else
96                    throw new ArgumentOutOfRangeException("No such scheduling method");
97            }
98        }
99
100        private void UpdateUIFromTask()
101        {
102            throw new NotImplementedException("UpdateUIFromTask not implemented.");
103        }
104
105        private void dataAdd_Click(object sender, EventArgs e)
106        {
107            using (TaskDataSelectionForm form = new TaskDataSelectionForm())
108            {
109                if (form.ShowDialog() == DialogResult.OK)
110                {
111                    Task.EraseTarget entry = form.GetTaskEntry();
112                    ListViewItem item = data.Items.Add(entry.UIText);
113                   
114                    item.SubItems.Add(entry.Method.Name);
115                    task.Entries.Add(entry);
116                    errorProvider.Clear();
117                }
118            }
119        }
120
121        private void taskType_CheckedChanged(object sender, EventArgs e)
122        {
123            scheduleTimeLbl.Enabled = scheduleTime.Enabled = schedulePattern.Enabled =
124                scheduleDaily.Enabled = scheduleWeekly.Enabled =
125                scheduleMonthly.Enabled = typeRecurring.Checked;
126            nonRecurringPanel.Visible = !typeRecurring.Checked;
127           
128            scheduleSpan_CheckedChanged(sender, e);
129        }
130
131        private void scheduleSpan_CheckedChanged(object sender, EventArgs e)
132        {
133            scheduleDailyByDay.Enabled = scheduleDailyByDayLbl.Enabled =
134                scheduleDailyByWeekday.Enabled = scheduleDaily.Checked &&
135                typeRecurring.Checked;
136            scheduleWeeklyLbl.Enabled = scheduleWeeklyFreq.Enabled =
137                scheduleWeeklyFreqLbl.Enabled = scheduleWeeklyMonday.Enabled =
138                scheduleWeeklyTuesday.Enabled = scheduleWeeklyWednesday.Enabled =
139                scheduleWeeklyThursday.Enabled = scheduleWeeklyFriday.Enabled =
140                scheduleWeeklySaturday.Enabled = scheduleWeeklySunday.Enabled =
141                scheduleWeekly.Checked && typeRecurring.Checked;
142            scheduleMonthlyLbl.Enabled = scheduleMonthlyDayNumber.Enabled =
143                scheduleMonthlyEveryLbl.Enabled = scheduleMonthlyFreq.Enabled =
144                scheduleMonthlyMonthLbl.Enabled = scheduleMonthly.Checked &&
145                typeRecurring.Checked;
146
147            scheduleDailySpan_CheckedChanged(sender, e);
148        }
149
150        private void scheduleDailySpan_CheckedChanged(object sender, EventArgs e)
151        {
152            scheduleDailyByDayFreq.Enabled = scheduleDailyByDay.Checked &&
153                scheduleDaily.Checked && typeRecurring.Checked;
154        }
155
156        private void ok_Click(object sender, EventArgs e)
157        {
158            if (data.Items.Count == 0)
159            {
160                errorProvider.SetIconPadding(data, -16);
161                errorProvider.SetIconAlignment(data, ErrorIconAlignment.BottomRight);
162                errorProvider.SetError(data, "The task has no data to erase.");
163                container.SelectedIndex = 0;
164                return;
165            }
166
167            errorProvider.Clear();
168
169            //Close the dialog
170            DialogResult = DialogResult.OK;
171            Close();
172        }
173
174        private Task task = new Task();
175    }
176}
Note: See TracBrowser for help on using the repository browser.