RealtimeAnalysis.TimeDiagram.DrawSingleTask C# (CSharp) Method

DrawSingleTask() protected method

protected DrawSingleTask ( PaintEventArgs e ) : void
e PaintEventArgs
return void
        protected void DrawSingleTask(PaintEventArgs e)
        {
            Pen penBlack = new Pen(Brushes.Black);
            Pen penRed = new Pen(Brushes.Red);
            Pen penBlue = new Pen(Brushes.Blue);

            // 베이스 라인 길이
            int timelineWidth = (int)(this.Width * 0.8);

            // 단위 유닛
            float unit = (float)(timelineWidth / (_endTime - _startTime));

            // 베이스 라인 그리기
            Point timeline1 = new Point((int)(this.Width * 0.1), (int)(this.Height * 0.6));
            Point timeline2 = new Point(timeline1.X + timelineWidth, timeline1.Y);
            e.Graphics.DrawLine(penBlack, timeline1, timeline2);

            // 눈금 그리기
            float gridUnit = (float)(_endTime - _startTime) / 10;
            for (int i = 0; i <= 10; i++)
            {
                Point p1 = new Point((int)(timeline1.X + unit * gridUnit * i), timeline1.Y);
                Point p2 = new Point((int)(timeline1.X + unit * gridUnit * i), timeline1.Y + 3);

                e.Graphics.DrawLine(penBlack, p1, p2);

                // 단위 숫자 그리기
                String number = String.Format("{0:F0}", (_startTime + gridUnit * i));
                SizeF sizeNumber = e.Graphics.MeasureString(number, this.Font);
                e.Graphics.DrawString(number, this.Font, Brushes.Black,
                    new PointF((timeline1.X + unit * gridUnit * i) - sizeNumber.Width / 2, timeline1.Y + sizeNumber.Height / 2));
            }

            // Task 박스 그리기
            foreach (double r in _listReleaseTime)
            {
                float startX = (float)(timeline1.X + (r * unit));
                float executionWidth = (float)(_task.ExecutionTime * unit);
                int softDeadlineWidth = (int)(_task.SoftDeadline * unit);

                e.Graphics.DrawRectangle(penBlack, startX, timeline1.Y - 20, executionWidth, 20);

                // Release time 표시
                e.Graphics.DrawLine(penBlue,
                    new Point((int)startX, (int)(timeline1.Y - 30)),
                    new Point((int)startX, timeline1.Y));

                e.Graphics.DrawLine(penBlue,
                    new Point((int)startX - 3, (int)timeline1.Y - 30 + 3),
                    new Point((int)startX, (int)(timeline1.Y - 30)));

                e.Graphics.DrawLine(penBlue,
                    new Point((int)startX + 3, (int)timeline1.Y - 30 + 3),
                    new Point((int)startX, (int)(timeline1.Y - 30)));

                // Soft Deadline 표시
                e.Graphics.DrawLine(penRed,
                    new Point((int)startX + softDeadlineWidth, (int)(timeline1.Y - 30)),
                    new Point((int)startX + softDeadlineWidth, timeline1.Y));

                e.Graphics.DrawLine(penRed,
                    new Point((int)startX + softDeadlineWidth - 3, (int)timeline1.Y - 3),
                    new Point((int)startX + softDeadlineWidth, timeline1.Y));

                e.Graphics.DrawLine(penRed,
                    new Point((int)startX + softDeadlineWidth + 3, (int)timeline1.Y - 3),
                    new Point((int)startX + softDeadlineWidth, timeline1.Y));
            }
        }