/// <summary> /// <paramref name="period"/>를 <paramref name="periodKind"/> 단위로 열거합니다. /// </summary> /// <param name="period">전체 기간</param> /// <param name="periodKind">열거할 기간의 단위</param> /// <returns>열거할 기간 단위를 가지는 기간의 컬렉션</returns> public static IEnumerable <ITimePeriod> ForEachPeriods(this ITimePeriod period, PeriodKind periodKind) { switch (periodKind) { case PeriodKind.Year: return(period.ForEachYears()); case PeriodKind.Halfyear: return(period.ForEachHalfYears()); case PeriodKind.Quarter: return(period.ForEachQuarters()); case PeriodKind.Month: return(period.ForEachMonths()); case PeriodKind.Week: return(period.ForEachWeeks()); case PeriodKind.Day: return(period.ForEachDays()); case PeriodKind.Hour: return(period.ForEachHours()); case PeriodKind.Minute: return(period.ForEachMinutes()); default: throw new InvalidOperationException("지원하지 않는 PeriodKind입니다. PeriodKind=" + periodKind); } }
/// <summary> /// 기간 단위에 따라 Category를 생성합니다. /// </summary> /// <param name="categoryCollectionList">생성된 <see cref="CategoriesElement"/> 정보가 담길 객체</param> /// <param name="timePeriod">Gantt에 표현할 전체 기간 (프로젝트 전체 기간)</param> /// <param name="periodFlags">Gantt Chart X축에 나타낼 기간 단위 정보</param> public static void GenerateCategories(IList <CategoriesElement> categoryCollectionList, ITimePeriod timePeriod, PeriodFlags periodFlags) { categoryCollectionList.ShouldNotBeNull("categoryCollectionList"); timePeriod.ShouldNotBeNull("periodRange"); Guard.Assert(timePeriod.HasPeriod, "Gantt에 나타낼 전체 기간은 시작과 끝이 있어야합니다."); if (IsDebugEnabled) { log.Debug("Gantt의 기간 부분을 생성합니다. timePeriod=[{0}], periodFlags=[{1}]", timePeriod, periodFlags); } categoryCollectionList.Clear(); if ((periodFlags & PeriodFlags.Year) > 0) { categoryCollectionList.Add(CreateCategories(timePeriod.ForEachYears(), range => range.Start.Year.ToString())); } if ((periodFlags & PeriodFlags.HalfYear) > 0) { categoryCollectionList.Add(CreateCategories(timePeriod.ForEachYears(), range => (range.End.HalfyearOf() == HalfyearKind.First) ? "1st" : "2nd")); } if ((periodFlags & PeriodFlags.Quarter) > 0) { categoryCollectionList.Add(CreateCategories(timePeriod.ForEachQuarters(), range => "Q" + range.End.QuarterOf().GetHashCode().ToString())); } if ((periodFlags & PeriodFlags.Month) > 0) { categoryCollectionList.Add(CreateCategories(timePeriod.ForEachMonths(), range => range.End.GetMonthName())); } if ((periodFlags & PeriodFlags.Week) > 0) { categoryCollectionList.Add(CreateCategories(timePeriod.ForEachWeeks(), range => "W" + range.End.GetYearAndWeek().Week.Value.ToString())); } if ((periodFlags & PeriodFlags.Day) > 0) { categoryCollectionList.Add(CreateCategoriesAsParallel(timePeriod.ForEachDays(), range => range.End.Day.ToString())); } if ((periodFlags & PeriodFlags.Hour) > 0) { categoryCollectionList.Add(CreateCategoriesAsParallel(timePeriod.ForEachHours(), range => "H" + range.End.Hour.ToString())); } }
/// <summary> /// 기간 단위에 따라 Category를 생성합니다. /// </summary> /// <param name="categoryCollectionList">생성된 <see cref="CategoriesElement"/> 정보가 담길 객체</param> /// <param name="timePeriod">Gantt에 표현할 전체 기간 (프로젝트 전체 기간)</param> /// <param name="periodFlags">Gantt Chart X축에 나타낼 기간 단위 정보</param> public static void GenerateCategories(IList<CategoriesElement> categoryCollectionList, ITimePeriod timePeriod, PeriodFlags periodFlags) { categoryCollectionList.ShouldNotBeNull("categoryCollectionList"); timePeriod.ShouldNotBeNull("periodRange"); Guard.Assert(timePeriod.HasPeriod, "Gantt에 나타낼 전체 기간은 시작과 끝이 있어야합니다."); if(IsDebugEnabled) log.Debug("Gantt의 기간 부분을 생성합니다. timePeriod=[{0}], periodFlags=[{1}]", timePeriod, periodFlags); categoryCollectionList.Clear(); if((periodFlags & PeriodFlags.Year) > 0) categoryCollectionList.Add(CreateCategories(timePeriod.ForEachYears(), range => range.Start.Year.ToString())); if((periodFlags & PeriodFlags.HalfYear) > 0) categoryCollectionList.Add(CreateCategories(timePeriod.ForEachYears(), range => (range.End.HalfyearOf() == HalfyearKind.First) ? "1st" : "2nd")); if((periodFlags & PeriodFlags.Quarter) > 0) categoryCollectionList.Add(CreateCategories(timePeriod.ForEachQuarters(), range => "Q" + range.End.QuarterOf().GetHashCode().ToString())); if((periodFlags & PeriodFlags.Month) > 0) categoryCollectionList.Add(CreateCategories(timePeriod.ForEachMonths(), range => range.End.GetMonthName())); if((periodFlags & PeriodFlags.Week) > 0) categoryCollectionList.Add(CreateCategories(timePeriod.ForEachWeeks(), range => "W" + range.End.GetYearAndWeek().Week.Value.ToString())); if((periodFlags & PeriodFlags.Day) > 0) categoryCollectionList.Add(CreateCategoriesAsParallel(timePeriod.ForEachDays(), range => range.End.Day.ToString())); if((periodFlags & PeriodFlags.Hour) > 0) categoryCollectionList.Add(CreateCategoriesAsParallel(timePeriod.ForEachHours(), range => "H" + range.End.Hour.ToString())); }
private static GanttChart CreateSampleChart(string caption) { var chart = new GanttChart { Caption = caption, SubCaption = "소제목입니다.", Palette = 2, }; var categories = new CategoriesElement { FontAttr = { Font = "Tahoma", FontColor = Color.FromArgb(0, 0x03, 0x72, 0xAB), FontSize = 13.ToString(), IsBold = true, IsItalic = true, IsUnderline = true }, BgColor = Color.White, Align = FusionTextAlign.Center, VAlign = FusionVerticalAlign.Middle }; foreach (var month in ProjectPeriod.ForEachMonths()) { var category = new CategoryElement { Start = month.Start, End = month.End, }; category.ItemAttr.Label = month.Start.Month.ToString(); category.ItemAttr.FontAttr.Font = "Tahoma"; category.ItemAttr.FontAttr.FontColor = Color.FromArgb(0, 0x03, 0x72, 0xAB); category.ItemAttr.FontAttr.FontSize = 13.ToString(); category.ItemAttr.FontAttr.IsBold = true; category.ItemAttr.FontAttr.IsItalic = true; category.ItemAttr.FontAttr.IsUnderline = true; category.ItemAttr.BgColor = Color.White; category.ItemAttr.Align = FusionTextAlign.Center; category.ItemAttr.VAlign = FusionVerticalAlign.Middle; categories.Add(category); } chart.CategoriesList.Add(categories); chart.Processes.FontAttr.FontSize = 12.ToString(); chart.Processes.FontAttr.IsBold = true; chart.Processes.Align = FusionTextAlign.Right; chart.Processes.HeaderText = "What to do?"; chart.Processes.HeaderAttr.FontAttr.FontSize = 18.ToString(); chart.Processes.HeaderAttr.Align = FusionTextAlign.Right; chart.Processes.HeaderAttr.VAlign = FusionVerticalAlign.Bottom; var procId = 0; foreach (string label in ProcessLabels) { var process = new ProcessElement("Process" + procId++.ToString()) { ItemAttr = { Label = label, FontAttr = { Font = "Tahoma", FontColor = Color.FromArgb(0, 0x03, 0x72, 0xAB), FontSize = 13.ToString(), IsBold = true, IsItalic = true, IsUnderline = true }, BgColor = Color.White, Align = FusionTextAlign.Center, VAlign = FusionVerticalAlign.Middle } }; chart.Processes.Add(process); } procId = 0; var taskId = 0; foreach (var taskPeriod in TaskPeriods) { var task = new TaskElement { Start = taskPeriod.Start, End = taskPeriod.End, Id = "Task" + taskId++, ProcessId = "Process" + procId++, Color = Color.BlueViolet, ShowLabel = true, Animation = true, BorderThickness = 1 }; // chart.Tasks.TaskElements.Add(task); chart.Tasks.Add(task); } return(chart); }