Update text field values when time interval selection changes

This commit is contained in:
chimp1984 2021-02-09 18:56:49 -05:00
parent f421411bba
commit 25f35fea9e
No known key found for this signature in database
GPG key ID: 9801B4EC591F90E3
3 changed files with 115 additions and 55 deletions

View file

@ -2443,7 +2443,7 @@ dao.factsAndFigures.supply.reimbursement=Reimbursement requests
dao.factsAndFigures.supply.genesisIssueAmount=BSQ issued at genesis transaction dao.factsAndFigures.supply.genesisIssueAmount=BSQ issued at genesis transaction
dao.factsAndFigures.supply.compRequestIssueAmount=BSQ issued for compensation requests dao.factsAndFigures.supply.compRequestIssueAmount=BSQ issued for compensation requests
dao.factsAndFigures.supply.reimbursementAmount=BSQ issued for reimbursement requests dao.factsAndFigures.supply.reimbursementAmount=BSQ issued for reimbursement requests
dao.factsAndFigures.supply.totalIssued=Total issues BSQ dao.factsAndFigures.supply.totalIssued=Total issued BSQ
dao.factsAndFigures.supply.totalBurned=Total burned BSQ dao.factsAndFigures.supply.totalBurned=Total burned BSQ
dao.factsAndFigures.supply.chart.tradeFee.toolTip={0}\n{1} dao.factsAndFigures.supply.chart.tradeFee.toolTip={0}\n{1}
dao.factsAndFigures.supply.burnt=BSQ burnt dao.factsAndFigures.supply.burnt=BSQ burnt

View file

@ -43,6 +43,9 @@ import javafx.scene.layout.VBox;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.beans.binding.Bindings;
import javafx.beans.property.ReadOnlyLongProperty;
import static bisq.desktop.util.FormBuilder.addTitledGroupBg; import static bisq.desktop.util.FormBuilder.addTitledGroupBg;
import static bisq.desktop.util.FormBuilder.addTopLabelReadOnlyTextField; import static bisq.desktop.util.FormBuilder.addTopLabelReadOnlyTextField;
@ -52,9 +55,9 @@ public class SupplyView extends ActivatableView<GridPane, Void> implements DaoSt
private final DaoChartView daoChartView; private final DaoChartView daoChartView;
private final BsqFormatter bsqFormatter; private final BsqFormatter bsqFormatter;
private TextField genesisIssueAmountTextField, compRequestIssueAmountTextField, reimbursementAmountTextField, private TextField genesisIssueAmountTextField, compensationAmountTextField, reimbursementAmountTextField,
totalBurntBsqTradeFeeTextField, totalLockedUpAmountTextField, totalUnlockingAmountTextField, bsqTradeFeeAmountTextField, totalLockedUpAmountTextField, totalUnlockingAmountTextField,
totalUnlockedAmountTextField, totalConfiscatedAmountTextField, totalProofOfBurnAmountTextField; totalUnlockedAmountTextField, totalConfiscatedAmountTextField, proofOfBurnAmountTextField;
private int gridRow = 0; private int gridRow = 0;
@ -80,17 +83,34 @@ public class SupplyView extends ActivatableView<GridPane, Void> implements DaoSt
@Override @Override
protected void activate() { protected void activate() {
daoFacade.addBsqStateListener(this);
compensationAmountTextField.textProperty().bind(Bindings.createStringBinding(
() -> getFormattedValue(daoChartView.compensationAmountProperty()),
daoChartView.compensationAmountProperty()));
reimbursementAmountTextField.textProperty().bind(Bindings.createStringBinding(
() -> getFormattedValue(daoChartView.reimbursementAmountProperty()),
daoChartView.reimbursementAmountProperty()));
bsqTradeFeeAmountTextField.textProperty().bind(Bindings.createStringBinding(
() -> getFormattedValue(daoChartView.bsqTradeFeeAmountProperty()),
daoChartView.bsqTradeFeeAmountProperty()));
proofOfBurnAmountTextField.textProperty().bind(Bindings.createStringBinding(
() -> getFormattedValue(daoChartView.proofOfBurnAmountProperty()),
daoChartView.proofOfBurnAmountProperty()));
Coin issuedAmountFromGenesis = daoFacade.getGenesisTotalSupply(); Coin issuedAmountFromGenesis = daoFacade.getGenesisTotalSupply();
genesisIssueAmountTextField.setText(bsqFormatter.formatAmountWithGroupSeparatorAndCode(issuedAmountFromGenesis)); genesisIssueAmountTextField.setText(bsqFormatter.formatAmountWithGroupSeparatorAndCode(issuedAmountFromGenesis));
updateWithBsqBlockChainData(); updateWithBsqBlockChainData();
daoFacade.addBsqStateListener(this);
} }
@Override @Override
protected void deactivate() { protected void deactivate() {
daoFacade.removeBsqStateListener(this); daoFacade.removeBsqStateListener(this);
compensationAmountTextField.textProperty().unbind();
reimbursementAmountTextField.textProperty().unbind();
bsqTradeFeeAmountTextField.textProperty().unbind();
proofOfBurnAmountTextField.textProperty().unbind();
} }
@ -137,17 +157,17 @@ public class SupplyView extends ActivatableView<GridPane, Void> implements DaoSt
genesisIssueAmountTextField = genesisAmountTuple.second; genesisIssueAmountTextField = genesisAmountTuple.second;
GridPane.setColumnSpan(genesisAmountTuple.third, 2); GridPane.setColumnSpan(genesisAmountTuple.third, 2);
compRequestIssueAmountTextField = addTopLabelReadOnlyTextField(root, ++gridRow, compensationAmountTextField = addTopLabelReadOnlyTextField(root, ++gridRow,
Res.get("dao.factsAndFigures.supply.compRequestIssueAmount")).second; Res.get("dao.factsAndFigures.supply.compRequestIssueAmount")).second;
reimbursementAmountTextField = addTopLabelReadOnlyTextField(root, gridRow, 1, reimbursementAmountTextField = addTopLabelReadOnlyTextField(root, gridRow, 1,
Res.get("dao.factsAndFigures.supply.reimbursementAmount")).second; Res.get("dao.factsAndFigures.supply.reimbursementAmount")).second;
addTitledGroupBg(root, ++gridRow, 1, Res.get("dao.factsAndFigures.supply.burnt"), Layout.GROUP_DISTANCE_WITHOUT_SEPARATOR); addTitledGroupBg(root, ++gridRow, 1, Res.get("dao.factsAndFigures.supply.burnt"), Layout.GROUP_DISTANCE_WITHOUT_SEPARATOR);
totalBurntBsqTradeFeeTextField = addTopLabelReadOnlyTextField(root, gridRow, bsqTradeFeeAmountTextField = addTopLabelReadOnlyTextField(root, gridRow,
Res.get("dao.factsAndFigures.supply.bsqTradeFee"), Layout.COMPACT_FIRST_ROW_AND_COMPACT_GROUP_DISTANCE).second; Res.get("dao.factsAndFigures.supply.bsqTradeFee"), Layout.COMPACT_FIRST_ROW_AND_COMPACT_GROUP_DISTANCE).second;
totalProofOfBurnAmountTextField = addTopLabelReadOnlyTextField(root, gridRow, 1, proofOfBurnAmountTextField = addTopLabelReadOnlyTextField(root, gridRow, 1,
Res.get("dao.factsAndFigures.supply.proofOfBurn"), Layout.COMPACT_FIRST_ROW_AND_COMPACT_GROUP_DISTANCE).second; Res.get("dao.factsAndFigures.supply.proofOfBurn"), Layout.COMPACT_FIRST_ROW_AND_COMPACT_GROUP_DISTANCE).second;
} }
@ -174,27 +194,6 @@ public class SupplyView extends ActivatableView<GridPane, Void> implements DaoSt
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
private void updateWithBsqBlockChainData() { private void updateWithBsqBlockChainData() {
updateEconomicsData();
updateLockedTxData();
}
private void updateEconomicsData() {
// We use the supplyDataProvider to get the adjusted data with static historical data as well to use the same
// monthly scoped data.
Coin issuedAmountFromCompRequests = Coin.valueOf(daoChartView.getCompensationAmount());
compRequestIssueAmountTextField.setText(bsqFormatter.formatAmountWithGroupSeparatorAndCode(issuedAmountFromCompRequests));
Coin issuedAmountFromReimbursementRequests = Coin.valueOf(daoChartView.getReimbursementAmount());
reimbursementAmountTextField.setText(bsqFormatter.formatAmountWithGroupSeparatorAndCode(issuedAmountFromReimbursementRequests));
Coin totalBurntTradeFee = Coin.valueOf(daoChartView.getBsqTradeFeeAmount());
totalBurntBsqTradeFeeTextField.setText(bsqFormatter.formatAmountWithGroupSeparatorAndCode(totalBurntTradeFee));
Coin totalProofOfBurnAmount = Coin.valueOf(daoChartView.getProofOfBurnAmount());
totalProofOfBurnAmountTextField.setText(bsqFormatter.formatAmountWithGroupSeparatorAndCode(totalProofOfBurnAmount));
}
private void updateLockedTxData() {
Coin totalLockedUpAmount = Coin.valueOf(daoFacade.getTotalLockupAmount()); Coin totalLockedUpAmount = Coin.valueOf(daoFacade.getTotalLockupAmount());
totalLockedUpAmountTextField.setText(bsqFormatter.formatAmountWithGroupSeparatorAndCode(totalLockedUpAmount)); totalLockedUpAmountTextField.setText(bsqFormatter.formatAmountWithGroupSeparatorAndCode(totalLockedUpAmount));
@ -207,4 +206,8 @@ public class SupplyView extends ActivatableView<GridPane, Void> implements DaoSt
Coin totalConfiscatedAmount = Coin.valueOf(daoFacade.getTotalAmountOfConfiscatedTxOutputs()); Coin totalConfiscatedAmount = Coin.valueOf(daoFacade.getTotalAmountOfConfiscatedTxOutputs());
totalConfiscatedAmountTextField.setText(bsqFormatter.formatAmountWithGroupSeparatorAndCode(totalConfiscatedAmount)); totalConfiscatedAmountTextField.setText(bsqFormatter.formatAmountWithGroupSeparatorAndCode(totalConfiscatedAmount));
} }
private String getFormattedValue(ReadOnlyLongProperty property) {
return bsqFormatter.formatAmountWithGroupSeparatorAndCode(Coin.valueOf(property.get()));
}
} }

View file

@ -25,6 +25,10 @@ import javax.inject.Inject;
import javafx.scene.chart.XYChart; import javafx.scene.chart.XYChart;
import javafx.beans.property.LongProperty;
import javafx.beans.property.ReadOnlyLongProperty;
import javafx.beans.property.SimpleLongProperty;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@ -32,6 +36,11 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public class DaoChartView extends ChartView<DaoChartViewModel> { public class DaoChartView extends ChartView<DaoChartViewModel> {
private LongProperty compensationAmountProperty = new SimpleLongProperty();
private LongProperty reimbursementAmountProperty = new SimpleLongProperty();
private LongProperty bsqTradeFeeAmountProperty = new SimpleLongProperty();
private LongProperty proofOfBurnAmountProperty = new SimpleLongProperty();
private XYChart.Series<Number, Number> seriesBsqTradeFee, seriesProofOfBurn, seriesCompensation, private XYChart.Series<Number, Number> seriesBsqTradeFee, seriesProofOfBurn, seriesCompensation,
seriesReimbursement, seriesTotalIssued, seriesTotalBurned; seriesReimbursement, seriesTotalIssued, seriesTotalBurned;
@ -46,20 +55,36 @@ public class DaoChartView extends ChartView<DaoChartViewModel> {
// API Total amounts // API Total amounts
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
public long getCompensationAmount() { public long getCompensationAmountProperty() {
return model.getCompensationAmount(); return model.getCompensationAmount();
} }
public long getReimbursementAmount() { public ReadOnlyLongProperty compensationAmountProperty() {
return model.getReimbursementAmount(); if (compensationAmountProperty.get() == 0) {
compensationAmountProperty.set(model.getCompensationAmount());
}
return compensationAmountProperty;
} }
public long getBsqTradeFeeAmount() { public ReadOnlyLongProperty reimbursementAmountProperty() {
return model.getBsqTradeFeeAmount(); if (reimbursementAmountProperty.get() == 0) {
reimbursementAmountProperty.set(model.getReimbursementAmount());
}
return reimbursementAmountProperty;
} }
public long getProofOfBurnAmount() { public ReadOnlyLongProperty bsqTradeFeeAmountProperty() {
return model.getProofOfBurnAmount(); if (bsqTradeFeeAmountProperty.get() == 0) {
bsqTradeFeeAmountProperty.set(model.getBsqTradeFeeAmount());
}
return bsqTradeFeeAmountProperty;
}
public ReadOnlyLongProperty proofOfBurnAmountProperty() {
if (proofOfBurnAmountProperty.get() == 0) {
proofOfBurnAmountProperty.set(model.getProofOfBurnAmount());
}
return proofOfBurnAmountProperty;
} }
@ -129,18 +154,18 @@ public class DaoChartView extends ChartView<DaoChartViewModel> {
protected void activateSeries(XYChart.Series<Number, Number> series) { protected void activateSeries(XYChart.Series<Number, Number> series) {
super.activateSeries(series); super.activateSeries(series);
if (getSeriesId(series).equals(getSeriesId(seriesBsqTradeFee))) { if (getSeriesId(series).equals(getSeriesId(seriesTotalIssued))) {
seriesBsqTradeFee.getData().setAll(model.getBsqTradeFeeChartData()); applyTotalIssued();
} else if (getSeriesId(series).equals(getSeriesId(seriesCompensation))) { } else if (getSeriesId(series).equals(getSeriesId(seriesCompensation))) {
seriesCompensation.getData().setAll(model.getCompensationChartData()); applyCompensation();
} else if (getSeriesId(series).equals(getSeriesId(seriesProofOfBurn))) {
seriesProofOfBurn.getData().setAll(model.getProofOfBurnChartData());
} else if (getSeriesId(series).equals(getSeriesId(seriesReimbursement))) { } else if (getSeriesId(series).equals(getSeriesId(seriesReimbursement))) {
seriesReimbursement.getData().setAll(model.getReimbursementChartData()); applyReimbursement();
} else if (getSeriesId(series).equals(getSeriesId(seriesTotalIssued))) {
seriesTotalIssued.getData().setAll(model.getTotalIssuedChartData());
} else if (getSeriesId(series).equals(getSeriesId(seriesTotalBurned))) { } else if (getSeriesId(series).equals(getSeriesId(seriesTotalBurned))) {
seriesTotalBurned.getData().setAll(model.getTotalBurnedChartData()); applyTotalBurned();
} else if (getSeriesId(series).equals(getSeriesId(seriesBsqTradeFee))) {
applyBsqTradeFee();
} else if (getSeriesId(series).equals(getSeriesId(seriesProofOfBurn))) {
applyProofOfBurn();
} }
} }
@ -152,22 +177,54 @@ public class DaoChartView extends ChartView<DaoChartViewModel> {
@Override @Override
protected void applyData() { protected void applyData() {
if (activeSeries.contains(seriesTotalIssued)) { if (activeSeries.contains(seriesTotalIssued)) {
seriesTotalIssued.getData().setAll(model.getTotalIssuedChartData()); applyTotalIssued();
}
if (activeSeries.contains(seriesTotalBurned)) {
seriesTotalBurned.getData().setAll(model.getTotalBurnedChartData());
} }
if (activeSeries.contains(seriesCompensation)) { if (activeSeries.contains(seriesCompensation)) {
seriesCompensation.getData().setAll(model.getCompensationChartData()); applyCompensation();
} }
if (activeSeries.contains(seriesReimbursement)) { if (activeSeries.contains(seriesReimbursement)) {
seriesReimbursement.getData().setAll(model.getReimbursementChartData()); applyReimbursement();
}
if (activeSeries.contains(seriesTotalBurned)) {
applyTotalBurned();
} }
if (activeSeries.contains(seriesBsqTradeFee)) { if (activeSeries.contains(seriesBsqTradeFee)) {
seriesBsqTradeFee.getData().setAll(model.getBsqTradeFeeChartData()); applyBsqTradeFee();
} }
if (activeSeries.contains(seriesProofOfBurn)) { if (activeSeries.contains(seriesProofOfBurn)) {
seriesProofOfBurn.getData().setAll(model.getProofOfBurnChartData()); applyProofOfBurn();
} }
} }
private void applyTotalIssued() {
seriesTotalIssued.getData().setAll(model.getTotalIssuedChartData());
compensationAmountProperty.set(model.getCompensationAmount());
reimbursementAmountProperty.set(model.getReimbursementAmount());
}
private void applyCompensation() {
seriesCompensation.getData().setAll(model.getCompensationChartData());
compensationAmountProperty.set(model.getCompensationAmount());
}
private void applyReimbursement() {
seriesReimbursement.getData().setAll(model.getReimbursementChartData());
reimbursementAmountProperty.set(model.getReimbursementAmount());
}
private void applyTotalBurned() {
seriesTotalBurned.getData().setAll(model.getTotalBurnedChartData());
bsqTradeFeeAmountProperty.set(model.getBsqTradeFeeAmount());
proofOfBurnAmountProperty.set(model.getProofOfBurnAmount());
}
private void applyBsqTradeFee() {
seriesBsqTradeFee.getData().setAll(model.getBsqTradeFeeChartData());
bsqTradeFeeAmountProperty.set(model.getBsqTradeFeeAmount());
}
private void applyProofOfBurn() {
seriesProofOfBurn.getData().setAll(model.getProofOfBurnChartData());
proofOfBurnAmountProperty.set(model.getProofOfBurnAmount());
}
} }