From f305e0bdc295592c50751829a0a20c42cc9b72fb Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Mon, 23 Nov 2020 12:23:45 +0200 Subject: [PATCH] reduce mempool size x axis labelling --- .../control/MempoolSizeFeeRatesChart.java | 48 +++++++++++-------- .../sparrow/net/MempoolRateSize.java | 8 ++++ 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/sparrowwallet/sparrow/control/MempoolSizeFeeRatesChart.java b/src/main/java/com/sparrowwallet/sparrow/control/MempoolSizeFeeRatesChart.java index 645c9121..7c224b20 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/MempoolSizeFeeRatesChart.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/MempoolSizeFeeRatesChart.java @@ -26,6 +26,7 @@ import java.util.stream.Collectors; public class MempoolSizeFeeRatesChart extends StackedAreaChart { private static final DateFormat dateFormatter = new SimpleDateFormat("HH:mm"); + public static final int MAX_PERIOD_HOURS = 2; private Tooltip tooltip; @@ -54,23 +55,22 @@ public class MempoolSizeFeeRatesChart extends StackedAreaChart { } Map> periodRateSizes = getPeriodRateSizes(mempoolRateSizes); - List categories = getCategories(periodRateSizes); + Map categories = getCategories(periodRateSizes); CategoryAxis categoryAxis = (CategoryAxis)getXAxis(); - if(categoryAxis.getCategories() == null) { - categoryAxis.setCategories(FXCollections.observableArrayList(categories)); - } else { - categoryAxis.getCategories().retainAll(categories); - categories.removeAll(categoryAxis.getCategories()); - categoryAxis.getCategories().addAll(categories); - } + categoryAxis.setTickMarkVisible(false); + categoryAxis.setTickLabelGap(10); + categoryAxis.setAutoRanging(false); + categoryAxis.setCategories(FXCollections.observableArrayList(categories.values())); + categoryAxis.invalidateRange(new ArrayList<>(categories.values())); categoryAxis.setGapStartAndEnd(false); categoryAxis.setTickLabelRotation(0); categoryAxis.setOnMouseMoved(mouseEvent -> { String category = categoryAxis.getValueForDisplay(mouseEvent.getX()); if(category != null) { - tooltip.setGraphic(new ChartTooltip(category, getData())); + Optional time = categories.entrySet().stream().filter(entry -> entry.getValue().equals(category)).map(entry -> dateFormatter.format(entry.getKey())).findFirst(); + time.ifPresent(s -> tooltip.setGraphic(new ChartTooltip(category, s, getData()))); } }); @@ -103,7 +103,7 @@ public class MempoolSizeFeeRatesChart extends StackedAreaChart { } } - series.getData().add(new XYChart.Data<>(dateFormatter.format(date), totalVSize)); + series.getData().add(new XYChart.Data<>(categories.get(date), totalVSize)); seriesTotalVSize += totalVSize; } @@ -114,8 +114,9 @@ public class MempoolSizeFeeRatesChart extends StackedAreaChart { previousFeeRate = feeRate; } - if(categories.iterator().hasNext()) { - tooltip.setGraphic(new ChartTooltip(categories.iterator().next(), getData())); + if(categories.keySet().iterator().hasNext()) { + String time = categories.values().iterator().next(); + tooltip.setGraphic(new ChartTooltip(time, time, getData())); numberAxis.setTickLabelsVisible(true); numberAxis.setOpacity(1); } else { @@ -129,7 +130,7 @@ public class MempoolSizeFeeRatesChart extends StackedAreaChart { return mempoolRateSizes; } - LocalDateTime period = LocalDateTime.now().minusHours(6); + LocalDateTime period = LocalDateTime.now().minusHours(MAX_PERIOD_HOURS); return mempoolRateSizes.entrySet().stream().filter(entry -> { LocalDateTime dateTime = entry.getKey().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); return dateTime.isAfter(period); @@ -138,18 +139,27 @@ public class MempoolSizeFeeRatesChart extends StackedAreaChart { TreeMap::new)); } - private List getCategories(Map> mempoolHistogram) { - List categories = new ArrayList<>(); - for(Date date : mempoolHistogram.keySet()) { - categories.add(dateFormatter.format(date)); + private Map getCategories(Map> mempoolHistogram) { + Map categories = new LinkedHashMap<>(); + + String invisible = "" + (char)29; + for(Iterator iter = mempoolHistogram.keySet().iterator(); iter.hasNext(); ) { + Date date = iter.next(); + String label = dateFormatter.format(date); + if(!categories.isEmpty() && iter.hasNext()) { + label = invisible; + invisible += (char)29; + } + + categories.put(date, label); } return categories; } private static class ChartTooltip extends VBox { - public ChartTooltip(String category, List> seriesList) { - Label title = new Label("At " + category); + public ChartTooltip(String category, String time, List> seriesList) { + Label title = new Label("At " + time); HBox titleBox = new HBox(title); title.getStyleClass().add("tooltip-title"); getChildren().add(titleBox); diff --git a/src/main/java/com/sparrowwallet/sparrow/net/MempoolRateSize.java b/src/main/java/com/sparrowwallet/sparrow/net/MempoolRateSize.java index 67c6d908..b0df8a55 100644 --- a/src/main/java/com/sparrowwallet/sparrow/net/MempoolRateSize.java +++ b/src/main/java/com/sparrowwallet/sparrow/net/MempoolRateSize.java @@ -40,4 +40,12 @@ public class MempoolRateSize implements Comparable { public int compareTo(MempoolRateSize other) { return Long.compare(fee, other.fee); } + + @Override + public String toString() { + return "MempoolRateSize{" + + "fee=" + fee + + ", vSize=" + vSize + + '}'; + } }