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

Revision 156, 5.4 KB checked in by lowjoel, 6 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.

RevLine 
[127]1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Data;
5using System.Drawing;
6using System.Text;
7using System.Windows.Forms;
8
[155]9using System.Globalization;
[128]10using Eraser.Manager;
11
[127]12namespace Eraser
13{
14    public partial class TaskPropertiesForm : Form
15    {
16        public TaskPropertiesForm()
17        {
18            InitializeComponent();
[155]19            scheduleTime.CustomFormat = DateTimeFormatInfo.CurrentInfo.ShortTimePattern;
[133]20
21            //Set a default task type
[145]22            typeImmediate.Checked = true;
[133]23            scheduleDaily.Checked = true;
[127]24        }
25
[140]26        /// <summary>
27        /// Sets or retrieves the task object to be edited or being edited.
28        /// </summary>
29        public Task Task
30        {
[145]31            get { UpdateTaskFromUI(); return task; }
[140]32            set { task = value; UpdateUIFromTask(); }
33        }
34
[145]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            {
[150]51                RecurringSchedule schedule = new RecurringSchedule();
52                task.Schedule = schedule;
[155]53                schedule.ExecutionTime = new DateTime(0, 0, 1, scheduleTime.Value.Hour,
54                    scheduleTime.Value.Minute, scheduleTime.Value.Second);
[145]55
[150]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");
[145]97            }
98        }
99
[140]100        private void UpdateUIFromTask()
101        {
102            throw new NotImplementedException("UpdateUIFromTask not implemented.");
103        }
104
[127]105        private void dataAdd_Click(object sender, EventArgs e)
106        {
107            using (TaskDataSelectionForm form = new TaskDataSelectionForm())
108            {
109                if (form.ShowDialog() == DialogResult.OK)
110                {
[128]111                    Task.EraseTarget entry = form.GetTaskEntry();
[140]112                    ListViewItem item = data.Items.Add(entry.UIText);
[139]113                   
[133]114                    item.SubItems.Add(entry.Method.Name);
[128]115                    task.Entries.Add(entry);
[139]116                    errorProvider.Clear();
[127]117                }
118            }
119        }
[128]120
[133]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;
[145]126            nonRecurringPanel.Visible = !typeRecurring.Checked;
[133]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;
[150]142            scheduleMonthlyLbl.Enabled = scheduleMonthlyDayNumber.Enabled =
143                scheduleMonthlyEveryLbl.Enabled = scheduleMonthlyFreq.Enabled =
144                scheduleMonthlyMonthLbl.Enabled = scheduleMonthly.Checked &&
[133]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
[139]156        private void ok_Click(object sender, EventArgs e)
157        {
158            if (data.Items.Count == 0)
159            {
160                errorProvider.SetIconPadding(data, -16);
[156]161                errorProvider.SetIconAlignment(data, ErrorIconAlignment.BottomRight);
[139]162                errorProvider.SetError(data, "The task has no data to erase.");
[156]163                container.SelectedIndex = 0;
[139]164                return;
165            }
166
167            errorProvider.Clear();
168
169            //Close the dialog
170            DialogResult = DialogResult.OK;
171            Close();
172        }
173
[128]174        private Task task = new Task();
[127]175    }
176}
Note: See TracBrowser for help on using the repository browser.