using System;
using System.Collections.Generic;
using System.Drawing;
using Arction.WinForms.Charting;
using Arction.WinForms.Charting.Axes;
using Arction.WinForms.Charting.Views.ViewXY;
namespace TestProject
{
/// <summary>
/// 차트 헬퍼
/// </summary>
public static class ChartHelper
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 단일 색상 리스트
/// </summary>
public static List<Color> SolidColorList = new List<Color>
{
Color.FromArgb(187, 28 , 0 ),
Color.FromArgb(222, 54 , 11),
Color.FromArgb(199, 86 , 10),
Color.FromArgb(255, 160, 0 ),
Color.FromArgb(255, 124, 0 )
};
/// <summary>
/// 반투명 색상 리스트
/// </summary>
public static List<Color> TranslucentColorList = new List<Color>
{
Color.FromArgb(180, SolidColorList[0]),
Color.FromArgb(180, SolidColorList[1]),
Color.FromArgb(180, SolidColorList[2]),
Color.FromArgb(180, SolidColorList[3]),
Color.FromArgb(180, SolidColorList[4])
};
#endregion
//////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 복구 정보
/// </summary>
private static RestoreInfo _restoreInfo;
/// <summary>
/// 배경 색상
/// </summary>
private static Color _backgroundColor = Color.FromArgb(255, 30, 30, 30);
/// <summary>
/// 제목 색상
/// </summary>
private static Color _titleColor = Color.FromArgb(255, 249, 202, 3);
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 리스트 데이터 지우기 - ClearListData<TItem>(sourceList)
/// <summary>
/// 리스트 데이터 지우기
/// </summary>
/// <typeparam name="TItem">항목 타입</typeparam>
/// <param name="sourceList">소스 리스트</param>
public static void ClearListData<TItem>(List<TItem> sourceList) where TItem : IDisposable
{
if(sourceList == null)
{
return;
}
while(sourceList.Count > 0)
{
int lastIndex = sourceList.Count - 1;
TItem item = sourceList[lastIndex];
sourceList.RemoveAt(lastIndex);
if(item != null)
{
(item as IDisposable).Dispose();
}
}
}
#endregion
#region 다크/플랫 스타일 설정하기 - SetDarkFlatStyle(chart, minorTickOption)
/// <summary>
/// 다크/플랫 스타일 설정하기
/// </summary>
/// <param name="chart">차트</param>
/// <param name="minorTickOption">작은 눈금 옵션</param>
public static void SetDarkFlatStyle(LightningChartUltimate chart, MinorTickOption minorTickOption = MinorTickOption.None)
{
_restoreInfo = new RestoreInfo(chart);
chart.Background.Color = _backgroundColor;
chart.Background.GradientFill = GradientFill.Solid;
chart.ViewXY.GraphBackground.Color = Color.FromArgb(255, 20, 20, 20);
chart.ViewXY.GraphBackground.GradientFill = GradientFill.Solid;
chart.Title.Color = _titleColor;
chart.Title.MouseHighlight = MouseOverHighlight.None;
bool showXMinotTick = false;
bool showYMinorTick = false;
if(minorTickOption == MinorTickOption.Both)
{
showXMinotTick = showYMinorTick = true;
}
else if(minorTickOption == MinorTickOption.OnlyX)
{
showXMinotTick = true;
}
else if(minorTickOption == MinorTickOption.OnlyY)
{
showYMinorTick = true;
}
foreach(AxisY axisY in chart.ViewXY.YAxes)
{
axisY.Title.Color = _titleColor;
axisY.Title.MouseHighlight = MouseOverHighlight.None;
axisY.MajorGrid.Color = Color.FromArgb(35, 255, 255, 255);
axisY.MajorGrid.Pattern = LinePattern.Solid;
axisY.MinorDivTickStyle.Visible = showYMinorTick;
}
foreach(AxisX axisX in chart.ViewXY.XAxes)
{
axisX.Title.Color = _titleColor;
axisX.Title.MouseHighlight = MouseOverHighlight.None;
axisX.MajorGrid.Color = Color.FromArgb(35, 255, 255, 255);
axisX.MajorGrid.Pattern = LinePattern.Solid;
axisX.MinorDivTickStyle.Visible = showXMinotTick;
}
if(chart.ViewXY.LegendBoxes != null)
{
foreach(LegendBoxXY legendBox in chart.ViewXY.LegendBoxes)
{
legendBox.Shadow.Visible = false;
}
}
}
#endregion
#region 다크 플랫 스타일 취소하기 - CancelDarkFlatStyle(chart)
/// <summary>
/// 다크 플랫 스타일 취소하기
/// </summary>
/// <param name="chart">차트</param>
public static void CancelDarkFlatStyle(LightningChartUltimate chart)
{
if(_restoreInfo != null)
{
if(chart != null)
{
chart.BeginUpdate();
chart.Background.Color = _restoreInfo.ChartColor;
chart.Background.GradientFill = _restoreInfo.ChartGradientFill;
chart.ViewXY.GraphBackground.Color = _restoreInfo.ViewColor;
chart.ViewXY.GraphBackground.GradientFill = _restoreInfo.viewGradientFill;
foreach(var yAxis in chart.ViewXY.YAxes)
{
yAxis.MajorGrid.Color = _restoreInfo.GridColor;
yAxis.MajorGrid.Pattern = _restoreInfo.GridLinePattern;
yAxis.MinorDivTickStyle.Visible = true;
}
foreach(var xAxis in chart.ViewXY.XAxes)
{
xAxis.MajorGrid.Color = _restoreInfo.GridColor;
xAxis.MajorGrid.Pattern = _restoreInfo.GridLinePattern;
xAxis.MinorDivTickStyle.Visible = true;
}
chart.EndUpdate();
}
}
}
#endregion
}
}