예제 #1
0
        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);
        }
예제 #2
0
        public void RemoveTask(TaskEventNode task)
        {
            if (taskEventNodes.Contains(task))
            {
                taskEventNodes.Remove(task);

                if (selectedTask == task)
                {
                    selectedTask = null;
                }
                RefreshTaskEvent();
                Invalidate();
            }
        }
예제 #3
0
 void calendarView1_TaskMouseClick(object sender, TaskEventNode e)
 {
     TaskEventNode node = e;
 }
예제 #4
0
 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;
 }
예제 #5
0
 public void AddTask(TaskEventNode task)
 {
     if (!taskEventNodes.Contains(task))
     {
         taskEventNodes.Add(task);
         BindTaskToNode(task);
         RefreshTaskEvent();
         Invalidate();
     }
 }
예제 #6
0
        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));

                }
            }
        }
예제 #7
0
        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));
            }
        }
예제 #8
0
        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));

                        }

                    }
                }
            }
        }
예제 #9
0
 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);
             }
         }
     }
 }
예제 #10
0
        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();

            }
        }