155 lines
5.1 KiB
C#
155 lines
5.1 KiB
C#
|
|
#define Graph_And_Chart_PRO
|
||
|
|
using ChartAndGraph;
|
||
|
|
using System;
|
||
|
|
using System.Collections;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using UnityEngine;
|
||
|
|
|
||
|
|
public class MonthWeekDayYear : MonoBehaviour
|
||
|
|
{
|
||
|
|
|
||
|
|
public GapEnum Gap;
|
||
|
|
double mStartPosition = 0;
|
||
|
|
double mEndPostion = 0;
|
||
|
|
GapEnum? mCurrent = null;
|
||
|
|
void Start()
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
private void OnValidate()
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
void SetConstantGap(int days)
|
||
|
|
{
|
||
|
|
var axis = GetComponent<HorizontalAxis>();
|
||
|
|
if (axis == null)
|
||
|
|
return;
|
||
|
|
if(axis.SubDivisions.Total != 0)
|
||
|
|
axis.SubDivisions.Total = 0;
|
||
|
|
if(axis.MainDivisions.Messure != ChartDivisionInfo.DivisionMessure.DataUnits)
|
||
|
|
axis.MainDivisions.Messure = ChartDivisionInfo.DivisionMessure.DataUnits;
|
||
|
|
float val = (float)(days * TimeSpan.FromDays(1).TotalSeconds);
|
||
|
|
if (axis.MainDivisions.UnitsPerDivision != val)
|
||
|
|
axis.MainDivisions.UnitsPerDivision = val;
|
||
|
|
}
|
||
|
|
void FixDivisions()
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
void Regenrate()
|
||
|
|
{
|
||
|
|
var chart = GetComponent<ScrollableAxisChart>();
|
||
|
|
var axis = GetComponent<HorizontalAxis>();
|
||
|
|
if (chart == null || axis == null)
|
||
|
|
return;
|
||
|
|
if (axis.SubDivisions.Total != 0)
|
||
|
|
axis.SubDivisions.Total = 0;
|
||
|
|
if (axis.MainDivisions.Messure != ChartDivisionInfo.DivisionMessure.TotalDivisions)
|
||
|
|
axis.MainDivisions.Messure = ChartDivisionInfo.DivisionMessure.TotalDivisions;
|
||
|
|
if (axis.MainDivisions.Total != 1)
|
||
|
|
axis.MainDivisions.Total = 1;
|
||
|
|
chart.ScrollableData.RestoreDataValues(0);
|
||
|
|
double startPosition = chart.ScrollableData.HorizontalViewOrigin + chart.HorizontalScrolling;
|
||
|
|
double endPosition = chart.ScrollableData.HorizontalViewSize + startPosition;
|
||
|
|
|
||
|
|
if (endPosition < startPosition)
|
||
|
|
{
|
||
|
|
double tmp = startPosition;
|
||
|
|
startPosition = endPosition;
|
||
|
|
endPosition = tmp;
|
||
|
|
}
|
||
|
|
double half = Math.Abs(chart.ScrollableData.HorizontalViewSize * 0.5f);
|
||
|
|
mStartPosition = startPosition - half;
|
||
|
|
mEndPostion = endPosition + half;
|
||
|
|
if (Gap == GapEnum.Month)
|
||
|
|
RegenrateMonth();
|
||
|
|
else if (Gap == GapEnum.Year)
|
||
|
|
RegenarateYear();
|
||
|
|
}
|
||
|
|
void RegenarateYear()
|
||
|
|
{
|
||
|
|
var chart = GetComponent<ScrollableAxisChart>();
|
||
|
|
if (chart == null)
|
||
|
|
return;
|
||
|
|
chart.ClearHorizontalCustomDivisions();
|
||
|
|
var startDate = ChartDateUtility.ValueToDate(mStartPosition);
|
||
|
|
var endDate = ChartDateUtility.ValueToDate(mEndPostion);
|
||
|
|
var origin = ChartDateUtility.ValueToDate(chart.ScrollableData.HorizontalViewOrigin);
|
||
|
|
int yearGap = startDate.Year - origin.Year;
|
||
|
|
DateTime current = origin.AddYears(yearGap);
|
||
|
|
while (current < endDate)
|
||
|
|
{
|
||
|
|
chart.AddHorizontalAxisDivision(ChartDateUtility.DateToValue(current));
|
||
|
|
yearGap++;
|
||
|
|
current = origin.AddYears(yearGap);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
void RegenrateMonth()
|
||
|
|
{
|
||
|
|
var chart = GetComponent<ScrollableAxisChart>();
|
||
|
|
if (chart == null)
|
||
|
|
return;
|
||
|
|
|
||
|
|
chart.ClearHorizontalCustomDivisions();
|
||
|
|
var startDate = ChartDateUtility.ValueToDate(mStartPosition);
|
||
|
|
var endDate = ChartDateUtility.ValueToDate(mEndPostion);
|
||
|
|
var origin = ChartDateUtility.ValueToDate(chart.ScrollableData.HorizontalViewOrigin);
|
||
|
|
int yearGap = startDate.Year - origin.Year;
|
||
|
|
int monthGap = startDate.AddYears(yearGap).Month - origin.Month;
|
||
|
|
DateTime current = origin.AddYears(yearGap).AddMonths(monthGap);
|
||
|
|
while(current < endDate)
|
||
|
|
{
|
||
|
|
chart.AddHorizontalAxisDivision(ChartDateUtility.DateToValue(current));
|
||
|
|
monthGap++;
|
||
|
|
current = origin.AddYears(yearGap).AddMonths(monthGap);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
bool IsViewInside()
|
||
|
|
{
|
||
|
|
var chart = GetComponent<ScrollableAxisChart>();
|
||
|
|
if (chart == null)
|
||
|
|
return false;
|
||
|
|
double startPosition = chart.ScrollableData.HorizontalViewOrigin + chart.HorizontalScrolling;
|
||
|
|
double endPosition = chart.ScrollableData.HorizontalViewSize + startPosition;
|
||
|
|
|
||
|
|
if (endPosition < startPosition)
|
||
|
|
{
|
||
|
|
double tmp = startPosition;
|
||
|
|
startPosition = endPosition;
|
||
|
|
endPosition = tmp;
|
||
|
|
}
|
||
|
|
if (startPosition < mStartPosition)
|
||
|
|
return false;
|
||
|
|
if (endPosition > mEndPostion)
|
||
|
|
return false;
|
||
|
|
return true;
|
||
|
|
|
||
|
|
}
|
||
|
|
void CheckGenerate()
|
||
|
|
{
|
||
|
|
switch(Gap)
|
||
|
|
{
|
||
|
|
case GapEnum.Day:
|
||
|
|
SetConstantGap(1);
|
||
|
|
break;
|
||
|
|
case GapEnum.Week:
|
||
|
|
SetConstantGap(7);
|
||
|
|
break;
|
||
|
|
case GapEnum.Month:
|
||
|
|
if(IsViewInside() == false || mCurrent.HasValue == false || mCurrent.Value != GapEnum.Month)
|
||
|
|
Regenrate();
|
||
|
|
break;
|
||
|
|
case GapEnum.Year:
|
||
|
|
if (IsViewInside() == false || mCurrent.HasValue == false || mCurrent.Value != GapEnum.Year)
|
||
|
|
Regenrate();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
mCurrent = Gap;
|
||
|
|
}
|
||
|
|
void Update()
|
||
|
|
{
|
||
|
|
CheckGenerate();
|
||
|
|
}
|
||
|
|
}
|