private float GetAverageLineHeight(GraphicTimeLine timeLine) { switch (timeLine) { case GraphicTimeLine.ThisWeek: case GraphicTimeLine.LastWeek: return(maxHourWeekly / 7f); case GraphicTimeLine.ThisMonth: return(maxHourWeekly); case GraphicTimeLine.ThisYear: return(maxHourWeekly * 4.345f); default: return(0); } }
private Func <double, string> GetCorrectLabelFormatting(GraphicTimeLine timeLine) { switch (timeLine) { case GraphicTimeLine.ThisWeek: case GraphicTimeLine.LastWeek: return(GetDayOfWeekName); case GraphicTimeLine.ThisMonth: return(GetWeekNumber); case GraphicTimeLine.ThisYear: return(GetMonthName); default: return(null); } }
private async void UpdateGraphics(GraphicTimeLine timeLine) { int subDiv = subDivPerTimeLine[timeLine]; float averageLineHeight = GetAverageLineHeight(timeLine); float[] hourPerSubDiv = new float[subDiv]; PlotView plotView = graphicsLayout.FindViewById <PlotView>(Resource.Id.plotView); PlotModel model = new PlotModel(); DateTimeAxis dateTimeAxis = new DateTimeAxis { Position = AxisPosition.Bottom, Minimum = -0.5, Maximum = subDiv - 0.5, IsZoomEnabled = false, IsPanEnabled = false, IsAxisVisible = false }; CategoryAxis categoryAxis = new CategoryAxis { Position = AxisPosition.Bottom, Minimum = -0.5, Maximum = subDiv - 0.5, LabelFormatter = GetCorrectLabelFormatting(timeLine), IsZoomEnabled = false, IsPanEnabled = false }; LinearAxis oridnateAxis = new LinearAxis { Position = AxisPosition.Left, Minimum = 0, IsZoomEnabled = false, IsPanEnabled = false }; LineSeries meanSeries = new LineSeries { MarkerSize = 0, Color = OxyColors.Red }; ColumnSeries subDivSeries = new ColumnSeries { FillColor = OxyColors.Green, StrokeColor = OxyColors.Green }; ColumnSeries todaySeries = new ColumnSeries { FillColor = OxyColors.Orange, StrokeColor = OxyColors.Orange }; var table = registeredTimesDB.Table <Time>(); //var table = await client.GetTable<RegisteredTime>().Where(t => t.TimeUserId == currentUser.Id).OrderBy(t => t.SavedTime).ToEnumerableAsync(); if (timeLine == GraphicTimeLine.ThisWeek) { foreach (Time t in table) { if ((t.SavedTime.Year == DateTime.Now.Year || Math.Abs(t.SavedTime.Year - DateTime.Now.Year) == 1) && GetWeekDiference(DateTime.Now, t.SavedTime) == 0) { hourPerSubDiv[GetDayOfWeek(t.SavedTime)] += t.SavedTime.Hour + t.SavedTime.Minute / 60f; } } for (int i = 0; i < subDiv; i++) { if (i == GetDayOfWeek(DateTime.Now)) { todaySeries.Items.Add(new ColumnItem(hourPerSubDiv[i], i)); todaySeries.Items.Add(new ColumnItem(hourPerSubDiv[i], i)); } else { subDivSeries.Items.Add(new ColumnItem(hourPerSubDiv[i], i)); subDivSeries.Items.Add(new ColumnItem(hourPerSubDiv[i], i)); } } } if (timeLine == GraphicTimeLine.LastWeek) { foreach (Time t in table) { if ((t.SavedTime.Year == DateTime.Now.Year || Math.Abs(t.SavedTime.Year - DateTime.Now.Year) == 1) && GetWeekDiference(DateTime.Now.AddDays(-7), t.SavedTime) == 0) { hourPerSubDiv[GetDayOfWeek(t.SavedTime)] += t.SavedTime.Hour + t.SavedTime.Minute / 60f; } } for (int i = 0; i < subDiv; i++) { subDivSeries.Items.Add(new ColumnItem(hourPerSubDiv[i], i)); subDivSeries.Items.Add(new ColumnItem(hourPerSubDiv[i], i)); } } else if (timeLine == GraphicTimeLine.ThisMonth) { foreach (Time t in table) { if ((t.SavedTime.Year == DateTime.Now.Year || Math.Abs(t.SavedTime.Year - DateTime.Now.Year) == 1) && GetWeekDiference(DateTime.Now, t.SavedTime) < 4) { hourPerSubDiv[3 - GetWeekDiference(DateTime.Now, t.SavedTime)] += t.SavedTime.Hour + t.SavedTime.Minute / 60f; } } for (int i = 0; i < subDiv; i++) { if (i + 1 == subDiv) { todaySeries.Items.Add(new ColumnItem(hourPerSubDiv[i], i)); todaySeries.Items.Add(new ColumnItem(hourPerSubDiv[i], i)); } else { subDivSeries.Items.Add(new ColumnItem(hourPerSubDiv[i], i)); subDivSeries.Items.Add(new ColumnItem(hourPerSubDiv[i], i)); } } } else if (timeLine == GraphicTimeLine.ThisYear) { foreach (Time t in table) { if (t.SavedTime.Year == DateTime.Now.Year) { hourPerSubDiv[t.SavedTime.Month - 1] += t.SavedTime.Hour + t.SavedTime.Minute / 60f; } } for (int i = 0; i < subDiv; i++) { if (i + 1 == DateTime.Now.Month) { todaySeries.Items.Add(new ColumnItem(hourPerSubDiv[i], i)); todaySeries.Items.Add(new ColumnItem(hourPerSubDiv[i], i)); } else { subDivSeries.Items.Add(new ColumnItem(hourPerSubDiv[i], i)); subDivSeries.Items.Add(new ColumnItem(hourPerSubDiv[i], i)); } } } model.Axes.Add(categoryAxis); model.Axes.Add(oridnateAxis); model.Series.Add(subDivSeries); model.Series.Add(todaySeries); if (showAverageHour) { meanSeries.Points.Add(new DataPoint(-0.5, averageLineHeight)); meanSeries.Points.Add(new DataPoint(subDiv - 0.5, averageLineHeight)); model.Axes.Add(dateTimeAxis); model.Series.Add(meanSeries); } plotView.Model = model; }