private void btnAdd_Click(object sender, EventArgs e) { CSleep newSleep = new CSleep(); newSleep.Date = curDate; newSleep.IsGoToBedBeforeMidNight = chkMinusOneDay.Checked; if (chkMinusOneDay.Checked) { newSleep.GoToBedTime = new DateTime(curDate.AddDays(-1).Year, curDate.AddDays(-1).Month, curDate.AddDays(-1).Day, dtpTimeStart.Value.Hour, dtpTimeStart.Value.Minute, dtpTimeStart.Value.Second); } else { newSleep.GoToBedTime = new DateTime(curDate.Year, curDate.Month, curDate.Day, dtpTimeStart.Value.Hour, dtpTimeStart.Value.Minute, dtpTimeStart.Value.Second); } newSleep.GetUpTime = new DateTime(curDate.Year, curDate.Month, curDate.Day, dtpTimeEnd.Value.Hour, dtpTimeEnd.Value.Minute, dtpTimeEnd.Value.Second); if (G.glb.lstSleepLog.Exists(o => o.Date == curDate)) { G.glb.lstSleepLog.RemoveAll(o => o.Date == curDate); G.glb.lstSleepLog.Add(newSleep); } else { G.glb.lstSleepLog.Add(newSleep); } DrawLog(); Dispose(); }
/// <summary> /// 绘制计划图或日志图 Done: 01/03/2019 /// </summary> /// <param name="picMap">画布</param> /// <param name="date">日期</param> /// <param name="logs">日志</param> /// <param name="healths">健康日志</param> /// <param name="IsLabelShown">是否显示标签</param> /// <param name="LocationMode">位置模式:"all" - 全部; "left" - 左侧; "right" - 右侧</param> public void DrawScheduleAndLogController(PictureBox picMap, DateTime date, List <CLog> logs, List <CSleep> healths, string LocationMode) { int left = 0; int width = picMap.Width; if (LocationMode == "all") { left = 0; width = picMap.Width; } else if (LocationMode == "left") { left = 0; width = picMap.Width / 2; } else if (LocationMode == "right") { left = picMap.Width / 2; width = picMap.Width / 2; } else if (LocationMode == "allWithSupp") { left = 0; width = (picMap.Width = 30) > 0 ? picMap.Width - 30 : 0; } else if (LocationMode == "leftWithSupp") { left = 0; width = (picMap.Width - 30) > 0 ? (picMap.Width - 30) / 2 : 0; } else if (LocationMode == "rightWithSupp") { left = (picMap.Width - 30) > 0 ? (picMap.Width - 30) / 2 : 0; width = (picMap.Width - 30) > 0 ? (picMap.Width - 30) / 2 : 0; } int height = picMap.Height; PictureBox picTimePointer = new PictureBox(); PictureBox picToday = new PictureBox(); Label lblNow = new Label(); if (date < DateTime.Today.Date) { picMap.BackColor = Color.FromArgb(19, 92, 08, 21); } else if (date == DateTime.Today.Date) { picMap.BackColor = Color.FromArgb(19, 92, 08, 21); } else { picMap.BackColor = Color.White; } if (date == DateTime.Today.Date) { picTimePointer.Width = picMap.Width; picTimePointer.Height = 2; picTimePointer.Left = 0; picTimePointer.Top = (int)(height * DateTime.Now.TimeOfDay.TotalMinutes / (24 * 60)); picTimePointer.BackColor = Color.DarkRed; picMap.Controls.Add(picTimePointer); lblNow.Text = DateTime.Now.ToShortTimeString(); lblNow.Top = (int)(height * DateTime.Now.TimeOfDay.TotalMinutes / (24 * 60)) - 14; lblNow.Left = picMap.Width - 50; lblNow.Height = 14; lblNow.BringToFront(); lblNow.BackColor = Color.DarkRed; lblNow.ForeColor = Color.White; picMap.Controls.Add(lblNow); } List <CLog> todayLogs = logs.FindAll(o => o.StartTime.Date == date).ToList(); List <CLog> yesterdayLogs = logs.FindAll(o => o.StartTime.Date == date.AddDays(-1) && o.EndTime.Date == date).ToList(); CSleep todaySleep = healths.Find(o => o.Date == date); CSleep tomorrowSleep = healths.Find(o => o.Date == date.AddDays(1)); PictureBox picSleep = new PictureBox(); Label lblSleep = new Label(); if (healths.Exists(o => o.Date == date)) { double start; if (todaySleep.IsGoToBedBeforeMidNight) { start = 0; } else { start = (todaySleep.GoToBedTime.Hour + todaySleep.GoToBedTime.Minute / 60d) / 24d * height; } double end = (todaySleep.GetUpTime.Hour + todaySleep.GetUpTime.Minute / 60d) / 24d * height; double totalHour = (todaySleep.GetUpTime - todaySleep.GoToBedTime).TotalHours; totalHour = Math.Round(totalHour, 2); string SleepTime = (todaySleep.IsGoToBedBeforeMidNight ? "(-1d)" : "") + todaySleep.GoToBedTime.ToShortTimeString() + " - " + todaySleep.GetUpTime.ToShortTimeString() + " [" + totalHour.ToString() + "h]"; picSleep.Width = width; picSleep.Height = (int)(end - start); picSleep.Left = left; picSleep.Top = (int)start; picSleep.BackColor = Color.LightBlue; picMap.Controls.Add(picSleep); lblSleep.Text = SleepTime + "\n" + "Sleep"; lblSleep.Dock = DockStyle.Fill; lblSleep.Click += (e, a) => CallInfoLog(SleepTime, "Sleep", "", "", "", picSleep.BackColor, false); picSleep.Controls.Add(lblSleep); } PictureBox picSleepYesterday = new PictureBox(); Label lblSleepYesterday = new Label(); if (healths.Exists(o => o.Date == date.AddDays(1))) { if (tomorrowSleep.IsGoToBedBeforeMidNight) { double start = (tomorrowSleep.GoToBedTime.Hour + tomorrowSleep.GoToBedTime.Minute / 60d) / 24d * height; double end = height; double totalHour = (tomorrowSleep.GetUpTime - tomorrowSleep.GoToBedTime).TotalHours; totalHour = Math.Round(totalHour, 2); string SleepTime = tomorrowSleep.GoToBedTime.ToShortTimeString() + " - " + tomorrowSleep.GetUpTime.ToShortTimeString() + "(+1d)" + " [" + totalHour.ToString() + "h]"; picSleepYesterday.Width = width; picSleepYesterday.Height = (int)(end - start); picSleepYesterday.Left = left; picSleepYesterday.Top = (int)start; picSleepYesterday.BackColor = Color.LightBlue; picMap.Controls.Add(picSleepYesterday); lblSleepYesterday.Text = SleepTime + "\n" + "Sleep"; lblSleepYesterday.Dock = DockStyle.Fill; lblSleepYesterday.Click += (e, a) => CallInfoLog("", "Sleep", "", "", "", picSleepYesterday.BackColor, false); picSleepYesterday.Controls.Add(lblSleepYesterday); } } List <PictureBox> lstPicLog = new List <PictureBox>(); List <Label> lstLblLog = new List <Label>(); for (int i = 0; i < yesterdayLogs.Count; i++) { lstPicLog.Add(new PictureBox()); lstLblLog.Add(new Label()); double start = 0; double end = (yesterdayLogs[i].EndTime.Hour + yesterdayLogs[i].EndTime.Minute / 60d) / 24d * height; double totalHour = (yesterdayLogs[i].EndTime - yesterdayLogs[i].StartTime).TotalHours; totalHour = Math.Round(totalHour, 2); string TimePeriod = yesterdayLogs[i].StartTime.ToShortTimeString() + "(-1d)" + " - " + yesterdayLogs[i].EndTime.ToShortTimeString() + " [" + totalHour.ToString() + "h]"; string LogName = yesterdayLogs[i].LogName; string Location = yesterdayLogs[i].Location; string WithWho = yesterdayLogs[i].WithWho; string TaskName = yesterdayLogs[i].ContributionToTask; bool IsAlarm = yesterdayLogs[i].Alarm; Color backColor = GetColor(yesterdayLogs[i].Color); lstPicLog[i].Width = width; lstPicLog[i].Height = (int)(end - start); lstPicLog[i].Left = left; lstPicLog[i].Top = (int)start; lstPicLog[i].BackColor = backColor; picMap.Controls.Add(lstPicLog[i]); lstLblLog[i].Text = TimePeriod + "\n" + LogName + "\n" + Location + "\n" + WithWho; lstLblLog[i].Dock = DockStyle.Fill; lstLblLog[i].ForeColor = Color.FromArgb(255 - backColor.R, 255 - backColor.G, 255 - backColor.B); lstLblLog[i].Click += (e, a) => CallInfoLog(TimePeriod, LogName, Location, WithWho, TaskName, backColor, IsAlarm); lstPicLog[i].Controls.Add(lstLblLog[i]); } for (int i = 0; i < todayLogs.Count; i++) { lstPicLog.Add(new PictureBox()); lstLblLog.Add(new Label()); double start = (todayLogs[i].StartTime.Hour + todayLogs[i].StartTime.Minute / 60d) / 24d * height; double end; double totalHour = (todayLogs[i].EndTime - todayLogs[i].StartTime).TotalHours; totalHour = Math.Round(totalHour, 2); string TimePeriod; if (todayLogs[i].EndTime.Date == date) { end = (todayLogs[i].EndTime.Hour + todayLogs[i].EndTime.Minute / 60d) / 24d * height; TimePeriod = todayLogs[i].StartTime.ToShortTimeString() + " - " + todayLogs[i].EndTime.ToShortTimeString() + " [" + totalHour.ToString() + "h]"; } else { end = height; TimePeriod = todayLogs[i].StartTime.ToShortTimeString() + " - " + todayLogs[i].EndTime.ToShortTimeString() + "(+1d)" + " [" + totalHour.ToString() + "h]"; } string LogName = todayLogs[i].LogName; string Location = todayLogs[i].Location; string WithWho = todayLogs[i].WithWho; string TaskName = todayLogs[i].ContributionToTask; bool IsAlarm = todayLogs[i].Alarm; Color backColor = GetColor(todayLogs[i].Color); lstPicLog[i + yesterdayLogs.Count].Width = width; lstPicLog[i + yesterdayLogs.Count].Height = (int)(end - start); lstPicLog[i + yesterdayLogs.Count].Left = left; lstPicLog[i + yesterdayLogs.Count].Top = (int)start; lstPicLog[i + yesterdayLogs.Count].BackColor = backColor; picMap.Controls.Add(lstPicLog[i + yesterdayLogs.Count]); lstLblLog[i + yesterdayLogs.Count].Text = TimePeriod + "\n" + LogName + "\n" + Location + "\n" + WithWho; lstLblLog[i + yesterdayLogs.Count].Dock = DockStyle.Fill; lstLblLog[i + yesterdayLogs.Count].ForeColor = Color.FromArgb(255 - backColor.R, 255 - backColor.G, 255 - backColor.B); lstLblLog[i + yesterdayLogs.Count].Click += (e, a) => CallInfoLog(TimePeriod, LogName, Location, WithWho, TaskName, backColor, IsAlarm); lstPicLog[i + yesterdayLogs.Count].Controls.Add(lstLblLog[i + yesterdayLogs.Count]); } if (date == DateTime.Today.Date) { picToday.Width = picMap.Width; picToday.Height = (int)(height - height * DateTime.Now.TimeOfDay.TotalMinutes / (24 * 60)); picToday.Left = 0; picToday.Top = (int)(height * DateTime.Now.TimeOfDay.TotalMinutes / (24 * 60)); picToday.BackColor = Color.White; picMap.Controls.Add(picToday); } }
private void btnAdd_Click(object sender, EventArgs e) { DateTime startDate = dtpPeriodStart.Value.Date.Date; DateTime endDate = dtpPeriodEnd.Value.Date.Date; for (DateTime day = startDate; day <= endDate; day = day.AddDays(1)) { bool IsAddSchedule = false; switch (day.DayOfWeek) { case DayOfWeek.Sunday: if (chkSu.Checked) { IsAddSchedule = true; } break; case DayOfWeek.Monday: if (chkMo.Checked) { IsAddSchedule = true; } break; case DayOfWeek.Tuesday: if (chkTu.Checked) { IsAddSchedule = true; } break; case DayOfWeek.Wednesday: if (chkWe.Checked) { IsAddSchedule = true; } break; case DayOfWeek.Thursday: if (chkTu.Checked) { IsAddSchedule = true; } break; case DayOfWeek.Friday: if (chkFr.Checked) { IsAddSchedule = true; } break; case DayOfWeek.Saturday: if (chkSa.Checked) { IsAddSchedule = true; } break; default: break; } if (IsAddSchedule) { CSleep newSleep = new CSleep(); newSleep.Date = day.Date; newSleep.IsGoToBedBeforeMidNight = chkMinusOneDay.Checked; if (chkMinusOneDay.Checked) { newSleep.GoToBedTime = new DateTime(day.AddDays(-1).Year, day.AddDays(-1).Month, day.AddDays(-1).Day, dtpTimeStart.Value.Hour, dtpTimeStart.Value.Minute, dtpTimeStart.Value.Second); } else { newSleep.GoToBedTime = new DateTime(day.Year, day.Month, day.Day, dtpTimeStart.Value.Hour, dtpTimeStart.Value.Minute, dtpTimeStart.Value.Second); } newSleep.GetUpTime = new DateTime(day.Year, day.Month, day.Day, dtpTimeEnd.Value.Hour, dtpTimeEnd.Value.Minute, dtpTimeEnd.Value.Second); if (G.glb.lstSleepSchedule.Exists(o => o.Date == day)) { G.glb.lstSleepSchedule.RemoveAll(o => o.Date == day); G.glb.lstSleepSchedule.Add(newSleep); } else { G.glb.lstSleepSchedule.Add(newSleep); } } } DrawLog(); Dispose(); }