Only calculate data for active series

This commit is contained in:
chimp1984 2021-02-05 19:41:43 -05:00
parent 67d76cda27
commit 320a2f8a1f
No known key found for this signature in database
GPG key ID: 9801B4EC591F90E3
3 changed files with 76 additions and 28 deletions

View file

@ -93,7 +93,7 @@ public abstract class ChartModel extends ActivatableViewModel {
protected abstract TemporalAdjuster getTemporalAdjuster();
Predicate<Long> getPredicate() {
public Predicate<Long> getPredicate() {
return predicate;
}

View file

@ -85,6 +85,7 @@ public abstract class ChartView<T extends ChartModel> extends ActivatableView<VB
private final List<Node> dividerNodes = new ArrayList<>();
private final Double[] dividerPositions = new Double[]{0d, 1d};
private final ToggleGroup timeUnitToggleGroup = new ToggleGroup();
protected final Set<String> activeSeries = new HashSet<>();
private boolean pressed;
private double x;
private ChangeListener<Number> widthListener;
@ -104,7 +105,8 @@ public abstract class ChartView<T extends ChartModel> extends ActivatableView<VB
xAxis = getXAxis();
yAxis = getYAxis();
chart = getChart();
addSeries();
initSeries();
addActiveSeries();
HBox legendBox1 = getLegendBox(getSeriesForLegend1());
Collection<XYChart.Series<Number, Number>> seriesForLegend2 = getSeriesForLegend2();
HBox legendBox2 = null;
@ -135,6 +137,8 @@ public abstract class ChartView<T extends ChartModel> extends ActivatableView<VB
root.getChildren().addAll(timeIntervalBox, chart, box);
}
protected abstract void addActiveSeries();
///////////////////////////////////////////////////////////////////////////////////////////
// Lifecycle
///////////////////////////////////////////////////////////////////////////////////////////
@ -260,7 +264,7 @@ public abstract class ChartView<T extends ChartModel> extends ActivatableView<VB
return chart;
}
protected abstract void addSeries();
protected abstract void initSeries();
protected HBox getLegendBox(Collection<XYChart.Series<Number, Number>> data) {
HBox hBox = new HBox();
@ -269,7 +273,7 @@ public abstract class ChartView<T extends ChartModel> extends ActivatableView<VB
AutoTooltipSlideToggleButton toggle = new AutoTooltipSlideToggleButton();
toggle.setMinWidth(200);
toggle.setAlignment(Pos.TOP_LEFT);
String seriesName = series.getName();
String seriesName = getSeriesId(series);
toggleBySeriesName.put(seriesName, toggle);
toggle.setText(seriesName);
toggle.setId("charts-legend-toggle" + seriesIndexMap.get(seriesName));
@ -289,16 +293,22 @@ public abstract class ChartView<T extends ChartModel> extends ActivatableView<VB
private void onSelectLegendToggle(XYChart.Series<Number, Number> series, boolean isSelected) {
if (isSelected) {
chart.getData().add(series);
activateSeries(series);
} else {
chart.getData().remove(series);
activeSeries.remove(getSeriesId(series));
}
applySeriesStyles();
applyTooltip();
}
protected void activateSeries(XYChart.Series<Number, Number> series) {
chart.getData().add(series);
activeSeries.add(getSeriesId(series));
}
protected void hideSeries(XYChart.Series<Number, Number> series) {
toggleBySeriesName.get(series.getName()).setSelected(false);
toggleBySeriesName.get(getSeriesId(series)).setSelected(false);
onSelectLegendToggle(series, false);
}
@ -336,7 +346,7 @@ public abstract class ChartView<T extends ChartModel> extends ActivatableView<VB
model.applyTemporalAdjuster(temporalAdjuster);
findToggleByTemporalAdjuster(temporalAdjuster)
.map(e -> (TemporalAdjusterUtil.Interval) e.getUserData())
.ifPresent(interval -> setDateFormatPatters(interval));
.ifPresent(this::setDateFormatPatters);
updateData(model.getPredicate());
}
@ -414,7 +424,7 @@ public abstract class ChartView<T extends ChartModel> extends ActivatableView<VB
protected void applySeriesStyles() {
for (int index = 0; index < chart.getData().size(); index++) {
XYChart.Series<Number, Number> series = chart.getData().get(index);
int staticIndex = seriesIndexMap.get(series.getName());
int staticIndex = seriesIndexMap.get(getSeriesId(series));
Set<Node> lines = getNodesForStyle(series.getNode(), ".default-color%d.chart-series-line");
Stream<Node> symbols = series.getData().stream().map(XYChart.Data::getNode)
.flatMap(node -> getNodesForStyle(node, ".default-color%d.chart-line-symbol").stream());
@ -450,6 +460,10 @@ public abstract class ChartView<T extends ChartModel> extends ActivatableView<VB
.findAny();
}
// We use the name as id as there is no other suitable data inside series
protected String getSeriesId(XYChart.Series<Number, Number> series) {
return series.getName();
}
///////////////////////////////////////////////////////////////////////////////////////////
// Timeline navigation

View file

@ -175,36 +175,41 @@ public class DaoEconomyChartView extends ChartView<DaoEconomyChartModel> {
}
@Override
protected void addSeries() {
protected void initSeries() {
seriesTotalIssued = new XYChart.Series<>();
seriesTotalIssued.setName(Res.get("dao.factsAndFigures.supply.totalIssued"));
seriesIndexMap.put(seriesTotalIssued.getName(), 0);
chart.getData().add(seriesTotalIssued);
seriesIndexMap.put(getSeriesId(seriesTotalIssued), 0);
seriesTotalBurned = new XYChart.Series<>();
seriesTotalBurned.setName(Res.get("dao.factsAndFigures.supply.totalBurned"));
seriesIndexMap.put(seriesTotalBurned.getName(), 1);
chart.getData().add(seriesTotalBurned);
seriesIndexMap.put(getSeriesId(seriesTotalBurned), 1);
seriesCompensation = new XYChart.Series<>();
seriesCompensation.setName(Res.get("dao.factsAndFigures.supply.compReq"));
seriesIndexMap.put(seriesCompensation.getName(), 2);
chart.getData().add(seriesCompensation);
seriesIndexMap.put(getSeriesId(seriesCompensation), 2);
seriesReimbursement = new XYChart.Series<>();
seriesReimbursement.setName(Res.get("dao.factsAndFigures.supply.reimbursement"));
seriesIndexMap.put(seriesReimbursement.getName(), 3);
chart.getData().add(seriesReimbursement);
seriesIndexMap.put(getSeriesId(seriesReimbursement), 3);
seriesBsqTradeFee = new XYChart.Series<>();
seriesBsqTradeFee.setName(Res.get("dao.factsAndFigures.supply.bsqTradeFee"));
seriesIndexMap.put(seriesBsqTradeFee.getName(), 4);
chart.getData().add(seriesBsqTradeFee);
seriesIndexMap.put(getSeriesId(seriesBsqTradeFee), 4);
seriesProofOfBurn = new XYChart.Series<>();
seriesProofOfBurn.setName(Res.get("dao.factsAndFigures.supply.proofOfBurn"));
seriesIndexMap.put(seriesProofOfBurn.getName(), 5);
chart.getData().add(seriesProofOfBurn);
seriesIndexMap.put(getSeriesId(seriesProofOfBurn), 5);
}
@Override
protected void addActiveSeries() {
addSeries(seriesTotalIssued);
addSeries(seriesTotalBurned);
}
private void addSeries(XYChart.Series<Number, Number> series) {
activeSeries.add(getSeriesId(series));
chart.getData().add(series);
}
@Override
@ -233,15 +238,18 @@ public class DaoEconomyChartView extends ChartView<DaoEconomyChartModel> {
xAxis.setUpperBound(model.getUpperBound().doubleValue());
updateOtherSeries(predicate);
applyTooltip();
UserThread.execute(this::setTimeLineLabels);
}
@Override
protected void updateData(Predicate<Long> predicate) {
if (activeSeries.contains(getSeriesId(seriesBsqTradeFee))) {
seriesBsqTradeFee.getData().setAll(model.getBsqTradeFeeChartData(predicate));
}
if (activeSeries.contains(getSeriesId(seriesCompensation))) {
seriesCompensation.getData().setAll(model.getCompensationChartData(predicate));
}
updateOtherSeries(predicate);
@ -249,10 +257,36 @@ public class DaoEconomyChartView extends ChartView<DaoEconomyChartModel> {
applySeriesStyles();
}
@Override
protected void activateSeries(XYChart.Series<Number, Number> series) {
super.activateSeries(series);
if (getSeriesId(series).equals(getSeriesId(seriesBsqTradeFee))) {
seriesBsqTradeFee.getData().setAll(model.getBsqTradeFeeChartData(model.getPredicate()));
} else if (getSeriesId(series).equals(getSeriesId(seriesCompensation))) {
seriesCompensation.getData().setAll(model.getCompensationChartData(model.getPredicate()));
} else if (getSeriesId(series).equals(getSeriesId(seriesProofOfBurn))) {
seriesProofOfBurn.getData().setAll(model.getProofOfBurnChartData(model.getPredicate()));
} else if (getSeriesId(series).equals(getSeriesId(seriesReimbursement))) {
seriesReimbursement.getData().setAll(model.getReimbursementChartData(model.getPredicate()));
} else if (getSeriesId(series).equals(getSeriesId(seriesTotalIssued))) {
seriesTotalIssued.getData().setAll(model.getTotalIssuedChartData(model.getPredicate()));
} else if (getSeriesId(series).equals(getSeriesId(seriesTotalBurned))) {
seriesTotalBurned.getData().setAll(model.getTotalBurnedChartData(model.getPredicate()));
}
}
private void updateOtherSeries(Predicate<Long> predicate) {
if (activeSeries.contains(getSeriesId(seriesProofOfBurn))) {
seriesProofOfBurn.getData().setAll(model.getProofOfBurnChartData(predicate));
}
if (activeSeries.contains(getSeriesId(seriesReimbursement))) {
seriesReimbursement.getData().setAll(model.getReimbursementChartData(predicate));
}
if (activeSeries.contains(getSeriesId(seriesTotalIssued))) {
seriesTotalIssued.getData().setAll(model.getTotalIssuedChartData(predicate));
}
if (activeSeries.contains(getSeriesId(seriesTotalBurned))) {
seriesTotalBurned.getData().setAll(model.getTotalBurnedChartData(predicate));
}
}
}