amazfitbiptools/WatchFace.Parser/Models/Elements/Weather/Temperature/Today/OnelineTemperatureElement.cs

66 lines
2.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using WatchFace.Parser.Helpers;
using WatchFace.Parser.Interfaces;
namespace WatchFace.Parser.Models.Elements
{
public class OnelineTemperatureElement : CompositeElement, IDrawable
{
public OnelineTemperatureElement(Parameter parameter, Element parent = null, string name = null) :
base(parameter, parent, name) { }
public NumberElement Number { get; set; }
public long MinusImageIndex { get; set; }
public long DelimiterImageIndex { get; set; }
public bool AppendDegreesToBoth { get; set; }
public long? DegreesImageIndex { get; set; }
public void Draw(Graphics drawer, Bitmap[] resources, WatchState state)
{
if (state.DayTemperature == null || state.NightTemperature == null) return;
var images = new List<Bitmap>();
if (state.DayTemperature < 0)
images.Add(resources[MinusImageIndex]);
images.AddRange(Number.GetImagesForNumber(resources, Math.Abs(state.DayTemperature.Value)));
if (AppendDegreesToBoth && DegreesImageIndex != null)
images.Add(resources[DegreesImageIndex.Value]);
images.Add(resources[DelimiterImageIndex]);
if (state.NightTemperature < 0)
images.Add(resources[MinusImageIndex]);
images.AddRange(Number.GetImagesForNumber(resources, Math.Abs(state.NightTemperature.Value)));
if (DegreesImageIndex != null)
images.Add(resources[DegreesImageIndex.Value]);
DrawerHelper.DrawImages(drawer, images, Number.Spacing, Number.Alignment, Number.GetBox());
}
protected override Element CreateChildForParameter(Parameter parameter)
{
switch (parameter.Id)
{
case 1:
Number = new NumberElement(parameter, this);
return Number;
case 2:
MinusImageIndex = parameter.Value;
return new ValueElement(parameter, this);
case 3:
DelimiterImageIndex = parameter.Value;
return new ValueElement(parameter, this);
case 4:
AppendDegreesToBoth = parameter.Value > 0;
return new ValueElement(parameter, this);
case 5:
DegreesImageIndex = parameter.Value;
return new ValueElement(parameter, this);
default:
return base.CreateChildForParameter(parameter);
}
}
}
}