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));
}
}