private void Form1_Load(object sender, EventArgs e) { month = DateTime.Now.Month; TaskEventNode taskEvent2 = new TaskEventNode("创建日程管理1", "完成日历控件", "公司","tl", new DateTime(2015, 8, 30, 0, 30, 0), new DateTime(2015, 8, 30, 12, 30, 0)); this.calendarView1.AddTask(taskEvent2); TaskEventNode taskEvent01 = new TaskEventNode("日历控件跨区域显示测试1", "完成日历控件", "公司", "tl", new DateTime(2015, 7, 30, 8, 30, 0), new DateTime(2015, 7, 30, 18, 0, 0)); this.calendarView1.AddTask(taskEvent01); TaskEventNode taskEvent02 = new TaskEventNode("日历控件跨区域显示测试2", "完成日历控件", "公司", "tl", new DateTime(2015, 7, 30, 8, 30, 0), new DateTime(2015, 7, 30, 18, 0, 0)); this.calendarView1.AddTask(taskEvent02); TaskEventNode taskEvent0 = new TaskEventNode("日历控件跨区域显示测试3", "完成日历控件", "公司", "tl", new DateTime(2015, 7, 29, 8, 30, 0), new DateTime(2015, 8, 2, 18, 0, 0)); this.calendarView1.AddTask(taskEvent0); TaskEventNode taskEvent1 = new TaskEventNode("完成日历控件", "完成日历控件", "公司", "tl", new DateTime(2015, 8, 27, 8, 30, 0), new DateTime(2015, 8, 27, 10, 0, 0)); this.calendarView1.AddTask(taskEvent1); TaskEventNode taskEvent3 = new TaskEventNode("创建日程管理2", "完成日历控件", "公司", "tl", new DateTime(2015, 7, 30, 10, 30, 0), new DateTime(2015, 8, 1, 14, 0, 0)); this.calendarView1.AddTask(taskEvent3); TaskEventNode taskEvent6 = new TaskEventNode("创建日程管理3", "完成日历控件", "公司", "tl", new DateTime(2015, 8, 19, 14, 30, 0), new DateTime(2015, 8, 23, 15, 0, 0)); this.calendarView1.AddTask(taskEvent6); TaskEventNode taskEvent7 = new TaskEventNode("创建日程管理4", "完成日历控件", "公司", "tl", new DateTime(2015, 8, 26, 00, 30, 0), new DateTime(2015, 8, 27, 23, 30, 0)); this.calendarView1.AddTask(taskEvent7); TaskEventNode taskEvent8 = new TaskEventNode("创建日程管理4", "完成日历控件", "公司", "tl", new DateTime(2015, 8, 26, 10, 30, 0), new DateTime(2015, 8, 30, 13, 30, 0)); this.calendarView1.AddTask(taskEvent8); TaskEventNode taskEvent10 = new TaskEventNode("创建日程管理4", "完成日历控件", "公司", "tl", new DateTime(2015, 9, 1, 9, 30, 0), new DateTime(2015, 9, 1, 13, 30, 0)); this.calendarView1.AddTask(taskEvent10); TaskEventNode taskEvent11 = new TaskEventNode("创建日程管理4", "完成日历控件", "公司", "tl", new DateTime(2015, 9, 1, 10, 30, 0), new DateTime(2015, 9, 1, 13, 30, 0)); this.calendarView1.AddTask(taskEvent11); TaskEventNode taskEvent12 = new TaskEventNode("创建日程管理4", "完成日历控件", "公司", "tl", new DateTime(2015, 9, 1, 8, 30, 0), new DateTime(2015, 9, 1, 13, 30, 0)); this.calendarView1.AddTask(taskEvent12); TaskEventNode taskEvent13 = new TaskEventNode("创建日程管理4", "完成日历控件", "公司", "tl", new DateTime(2015, 9, 2, 9, 30, 0), new DateTime(2015, 9, 2, 13, 30, 0)); this.calendarView1.AddTask(taskEvent13); TaskEventNode taskEvent14 = new TaskEventNode("创建日程管理4", "完成日历控件", "公司", "tl", new DateTime(2015, 9, 3, 10, 30, 0), new DateTime(2015, 9, 3, 13, 30, 0)); this.calendarView1.AddTask(taskEvent14); TaskEventNode taskEvent15 = new TaskEventNode("创建日程管理4", "完成日历控件", "公司", "tl", new DateTime(2015, 9, 2, 8, 30, 0), new DateTime(2015, 9, 2, 13, 30, 0)); this.calendarView1.AddTask(taskEvent15); //TaskEventNode taskEvent8 = new TaskEventNode("创建日程管理4", "完成日历控件", "公司", new DateTime(2015, 7, 28, 16, 30, 0), new DateTime(2015, 7, 28, 17, 0, 0)); //this.calendarView1.AddTask(taskEvent8); //TaskEventNode taskEvent9 = new TaskEventNode("创建日程管理4", "完成日历控件", "公司", new DateTime(2015, 7, 28, 16, 30, 0), new DateTime(2015, 7, 28, 17, 0, 0)); //this.calendarView1.AddTask(taskEvent9); ////TaskEventNode taskEvent7 = new TaskEventNode("创建日程管理4", "完成日历控件", "公司", new DateTime(2015, 7, 28, 16, 30, 0), new DateTime(2015, 7, 28, 17, 0, 0)); ////this.calendarView1.AddTask(taskEvent7); //TaskEventNode taskEvent4 = new TaskEventNode("日历控件跨区域显示测试", "完成日历控件", "公司", new DateTime(2015, 8, 2, 8, 30, 0), new DateTime(2015, 8, 4, 18, 0, 0)); //this.calendarView1.AddTask(taskEvent4); //TaskEventNode taskEvent5 = new TaskEventNode("日历控件跨区域显示测试", "完成日历控件", "公司", new DateTime(2015, 7, 25, 8, 30, 0), new DateTime(2015, 7, 30, 18, 0, 0)); //this.calendarView1.AddTask(taskEvent5); }
public void RemoveTask(TaskEventNode task) { if (taskEventNodes.Contains(task)) { taskEventNodes.Remove(task); if (selectedTask == task) { selectedTask = null; } RefreshTaskEvent(); Invalidate(); } }
void calendarView1_TaskMouseClick(object sender, TaskEventNode e) { TaskEventNode node = e; }
private bool TaskTimeInArea(TaskEventNode taskEvent1,TaskEventNode taskEvent2) { bool rs = false; if((taskEvent1.StartTime<= taskEvent2.StartTime && taskEvent2.StartTime<=taskEvent1.EndTime) ||(taskEvent1.StartTime<= taskEvent2.EndTime && taskEvent2.EndTime<=taskEvent1.EndTime)) { rs = true; } return rs; }
public void AddTask(TaskEventNode task) { if (!taskEventNodes.Contains(task)) { taskEventNodes.Add(task); BindTaskToNode(task); RefreshTaskEvent(); Invalidate(); } }
private void RenderWeekTaskEventNode(TaskEventNode taskEvent, Graphics g, Rectangle r, int level) { taskEvent.RectAreas.Clear(); taskEvent.TitleAreas.Clear(); if (taskEvent.Visible == false) return; Font textFont = Font; int hb = headerBuffer + ltHeight; int lb = lfWidth; //�����¼���Ϣ textFont = new System.Drawing.Font("���ź�", 8.0f); // û�й�����������ʾ�ڵ�ǰ�������� if (taskEvent.RelateNodes.Count == 0) return; //�����¼��������� int dayCount = 1; for (int i = 1; i < taskEvent.RelateNodes.Count; i++) { //�Ƿ���ƿ�ʼʱ�� if (taskEvent.RelateNodes[i].Date.Year == taskEvent.RelateNodes[i - 1].Date.Year && taskEvent.RelateNodes[i].Date.Month == taskEvent.RelateNodes[i - 1].Date.Month && taskEvent.RelateNodes[i].Date.Day == taskEvent.RelateNodes[i - 1].Date.Day) { continue; } else { dayCount++; } } //�����Ƿ��нڵ㲻�ٵ�ǰ���� bool isInNode = true; if (taskEvent.RelateNodes[0].Date > taskEvent.StartTime) { isInNode = false; } DateTime dtMin = new DateTime(taskEvent.EndTime.Year, taskEvent.EndTime.Month, taskEvent.EndTime.Day, 0, 0, 0); if (taskEvent.RelateNodes[taskEvent.RelateNodes.Count - 1].Date < dtMin) { isInNode = false; } //1.ֻ����һ�������������ڵ�ǰ������ if (isInNode && dayCount == 1 && (calendarViewMode != CalendarViewModel.MonthWeek)) { //�����¼��������� int row = taskEvent.RelateNodes[0].Row; //��ʼ���������� int col = taskEvent.RelateNodes[0].Col; //��ʼ���������� int rowCount = taskEvent.RelateNodes.Count; int subCol = taskEvent.ColSubIndex; int subCount = taskEvent.ColSubCount > 0 ? taskEvent.ColSubCount : 1; int taskWidth = (int)((itemwidth - 4 * subCount) / subCount); int lp = subCol == 0 ? 0 : 4; Rectangle sr = new Rectangle(r.Left + (int)(itemwidth * col) + taskWidth * subCol + subCol * 4 + lb - hscrollBar.Value, r.Top + itemheight * row + hb + 2 - vscrollBar.Value, taskWidth, itemheight * rowCount + 1); if (sr.Top > headerBuffer) { g.Clip = new Region(sr); } else { int d = headerBuffer + 1 - sr.Top; Rectangle rh = new Rectangle(sr.Left, sr.Top + d, sr.Width, sr.Height - d); g.Clip = new Region(rh); } taskEvent.RectAreas.Add(sr); g.FillRectangle(new SolidBrush(Color.Blue), sr.Left, sr.Top, 8, sr.Height); Rectangle rcTask = new Rectangle(sr.Left + 8, sr.Top, sr.Width - 8, sr.Height); taskEvent.TitleAreas.Add(rcTask); if (taskEvent.Selected == true) { g.FillRectangle(new SolidBrush(taskEventSelectColor), rcTask.Left, rcTask.Top, rcTask.Width, rcTask.Height); g.DrawRectangle(Pens.Black, rcTask.Left, rcTask.Top, rcTask.Width - 1, rcTask.Height - 1); //�����¼������������ string sp = TruncatedString(taskEvent.Title, rcTask.Width, 5, g); g.DrawString(sp, textFont, taskEventSelectBrush, (float)(rcTask.Left + 4), (float)(rcTask.Top + 4)); } else { g.FillRectangle(new SolidBrush(Color.White), rcTask.Left, rcTask.Top, rcTask.Width, rcTask.Height); g.DrawRectangle(Pens.Black, rcTask.Left, rcTask.Top, rcTask.Width - 1, rcTask.Height - 1); //�����¼������������ string sp = TruncatedString(taskEvent.Title, rcTask.Width, 5, g); g.DrawString(sp, textFont, new SolidBrush(taskEvent.ForeColor), (float)(rcTask.Left + 4), (float)(rcTask.Top + 4)); } } else //��������������� { int row = taskEvent.AreaIndex-1; //ʹ����������±� int col = taskEvent.RelateNodes[0].Col; int th = level; //���ڻ������� Rectangle sr = new Rectangle(r.Left + (int)(itemwidth * col) + lb - hscrollBar.Value, r.Top + headerBuffer + 4 + row * (itemheight + th) -vscrollBar.Value, (int)(itemwidth * dayCount), itemheight); if(sr.Left<0) { sr = new Rectangle(0, sr.Top, sr.Width - (0 - sr.Left), sr.Height); } if(sr.Right>r.Right-vsize) { sr = new Rectangle(sr.Left, sr.Top, sr.Width - (sr.Right - r.Right)-vsize-4, sr.Height); } string userName = TruncatedString(taskEvent.UserName, sr.Width, 5, g); string timeLong = (taskEvent.EndTime - taskEvent.StartTime).Hours + "." + (taskEvent.EndTime - taskEvent.StartTime).Minutes * 1.0f / 60 * 10 + "h"; int tlWidth = (int)g.MeasureString(timeLong, textFont).Width; string ts = taskEvent.StartTime.ToString("HH:mm") + " "; SizeF tsSize = g.MeasureString(ts, textFont); int tsWidth = ((int)tsSize.Width); Rectangle srClip = new Rectangle(sr.Left - tsWidth, sr.Top, sr.Width+(tsWidth +tsWidth), sr.Height + th); if(sr.Top<headerBuffer) { int b = headerBuffer - sr.Top; srClip = new Rectangle(sr.Left - tsWidth, sr.Top+b, sr.Width + (tsWidth + tsWidth), sr.Height + th-b); } g.Clip = new Region(srClip); taskEvent.RectAreas.Add(sr); if (taskEvent.Selected == true) { g.FillRectangle(new SolidBrush(taskEventSelectColor), sr.Left, sr.Top, sr.Width, sr.Height); g.DrawRectangle(Pens.Black, sr.Left, sr.Top, sr.Width - 1, sr.Height - 1); } else { g.FillRectangle(new SolidBrush(Color.White), sr.Left, sr.Top, sr.Width, sr.Height); g.DrawRectangle(Pens.Black, sr.Left, sr.Top, sr.Width - 1, sr.Height - 1); } bool isDrawStart = false; bool isDrawEnd = false; //�Ƿ���ƿ�ʼʱ�� if (taskEvent.RelateNodes[0].Date <= taskEvent.StartTime) { isDrawStart = true; } //�Ƿ���ƽ���ʱ�� DateTime dtMinTaskEnd = new DateTime(taskEvent.EndTime.Year, taskEvent.EndTime.Month, taskEvent.EndTime.Day, 0, 0, 0); if (taskEvent.RelateNodes[taskEvent.RelateNodes.Count - 1].Date >= dtMinTaskEnd) { isDrawEnd = true; } //int lf = isDrawStart ? tsWidth : 0; //int lw = isDrawStart ? tsWidth : 0; //lw = lw + (isDrawEnd ? tsWidth : 0); int lf = 0; int lw = tlWidth+6; //�����¼������������ Rectangle rcTaskTitle = new Rectangle(sr.Left + lf, sr.Top, sr.Width - lw, sr.Height); taskEvent.TitleAreas.Add(rcTaskTitle); string sp = TruncatedString(taskEvent.Title, rcTaskTitle.Width, 5, g); if (taskEvent.Selected == true) { //���ƿ�ʼ���� if (isDrawStart) g.DrawString(ts, textFont, new SolidBrush(taskEvent.ForeColor), (float)(sr.Left - tsWidth - 2), (float)(sr.Top + 3)); //���ƽ���ʱ�� if (isDrawEnd) { ts = taskEvent.EndTime.ToString("HH:mm") + " "; g.DrawString(ts, textFont, new SolidBrush(taskEvent.ForeColor), (float)(sr.Right), (float)(sr.Top + 3)); } //���л��Ʊ��� g.DrawString(sp, textFont, taskEventSelectBrush, (float)(rcTaskTitle.Left + rcTaskTitle.Width / 2 - (Helpers.StringTools.MeasureDisplayStringWidth(g, sp, this.Font) / 2)), (float)(rcTaskTitle.Top + 3)); //����ʱ�� g.DrawString(timeLong, textFont, taskEventSelectBrush, (float)(sr.Left + rcTaskTitle.Width), (float)(sr.Top + 3)); } else { //���ƿ�ʼʱ�� if (isDrawStart) g.DrawString(ts, textFont, new SolidBrush(taskEvent.ForeColor), (float)(sr.Left - tsWidth-2), (float)(sr.Top + 3)); //�������ʱ�� if (isDrawEnd) { ts = taskEvent.EndTime.ToString("HH:mm") + " "; g.DrawString(ts, textFont, new SolidBrush(taskEvent.ForeColor), (float)(sr.Right), (float)(sr.Top + 3)); } //���л��Ʊ��� g.DrawString(sp, textFont, new SolidBrush(taskEvent.ForeColor), (float)(rcTaskTitle.Left + rcTaskTitle.Width / 2 - (Helpers.StringTools.MeasureDisplayStringWidth(g, sp, this.Font) / 2)), (float)(rcTaskTitle.Top + 3)); //����ʱ�� g.DrawString(timeLong, textFont, new SolidBrush(taskEvent.ForeColor), (float)(sr.Left + rcTaskTitle.Width), (float)(sr.Top + 3)); } } }
private void RenderTimeSpanTaskEventNode(TaskEventNode taskEvent, Graphics g, Rectangle r, int level) { taskEvent.RectAreas.Clear(); taskEvent.TitleAreas.Clear(); Font textFont = Font; int hb = headerBuffer + ltHeight; int lb = lfWidth; //�����¼���Ϣ textFont = new System.Drawing.Font("���ź�", 8.0f); int lh = 0; taskHeight = 20; // û�й�����������ʾ�ڵ�ǰ�������� if (taskEvent.RelateNodes.Count == 0) return; int firstRow = taskEvent.RelateNodes[0].Row; int row = taskEvent.RelateNodes[0].Row; int col = taskEvent.RelateNodes[0].Col; List<Rectangle> rectRows = new List<Rectangle>(); //���ڻ������� Rectangle sr = new Rectangle(r.Left + (int)(itemwidth * col) + lb - hscrollBar.Value, r.Top + itemheight * row + hb + 2 - vscrollBar.Value, (int)itemwidth, itemheight); Rectangle rcTask = new Rectangle(sr.Left, sr.Top + lh + 4, sr.Width, taskHeight); rectRows.Add(rcTask); for (int i = 1; i < taskEvent.RelateNodes.Count; i++) { row = taskEvent.RelateNodes[i].Row; col = taskEvent.RelateNodes[i].Col; if (row == firstRow) { //���ӿ�� Rectangle rr = rectRows[rectRows.Count - 1]; rr = new Rectangle(rr.Left, rr.Top, rr.Width + (int)itemwidth, rr.Height); rectRows[rectRows.Count - 1] = rr; } } lh = 0; //���������¼����� Rectangle rcTaskRow = rectRows[0]; while (taskInTaskRow(rcTaskRow) != null) { lh += taskHeight+2; rcTaskRow = new Rectangle(rcTaskRow.Left, rcTaskRow.Top + lh, rcTaskRow.Width, taskHeight); if (rcTaskRow.Height > itemheight) { break; } } taskEvent.RectAreas.Add(rcTaskRow); Rectangle rectTask = taskEvent.RectAreas[0]; g.Clip = new Region(rectTask); //�������� if (taskEvent.Selected == true) { g.FillRectangle(new SolidBrush(taskEventSelectColor), rectTask.Left, rectTask.Top, rectTask.Width, taskHeight); g.DrawRectangle(Pens.Black, rectTask.Left, rectTask.Top, rectTask.Width - 2, taskHeight - 1); } else { g.FillRectangle(new SolidBrush(Color.White), rectTask.Left, rectTask.Top, rectTask.Width - 2, taskHeight); g.DrawRectangle(Pens.Black, rectTask.Left, rectTask.Top, rectTask.Width - 2, taskHeight - 1); } bool isDrawStart = false; bool isDrawEnd = false; //�Ƿ���ƿ�ʼʱ�� if (taskEvent.RelateNodes[0].Date <= taskEvent.StartTime) { isDrawStart = true; } //�Ƿ���ƽ���ʱ�� DateTime dtMinTaskEnd = new DateTime(taskEvent.EndTime.Year, taskEvent.EndTime.Month, taskEvent.EndTime.Day, 0, 0, 0); if (taskEvent.RelateNodes[taskEvent.RelateNodes.Count - 1].Date >= dtMinTaskEnd) { isDrawEnd = true; } if(isDrawStart==false) { g.DrawLine(Pens.White, rectTask.Left, rectTask.Top, rectTask.Left, rectTask.Bottom); } if(isDrawEnd==false) { g.DrawLine(Pens.White, rectTask.Right-2, rectTask.Top, rectTask.Right-2, rectTask.Bottom); } //�����¼������������ Rectangle rcTaskTitle = rectTask; taskEvent.TitleAreas.Add(rcTaskTitle); string sp = TruncatedString(taskEvent.Title, rcTaskTitle.Width, 5, g); if (taskEvent.Selected == true) { //���л��� g.DrawString(sp, textFont, taskEventSelectBrush, (float)(rcTaskTitle.Left + rcTaskTitle.Width / 2 - (Helpers.StringTools.MeasureDisplayStringWidth(g, sp, this.Font) / 2)), (float)(rcTaskTitle.Top + 3)); } else { //���л��� g.DrawString(sp, textFont, new SolidBrush(taskEvent.ForeColor), (float)(rcTaskTitle.Left + rcTaskTitle.Width / 2 - (Helpers.StringTools.MeasureDisplayStringWidth(g, sp, this.Font) / 2)), (float)(rcTaskTitle.Top + 3)); } }
private void RenderMonthTaskEventNode(TaskEventNode taskEvent, Graphics g, Rectangle r, int level) { taskEvent.RectAreas.Clear(); taskEvent.TitleAreas.Clear(); Font textFont = Font; int hb = headerBuffer; int lb = lfWidth; //�����¼���Ϣ textFont = new System.Drawing.Font("���ź�", 8.0f); int lh = 22; if (calendarViewMode == CalendarViewModel.Month) taskHeight = 20; else if (calendarViewMode == CalendarViewModel.Year) taskHeight = 16; // û�й�����������ʾ�ڵ�ǰ�������� if (taskEvent.RelateNodes.Count == 0) return; //1.ֻ����һ�������������ڵ�ǰ������ if (taskEvent.RelateNodes.Count == 1) { //�����¼��������� int row = taskEvent.RelateNodes[0].Row; //���������� int col = taskEvent.RelateNodes[0].Col; //���������� //���ڻ������� Rectangle sr = new Rectangle(r.Left + (int)(itemwidth * col) + lb - hscrollBar.Value, r.Top + itemheight * row + hb + 2 - vscrollBar.Value, (int)itemwidth, itemheight); g.Clip = new Region(sr); Rectangle rcTask = new Rectangle(sr.Left + 4 - hscrollBar.Value, sr.Top + lh + 4 - vscrollBar.Value, sr.Width-4, taskHeight); while (taskInTaskRow(rcTask)!=null) { lh += taskHeight; rcTask = new Rectangle(rcTask.Left, sr.Top + lh + 4 - vscrollBar.Value, rcTask.Width, taskHeight); if (rcTask.Top > sr.Top + sr.Height) { break; } } taskEvent.RectAreas.Add(rcTask); if(calendarViewMode== CalendarViewModel.Month) { string ts = taskEvent.StartTime.ToString("HH:mm") + " - " + taskEvent.EndTime.ToString("HH:mm") + " "; SizeF tsSize = g.MeasureString(ts, textFont); int tsWidth = ((int)tsSize.Width); //�����¼������������ Rectangle rcTaskTitle = new Rectangle(rcTask.Left + tsWidth, rcTask.Top, rcTask.Width - tsWidth + 2 + 2, rcTask.Height); taskEvent.TitleAreas.Add(rcTaskTitle); string sp = TruncatedString(taskEvent.Title, rcTaskTitle.Width, 5, g); if (taskEvent.Selected == true) { g.FillRectangle(new SolidBrush(taskEventSelectColor), rcTask.Left + 2, rcTask.Top, rcTask.Width - 2, 20); g.DrawString(ts, textFont, taskEventSelectBrush, (float)(rcTask.Left), (float)(rcTask.Top + 3)); g.DrawString(sp, textFont, taskEventSelectBrush, (float)(rcTaskTitle.Left), (float)(rcTaskTitle.Top + 3)); } else { g.DrawString(ts, textFont, new SolidBrush(taskEvent.ForeColor), (float)(rcTask.Left), (float)(rcTask.Top + 3)); g.DrawString(sp, textFont, new SolidBrush(taskEvent.ForeColor), (float)(rcTaskTitle.Left), (float)(rcTaskTitle.Top + 3)); } } else if(calendarViewMode== CalendarViewModel.Year) { int tsWidth = 0; //�����¼������������ Rectangle rcTaskTitle = new Rectangle(rcTask.Left + tsWidth, rcTask.Top, rcTask.Width - tsWidth + 2 + 2, rcTask.Height); taskEvent.TitleAreas.Add(rcTaskTitle); string sp = TruncatedString(taskEvent.Title, rcTaskTitle.Width, 5, g); if (taskEvent.Selected == true) { g.FillRectangle(new SolidBrush(taskEventSelectColor), rcTask.Left + 2, rcTask.Top, rcTask.Width - 2, 20); //g.DrawString(ts, textFont, taskEventSelectBrush, (float)(rcTask.Left), (float)(rcTask.Top + 3)); g.DrawString(sp, textFont, taskEventSelectBrush, (float)(rcTaskTitle.Left), (float)(rcTaskTitle.Top + 3)); } else { //g.DrawString(ts, textFont, new SolidBrush(taskEvent.ForeColor), (float)(rcTask.Left), (float)(rcTask.Top + 3)); g.DrawString(sp, textFont, new SolidBrush(taskEvent.ForeColor), (float)(rcTaskTitle.Left), (float)(rcTaskTitle.Top + 3)); } } } else //��������������� { int firstRow = taskEvent.RelateNodes[0].Row; int row = taskEvent.RelateNodes[0].Row; int col = taskEvent.RelateNodes[0].Col; List<Rectangle> rectRows = new List<Rectangle>(); //���ڻ������� Rectangle sr = new Rectangle(r.Left + (int)(itemwidth * col) + lb - hscrollBar.Value, r.Top + itemheight * row + hb + 2 - vscrollBar.Value, (int)itemwidth, itemheight); Rectangle rcTask = new Rectangle(sr.Left - hscrollBar.Value, sr.Top + lh + 4 - vscrollBar.Value, sr.Width, taskHeight); rectRows.Add(rcTask); for(int i=1;i<taskEvent.RelateNodes.Count;i++) { row = taskEvent.RelateNodes[i].Row; col = taskEvent.RelateNodes[i].Col; if (row == firstRow) { //���ӿ�� Rectangle rr = rectRows[rectRows.Count - 1]; rr = new Rectangle(rr.Left, rr.Top, rr.Width + (int)itemwidth, rr.Height); rectRows[rectRows.Count - 1] = rr; } else //��һ����ʾ { Rectangle sr2 = new Rectangle(r.Left + (int)(itemwidth * col) - hscrollBar.Value, r.Top + itemheight * row + hb + 2 - vscrollBar.Value, (int)itemwidth, itemheight); Rectangle rcTask2 = new Rectangle(sr2.Left +lb- hscrollBar.Value, sr2.Top + lh + 4 - vscrollBar.Value, sr2.Width, taskHeight); rectRows.Add(rcTask2); firstRow = row; } } for(int i=0;i< rectRows.Count;i++) { lh = 0; Rectangle rcTaskRow = rectRows[i]; while (taskInTaskRow(rcTaskRow) != null) { lh += taskHeight; rcTaskRow = new Rectangle(rcTaskRow.Left, rcTaskRow.Top + lh, rcTaskRow.Width, taskHeight); if (rcTaskRow.Height > itemheight) { break; } } taskEvent.RectAreas.Add(rcTaskRow); } //����������ʾ���� for (int i = 0; i < taskEvent.RectAreas.Count; i++) { Rectangle rectTask = taskEvent.RectAreas[i]; g.Clip = new Region(rectTask); //�������� if (taskEvent.Selected == true) { g.FillRectangle(new SolidBrush(taskEventSelectColor), rectTask.Left + 2, rectTask.Top, rectTask.Width - 2, 20); } else { g.FillRectangle(new SolidBrush(Color.White), rectTask.Left + 2, rectTask.Top, rectTask.Width - 2, 20); } //���ƶ������ if(i==0) //��ʼ�� { string ts = taskEvent.StartTime.ToString("HH:mm") + " "; SizeF tsSize = g.MeasureString(ts, textFont); int tsWidth = ((int)tsSize.Width); int rightWidth = taskEvent.RectAreas.Count == 1 ? tsWidth : 0; //�����¼������������ Rectangle rcTaskTitle = new Rectangle(rectTask.Left + tsWidth, rectTask.Top, rectTask.Width - tsWidth - rightWidth, rectTask.Height); taskEvent.TitleAreas.Add(rcTaskTitle); string sp = TruncatedString(taskEvent.Title, rectTask.Width - tsWidth, 5, g); if (taskEvent.Selected == true) { g.DrawString(ts, textFont, taskEventSelectBrush, (float)(rectTask.Left), (float)(rectTask.Top + 3)); //���л��� g.DrawString(sp, textFont, taskEventSelectBrush, (float)(rcTaskTitle.Left + rcTaskTitle.Width / 2 - (Helpers.StringTools.MeasureDisplayStringWidth(g, sp, this.Font) / 2)), (float)(rcTaskTitle.Top + 3)); } else { g.DrawString(ts, textFont, new SolidBrush(taskEvent.ForeColor), (float)(rectTask.Left), (float)(rectTask.Top + 3)); //���л��� g.DrawString(sp, textFont, new SolidBrush(taskEvent.ForeColor), (float)(rcTaskTitle.Left + rcTaskTitle.Width / 2 - (Helpers.StringTools.MeasureDisplayStringWidth(g, sp, this.Font) / 2)), (float)(rcTaskTitle.Top + 3)); } } if (i == taskEvent.RectAreas.Count - 1) //����� { string ts = taskEvent.EndTime.ToString("HH:mm") + " "; SizeF tsSize = g.MeasureString(ts, textFont); int tsWidth = ((int)tsSize.Width); if (taskEvent.Selected == true) { g.DrawString(ts, textFont, taskEventSelectBrush, (float)(rectTask.Right - tsWidth - 2 - hscrollBar.Value), (float)(rectTask.Top + 3 - vscrollBar.Value)); } else { g.DrawString(ts, textFont, new SolidBrush(taskEvent.ForeColor), (float)(rectTask.Right - tsWidth - 2 - hscrollBar.Value), (float)(rectTask.Top + 3 - vscrollBar.Value)); } if (i != 0) { //�����¼������������ Rectangle rcTaskTitle = new Rectangle(rectTask.Left, rectTask.Top, rectTask.Width - tsWidth, rectTask.Height); string sp = TruncatedString(taskEvent.Title, rectTask.Width - tsWidth, 5, g); taskEvent.TitleAreas.Add(rcTaskTitle); if (taskEvent.Selected == true) { taskEvent.TitleAreas.Add(rcTaskTitle); g.DrawString(sp, textFont, taskEventSelectBrush, (float)(rcTaskTitle.Left + rcTaskTitle.Width / 2 - (Helpers.StringTools.MeasureDisplayStringWidth(g, sp, this.Font) / 2)), (float)(rcTaskTitle.Top + 3)); } else { taskEvent.TitleAreas.Add(rcTaskTitle); g.DrawString(sp, textFont, new SolidBrush(taskEvent.ForeColor), (float)(rcTaskTitle.Left + rcTaskTitle.Width / 2 - (Helpers.StringTools.MeasureDisplayStringWidth(g, sp, this.Font) / 2)), (float)(rcTaskTitle.Top + 3)); } } } if(i!= 0 && i!= taskEvent.RectAreas.Count - 1) //�м����� { //string ts = taskEvent.EndTime.ToString("hh:mm") + " "; //SizeF tsSize = g.MeasureString(ts, textFont); int tsWidth = 0; //�����¼������������ Rectangle rcTaskTitle = new Rectangle(rectTask.Left, rectTask.Top, rectTask.Width - tsWidth, rectTask.Height); taskEvent.TitleAreas.Add(rcTaskTitle); string sp = TruncatedString(taskEvent.Title, rectTask.Width - tsWidth, 5, g); if (taskEvent.Selected == true) { if (i != 0) g.DrawString(sp, textFont, taskEventSelectBrush, (float)(rcTaskTitle.Left + rcTaskTitle.Width / 2 - (Helpers.StringTools.MeasureDisplayStringWidth(g, sp, this.Font) / 2)), (float)(rcTaskTitle.Top + 3)); } else { if (i != 0) g.DrawString(sp, textFont, new SolidBrush(taskEvent.ForeColor), (float)(rcTaskTitle.Left + rcTaskTitle.Width / 2 - (Helpers.StringTools.MeasureDisplayStringWidth(g, sp, this.Font) / 2)), (float)(rcTaskTitle.Top + 3)); } } } } }
private void BindTaskToNode(TaskEventNode taskEvent) { DateTime firstTime = nodes[0].Date; DateTime lastTime = nodes[nodes.Count - 1].Date.AddDays(1); taskEvent.RelateNodes.Clear(); if ((taskEvent.StartTime > firstTime && taskEvent.StartTime < lastTime) || (taskEvent.EndTime > firstTime && taskEvent.EndTime < lastTime) || (firstTime > taskEvent.StartTime && firstTime < taskEvent.EndTime) || (lastTime > taskEvent.StartTime && lastTime < taskEvent.EndTime)) { foreach (TreeListNode node in nodes) { if (node.IsBlankNode) continue; DateTime dtNodeMax = node.Date; if(calendarViewMode == CalendarViewModel.Month || calendarViewMode== CalendarViewModel.Year) { dtNodeMax = new DateTime(node.Date.Year, node.Date.Month, node.Date.Day, 23, 59, 59); } else if (calendarViewMode == CalendarViewModel.Week || calendarViewMode == CalendarViewModel.WorkWeek || calendarViewMode == CalendarViewModel.Day || calendarViewMode== CalendarViewModel.MonthWeek) { dtNodeMax = new DateTime(node.Date.Year, node.Date.Month, node.Date.Day, node.Date.Hour, node.Date.Minute, 59); } else if(calendarViewMode== CalendarViewModel.TimeSpan) { dtNodeMax = new DateTime(node.Date.Year, node.Date.Month, node.Date.Day, node.Date.Hour, node.Date.Minute, 59); } if ((taskEvent.StartTime < dtNodeMax && node.Date < taskEvent.EndTime)) { taskEvent.RelateNodes.Add(node); node.RelateTasks.Add(taskEvent); } } } }
protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); HideTxtBox(); if (e.Button == MouseButtons.Left) { if (e.Y > headerBuffer + ltHeight) //����������� ,ѡ������ { UnselectNodes(nodes); //selectedNodes.Clear(); selectedNode = null; TreeListNode cnode = NodeInNodeRow(e); if (cnode != null) { cnode.Focused = true; cnode.Selected = true; curNode = cnode; this.SelectedNode = cnode; //��ӱ�ѡ�нڵ��¼�; if (NodeMouseClick != null) { NodeMouseClick(this, cnode); } } } else//����������� { //�϶�ʱ������ if (calendarViewMode == CalendarViewModel.TimeSpan) { if (e.Y > headerBuffer && e.Y < headerBuffer + ltHeight) { Cursor.Current = Cursors.Hand; progressTimeMode = true; progressClickX = e.X; } } if (calendarViewMode == CalendarViewModel.Week || calendarViewMode == CalendarViewModel.WorkWeek || calendarViewMode == CalendarViewModel.Day || calendarViewMode== CalendarViewModel.MonthWeek) { if (e.Y > 40 && e.Y < headerBuffer) { Cursor.Current = Cursors.Hand; progressTimeMode = true; progressClickX = e.X; } } } if (e.Y > headerBuffer) //���������������ѡ�������¼� { UnselectTask(); selectedTask = null; TaskEventNode taskNode = taskInTaskRow(e); if (taskNode != null) { taskNode.Selected = true; this.selectedTask = taskNode; if (e.Clicks == 2) { if (TaskDoubleClick != null) { TaskDoubleClick(this, taskNode); } } else { //��������¼���ѡ���¼� if (TaskMouseClick != null) { TaskMouseClick(this, taskNode); } //��ʾtextBox TaskEventNode taskInTitle = taskTitleInTaskRow(e); if (taskInTitle != null) { Rectangle rc = titleRectInTaskRow(e); if (rc.Width != 0) { taskInTitle.SelectedTitleArea = rc; } txtNode.Tag = taskNode; timerTxt.Enabled = true; } } } } Invalidate(); } }