@nativescript-community/ui-chart
Version:
A powerful chart / graph plugin, supporting line, bar, pie, radar, bubble, and candlestick charts as well as scaling, panning and animations.
133 lines • 4.91 kB
JavaScript
import { DrawOrder } from '../charts/CombinedChart';
import { DataRenderer } from './DataRenderer';
import { LineChartRenderer } from './LineChartRenderer';
import { BarChartRenderer } from './BarChartRenderer';
import { BubbleChartRenderer } from './BubbleChartRenderer';
import { CandleStickChartRenderer } from './CandleStickChartRenderer';
import { ScatterChartRenderer } from './ScatterChartRenderer';
/**
* Renderer class that is responsible for rendering multiple different data-types.
*/
export class CombinedChartRenderer extends DataRenderer {
constructor(chart, animator, viewPortHandler) {
super(animator, viewPortHandler);
/**
* all rederers for the different kinds of data this combined-renderer can draw
*/
this.renderers = new Array(5);
this.mHighlightBuffer = [];
this.mChart = new WeakRef(chart);
this.createRenderers();
}
/**
* Creates the renderers needed for this combined-renderer in the required order. Also takes the DrawOrder into
* consideration.
*/
createRenderers() {
this.renderers = [];
const chart = this.mChart.get();
if (!chart?.data)
return;
const orders = chart.drawOrder;
if (orders) {
for (const order of orders) {
switch (order) {
case DrawOrder.BAR:
if (chart.barData) {
this.renderers.push(new BarChartRenderer(chart, this.animator, this.mViewPortHandler));
}
break;
case DrawOrder.BUBBLE:
if (chart.bubbleData) {
this.renderers.push(new BubbleChartRenderer(chart, this.animator, this.mViewPortHandler));
}
break;
case DrawOrder.LINE:
if (chart.lineData) {
this.renderers.push(new LineChartRenderer(chart, this.animator, this.mViewPortHandler));
}
break;
case DrawOrder.CANDLE:
if (chart.candleData) {
this.renderers.push(new CandleStickChartRenderer(chart, this.animator, this.mViewPortHandler));
}
break;
case DrawOrder.SCATTER:
if (chart.scatterData) {
this.renderers.push(new ScatterChartRenderer(chart, this.animator, this.mViewPortHandler));
}
break;
}
}
}
}
initBuffers() {
for (const renderer of this.renderers)
renderer.initBuffers();
}
drawData(c) {
for (const renderer of this.renderers)
renderer.drawData(c);
}
drawValues(c) {
for (const renderer of this.renderers)
renderer.drawValues(c);
}
drawExtras(c) {
for (const renderer of this.renderers)
renderer.drawExtras(c);
}
drawHighlighted(c, indices) {
const chart = this.mChart.get();
if (!chart)
return;
const datas = chart.data.datasArray;
for (const renderer of this.renderers) {
let data = null;
if (renderer instanceof BarChartRenderer)
data = renderer.mChart.barData;
else if (renderer instanceof LineChartRenderer)
data = renderer.mChart.lineData;
else if (renderer instanceof CandleStickChartRenderer)
data = renderer.mChart.candleData;
else if (renderer instanceof ScatterChartRenderer)
data = renderer.mChart.scatterData;
else if (renderer instanceof BubbleChartRenderer)
data = renderer.mChart.bubbleData;
if (!data) {
continue;
}
const dataIndex = datas.indexOf(data);
this.mHighlightBuffer = [];
for (const h of indices) {
if (h.dataIndex === dataIndex || h.dataIndex === -1)
this.mHighlightBuffer.push(h);
}
renderer.drawHighlighted(c, this.mHighlightBuffer);
}
}
/**
* Returns the sub-renderer object at the specified index.
*
* @param index
* @return
*/
getSubRenderer(index) {
if (index >= this.renderers.length || index < 0) {
return null;
}
else {
return this.renderers[index];
}
}
/**
* Returns all sub-renderers.
*/
getSubRenderers() {
return this.renderers;
}
setSubRenderers(renderers) {
this.renderers = renderers;
}
}
//# sourceMappingURL=CombinedChartRenderer.js.map