109 lines
4.4 KiB
C#
109 lines
4.4 KiB
C#
using System;
|
|
using EasyChart.Layers;
|
|
|
|
namespace EasyChart
|
|
{
|
|
public sealed class ChartServices
|
|
{
|
|
public IChartRendererSelectionPolicy RendererSelectionPolicy;
|
|
public Func<SerieType, BaseSeriesRenderer> DynamicRendererFactory;
|
|
public ChartInteractionState InteractionState;
|
|
public IChartTooltipPolicy TooltipPolicy;
|
|
public IChartHitTestPolicy HitTestPolicy;
|
|
public IChartInteractionPolicy InteractionPolicy;
|
|
public IChartLegendTogglePolicy LegendTogglePolicy;
|
|
public IChartLayoutModel LayoutModel;
|
|
|
|
public ChartServices Clone()
|
|
{
|
|
return new ChartServices
|
|
{
|
|
RendererSelectionPolicy = RendererSelectionPolicy,
|
|
DynamicRendererFactory = DynamicRendererFactory,
|
|
InteractionState = InteractionState,
|
|
TooltipPolicy = TooltipPolicy,
|
|
HitTestPolicy = HitTestPolicy,
|
|
InteractionPolicy = InteractionPolicy,
|
|
LegendTogglePolicy = LegendTogglePolicy,
|
|
LayoutModel = LayoutModel,
|
|
};
|
|
}
|
|
|
|
public void Normalize()
|
|
{
|
|
if (RendererSelectionPolicy == null) RendererSelectionPolicy = DefaultChartRendererSelectionPolicy.Instance;
|
|
if (TooltipPolicy == null) TooltipPolicy = DefaultChartTooltipPolicy.Instance;
|
|
if (HitTestPolicy == null) HitTestPolicy = DefaultChartHitTestPolicy.Instance;
|
|
if (InteractionPolicy == null) InteractionPolicy = DefaultChartInteractionPolicy.Instance;
|
|
if (LegendTogglePolicy == null) LegendTogglePolicy = DefaultChartLegendTogglePolicy.Instance;
|
|
if (LayoutModel == null) LayoutModel = new DefaultChartLayoutModel();
|
|
if (InteractionState == null) InteractionState = new ChartInteractionState();
|
|
}
|
|
|
|
public void MergeFrom(ChartServices other, bool overwriteExisting = false)
|
|
{
|
|
if (other == null) return;
|
|
|
|
if (overwriteExisting || RendererSelectionPolicy == null)
|
|
{
|
|
if (other.RendererSelectionPolicy != null) RendererSelectionPolicy = other.RendererSelectionPolicy;
|
|
}
|
|
|
|
if (overwriteExisting || DynamicRendererFactory == null)
|
|
{
|
|
if (other.DynamicRendererFactory != null) DynamicRendererFactory = other.DynamicRendererFactory;
|
|
}
|
|
|
|
if (overwriteExisting || InteractionState == null)
|
|
{
|
|
if (other.InteractionState != null) InteractionState = other.InteractionState;
|
|
}
|
|
|
|
if (overwriteExisting || TooltipPolicy == null)
|
|
{
|
|
if (other.TooltipPolicy != null) TooltipPolicy = other.TooltipPolicy;
|
|
}
|
|
|
|
if (overwriteExisting || HitTestPolicy == null)
|
|
{
|
|
if (other.HitTestPolicy != null) HitTestPolicy = other.HitTestPolicy;
|
|
}
|
|
|
|
if (overwriteExisting || InteractionPolicy == null)
|
|
{
|
|
if (other.InteractionPolicy != null) InteractionPolicy = other.InteractionPolicy;
|
|
}
|
|
|
|
if (overwriteExisting || LegendTogglePolicy == null)
|
|
{
|
|
if (other.LegendTogglePolicy != null) LegendTogglePolicy = other.LegendTogglePolicy;
|
|
}
|
|
|
|
if (overwriteExisting || LayoutModel == null)
|
|
{
|
|
if (other.LayoutModel != null) LayoutModel = other.LayoutModel;
|
|
}
|
|
}
|
|
|
|
public void ApplyTo(ChartElement chart, bool setAsServices = true)
|
|
{
|
|
if (chart == null) return;
|
|
|
|
if (setAsServices)
|
|
{
|
|
chart.Services = this;
|
|
return;
|
|
}
|
|
|
|
if (RendererSelectionPolicy != null) chart.RendererSelectionPolicy = RendererSelectionPolicy;
|
|
if (DynamicRendererFactory != null) chart.DynamicRendererFactory = DynamicRendererFactory;
|
|
if (InteractionState != null) chart.InteractionState = InteractionState;
|
|
if (TooltipPolicy != null) chart.TooltipPolicy = TooltipPolicy;
|
|
if (HitTestPolicy != null) chart.HitTestPolicy = HitTestPolicy;
|
|
if (InteractionPolicy != null) chart.InteractionPolicy = InteractionPolicy;
|
|
if (LegendTogglePolicy != null) chart.LegendTogglePolicy = LegendTogglePolicy;
|
|
if (LayoutModel != null) chart.LayoutModel = LayoutModel;
|
|
}
|
|
}
|
|
}
|