Search in sources :

Example 1 with MempoolRateSize

use of com.sparrowwallet.sparrow.net.MempoolRateSize in project sparrow by sparrowwallet.

the class MempoolSizeFeeRatesChart method update.

public void update(Map<Date, Set<MempoolRateSize>> mempoolRateSizes) {
    getData().clear();
    if (tooltip.isShowing()) {
        tooltip.hide();
    }
    Map<Date, Set<MempoolRateSize>> periodRateSizes = getPeriodRateSizes(mempoolRateSizes);
    Map<Date, String> categories = getCategories(periodRateSizes);
    CategoryAxis categoryAxis = (CategoryAxis) getXAxis();
    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);
    NumberAxis numberAxis = (NumberAxis) getYAxis();
    this.setOnMouseMoved(mouseEvent -> {
        Point2D sceneCoords = this.localToScene(mouseEvent.getX(), mouseEvent.getY());
        String category = categoryAxis.getValueForDisplay(categoryAxis.sceneToLocal(sceneCoords).getX());
        if (category != null) {
            Optional<String> 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())));
        }
    });
    long previousFeeRate = 0;
    for (Long feeRate : AppServices.FEE_RATES_RANGE) {
        XYChart.Series<String, Number> series = new XYChart.Series<>();
        series.setName(feeRate + "+ sats/vB");
        long seriesTotalVSize = 0;
        for (Date date : periodRateSizes.keySet()) {
            Set<MempoolRateSize> rateSizes = periodRateSizes.get(date);
            long totalVSize = 0;
            for (MempoolRateSize rateSize : rateSizes) {
                if (rateSize.getFee() > previousFeeRate && rateSize.getFee() <= feeRate) {
                    totalVSize += rateSize.getVSize();
                }
            }
            series.getData().add(new XYChart.Data<>(categories.get(date), totalVSize));
            seriesTotalVSize += totalVSize;
        }
        if (seriesTotalVSize > 0) {
            getData().add(series);
        }
        previousFeeRate = feeRate;
    }
    final double maxMvB = getMaxMvB(getData());
    numberAxis.setTickLabelFormatter(new StringConverter<Number>() {

        @Override
        public String toString(Number object) {
            long vSizeBytes = object.longValue();
            if (maxMvB > Y_VALUE_BREAK_MVB) {
                return (vSizeBytes / (1000 * 1000)) + " MvB";
            } else {
                return (vSizeBytes / (1000)) + " kvB";
            }
        }

        @Override
        public Number fromString(String string) {
            return null;
        }
    });
    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 {
        numberAxis.setTickLabelsVisible(false);
        numberAxis.setOpacity(0);
    }
}
Also used : HBox(javafx.scene.layout.HBox) NamedArg(javafx.beans.NamedArg) java.util(java.util) Label(javafx.scene.control.Label) Node(javafx.scene.Node) LocalDateTime(java.time.LocalDateTime) MempoolRateSize(com.sparrowwallet.sparrow.net.MempoolRateSize) FXCollections(javafx.collections.FXCollections) SimpleDateFormat(java.text.SimpleDateFormat) StringConverter(javafx.util.StringConverter) VBox(javafx.scene.layout.VBox) Collectors(java.util.stream.Collectors) ZoneId(java.time.ZoneId) Platform(javafx.application.Platform) Cursor(javafx.scene.Cursor) Duration(javafx.util.Duration) AppServices(com.sparrowwallet.sparrow.AppServices) Glyph(org.controlsfx.glyphfont.Glyph) javafx.scene.chart(javafx.scene.chart) FontAwesome5(com.sparrowwallet.sparrow.glyphfont.FontAwesome5) Point2D(javafx.geometry.Point2D) Tooltip(javafx.scene.control.Tooltip) DateFormat(java.text.DateFormat) Point2D(javafx.geometry.Point2D) MempoolRateSize(com.sparrowwallet.sparrow.net.MempoolRateSize)

Aggregations

AppServices (com.sparrowwallet.sparrow.AppServices)1 FontAwesome5 (com.sparrowwallet.sparrow.glyphfont.FontAwesome5)1 MempoolRateSize (com.sparrowwallet.sparrow.net.MempoolRateSize)1 DateFormat (java.text.DateFormat)1 SimpleDateFormat (java.text.SimpleDateFormat)1 LocalDateTime (java.time.LocalDateTime)1 ZoneId (java.time.ZoneId)1 java.util (java.util)1 Collectors (java.util.stream.Collectors)1 Platform (javafx.application.Platform)1 NamedArg (javafx.beans.NamedArg)1 FXCollections (javafx.collections.FXCollections)1 Point2D (javafx.geometry.Point2D)1 Cursor (javafx.scene.Cursor)1 Node (javafx.scene.Node)1 javafx.scene.chart (javafx.scene.chart)1 Label (javafx.scene.control.Label)1 Tooltip (javafx.scene.control.Tooltip)1 HBox (javafx.scene.layout.HBox)1 VBox (javafx.scene.layout.VBox)1