mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-06-24 23:00:36 -04:00
Add market price feed for altcoins
This commit is contained in:
parent
d2e8c6afd7
commit
eefafab977
14 changed files with 177 additions and 63 deletions
|
@ -247,7 +247,7 @@ public class MainView extends InitializableView<StackPane, MainViewModel> {
|
|||
private Tuple3<TextField, Label, VBox> getMarketPriceBox(String text) {
|
||||
TextField textField = new TextField();
|
||||
textField.setEditable(false);
|
||||
textField.setPrefWidth(140);
|
||||
textField.setPrefWidth(150);
|
||||
textField.setMouseTransparent(true);
|
||||
textField.setFocusTraversable(false);
|
||||
textField.setStyle("-fx-alignment: center; -fx-background-color: -bs-bg-grey;");
|
||||
|
|
|
@ -83,11 +83,20 @@ public abstract class OfferView extends ActivatableView<TabPane, Void> {
|
|||
UserThread.execute(InputTextField::hideErrorMessageDisplay);
|
||||
if (newValue != null) {
|
||||
if (newValue.equals(createOfferTab) && createOfferView != null) {
|
||||
createOfferView.onTabSelected();
|
||||
createOfferView.onTabSelected(true);
|
||||
} else if (newValue.equals(takeOfferTab) && takeOfferView != null) {
|
||||
takeOfferView.onTabSelected();
|
||||
takeOfferView.onTabSelected(true);
|
||||
} else if (newValue.equals(offerBookTab) && offerBookView != null) {
|
||||
offerBookView.onTabSelected();
|
||||
offerBookView.onTabSelected(true);
|
||||
}
|
||||
}
|
||||
if (oldValue != null) {
|
||||
if (oldValue.equals(createOfferTab) && createOfferView != null) {
|
||||
createOfferView.onTabSelected(false);
|
||||
} else if (oldValue.equals(takeOfferTab) && takeOfferView != null) {
|
||||
takeOfferView.onTabSelected(false);
|
||||
} else if (oldValue.equals(offerBookTab) && offerBookView != null) {
|
||||
offerBookView.onTabSelected(false);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -130,7 +139,8 @@ public abstract class OfferView extends ActivatableView<TabPane, Void> {
|
|||
offerBookTab.setContent(view.getRoot());
|
||||
tabPane.getTabs().add(offerBookTab);
|
||||
offerBookView = (OfferBookView) view;
|
||||
|
||||
offerBookView.onTabSelected(true);
|
||||
|
||||
OfferActionHandler offerActionHandler = new OfferActionHandler() {
|
||||
@Override
|
||||
public void onCreateOffer(TradeCurrency tradeCurrency) {
|
||||
|
|
|
@ -103,6 +103,7 @@ class CreateOfferDataModel extends ActivatableDataModel {
|
|||
|
||||
private PaymentAccount paymentAccount;
|
||||
private WalletEventListener walletEventListener;
|
||||
private boolean isTabSelected;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -181,6 +182,9 @@ class CreateOfferDataModel extends ActivatableDataModel {
|
|||
|
||||
if (direction == Offer.Direction.BUY)
|
||||
calculateTotalToPay();
|
||||
|
||||
if (isTabSelected)
|
||||
marketPriceFeed.setCurrencyCode(tradeCurrencyCode.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -227,8 +231,10 @@ class CreateOfferDataModel extends ActivatableDataModel {
|
|||
marketPriceFeed.setCurrencyCode(tradeCurrencyCode.get());
|
||||
}
|
||||
|
||||
void onTabSelected() {
|
||||
marketPriceFeed.setCurrencyCode(tradeCurrencyCode.get());
|
||||
void onTabSelected(boolean isSelected) {
|
||||
this.isTabSelected = isSelected;
|
||||
if (isTabSelected)
|
||||
marketPriceFeed.setCurrencyCode(tradeCurrencyCode.get());
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -201,8 +201,8 @@ public class CreateOfferView extends ActivatableViewAndModel<AnchorPane, CreateO
|
|||
this.closeHandler = closeHandler;
|
||||
}
|
||||
|
||||
public void onTabSelected() {
|
||||
model.dataModel.onTabSelected();
|
||||
public void onTabSelected(boolean isSelected) {
|
||||
model.dataModel.onTabSelected(isSelected);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -197,8 +197,8 @@ public class OfferBookView extends ActivatableViewAndModel<GridPane, OfferBookVi
|
|||
this.offerActionHandler = offerActionHandler;
|
||||
}
|
||||
|
||||
public void onTabSelected() {
|
||||
model.onTabSelected();
|
||||
public void onTabSelected(boolean isSelected) {
|
||||
model.onTabSelected(isSelected);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -67,6 +67,7 @@ class OfferBookViewModel extends ActivatableViewModel {
|
|||
private PaymentMethod paymentMethod = new AllPaymentMethodsEntry();
|
||||
private final ObservableList<OfferBookListItem> offerBookListItems;
|
||||
private final ListChangeListener<OfferBookListItem> listChangeListener;
|
||||
private boolean isTabSelected;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Constructor, lifecycle
|
||||
|
@ -94,7 +95,6 @@ class OfferBookViewModel extends ActivatableViewModel {
|
|||
|
||||
tradeCurrency = CurrencyUtil.getDefaultTradeCurrency();
|
||||
tradeCurrencyCode.set(tradeCurrency.getCode());
|
||||
marketPriceFeed.setCurrencyCode(tradeCurrencyCode.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -103,6 +103,8 @@ class OfferBookViewModel extends ActivatableViewModel {
|
|||
offerBookListItems.addListener(listChangeListener);
|
||||
offerBook.fillOfferBookListItems();
|
||||
filterList();
|
||||
if (isTabSelected)
|
||||
marketPriceFeed.setCurrencyCode(tradeCurrencyCode.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -119,10 +121,12 @@ class OfferBookViewModel extends ActivatableViewModel {
|
|||
this.direction = direction;
|
||||
}
|
||||
|
||||
void onTabSelected() {
|
||||
marketPriceFeed.setCurrencyCode(tradeCurrencyCode.get());
|
||||
void onTabSelected(boolean isSelected) {
|
||||
this.isTabSelected = isSelected;
|
||||
if (isTabSelected)
|
||||
marketPriceFeed.setCurrencyCode(tradeCurrencyCode.get());
|
||||
}
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// UI actions
|
||||
|
|
|
@ -82,6 +82,7 @@ class TakeOfferDataModel extends ActivatableDataModel {
|
|||
|
||||
private BalanceListener balanceListener;
|
||||
private PaymentAccount paymentAccount;
|
||||
private boolean isTabSelected;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -114,6 +115,9 @@ class TakeOfferDataModel extends ActivatableDataModel {
|
|||
addBindings();
|
||||
addListeners();
|
||||
updateBalance(walletService.getBalanceForAddress(addressEntry.getAddress()));
|
||||
|
||||
if (isTabSelected)
|
||||
marketPriceFeed.setCurrencyCode(offer.getCurrencyCode());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -162,8 +166,10 @@ class TakeOfferDataModel extends ActivatableDataModel {
|
|||
tradeManager.checkOfferAvailability(offer, resultHandler);
|
||||
}
|
||||
|
||||
void onTabSelected() {
|
||||
marketPriceFeed.setCurrencyCode(offer.getCurrencyCode());
|
||||
void onTabSelected(boolean isSelected) {
|
||||
this.isTabSelected = isSelected;
|
||||
if (isTabSelected)
|
||||
marketPriceFeed.setCurrencyCode(offer.getCurrencyCode());
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -310,8 +310,8 @@ public class TakeOfferView extends ActivatableViewAndModel<AnchorPane, TakeOffer
|
|||
new Popup().warning("You have already funds paid in.\nIn the <Funds/Open for withdrawal> section you can withdraw those funds.").show();*/
|
||||
}
|
||||
|
||||
public void onTabSelected() {
|
||||
model.dataModel.onTabSelected();
|
||||
public void onTabSelected(boolean isSelected) {
|
||||
model.dataModel.onTabSelected(isSelected);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ import io.bitsquare.gui.common.view.FxmlView;
|
|||
import io.bitsquare.gui.components.HyperlinkWithIcon;
|
||||
import io.bitsquare.gui.popups.OpenEmergencyTicketPopup;
|
||||
import io.bitsquare.gui.popups.TradeDetailsPopup;
|
||||
import io.bitsquare.gui.util.BSFormatter;
|
||||
import io.bitsquare.trade.Trade;
|
||||
import javafx.beans.property.ReadOnlyBooleanProperty;
|
||||
import javafx.beans.property.ReadOnlyObjectWrapper;
|
||||
|
@ -50,6 +51,7 @@ import javax.inject.Inject;
|
|||
public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTradesViewModel> {
|
||||
|
||||
private final TradeDetailsPopup tradeDetailsPopup;
|
||||
private BSFormatter formatter;
|
||||
@FXML
|
||||
TableView<PendingTradesListItem> table;
|
||||
@FXML
|
||||
|
@ -74,9 +76,10 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
|
|||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@Inject
|
||||
public PendingTradesView(PendingTradesViewModel model, TradeDetailsPopup tradeDetailsPopup) {
|
||||
public PendingTradesView(PendingTradesViewModel model, TradeDetailsPopup tradeDetailsPopup, BSFormatter formatter) {
|
||||
super(model);
|
||||
this.tradeDetailsPopup = tradeDetailsPopup;
|
||||
this.formatter = formatter;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -131,7 +134,7 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
|
|||
appFocusProperty = scene.getWindow().focusedProperty();
|
||||
scene.addEventHandler(KeyEvent.KEY_RELEASED, keyEventEventHandler);
|
||||
}
|
||||
|
||||
|
||||
appFocusProperty.addListener(appFocusChangeListener);
|
||||
model.currentTrade().addListener(currentTradeChangeListener);
|
||||
//setNewSubView(model.currentTrade().get());
|
||||
|
@ -232,7 +235,7 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
|
|||
super.updateItem(item, empty);
|
||||
|
||||
if (item != null && !empty) {
|
||||
field = new HyperlinkWithIcon(model.formatTradeId(item.getId()), true);
|
||||
field = new HyperlinkWithIcon(item.getId(), true);
|
||||
field.setOnAction(event -> tradeDetailsPopup.show(item.getTrade()));
|
||||
field.setTooltip(new Tooltip("Open popup for details"));
|
||||
setGraphic(field);
|
||||
|
@ -267,7 +270,7 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
|
|||
} else {
|
||||
setId("-fx-text-fill: black");
|
||||
}
|
||||
setText(model.getDate(item));
|
||||
setText(formatter.formatDateTime(item.getTrade().getDate()));
|
||||
} else {
|
||||
setText(null);
|
||||
}
|
||||
|
@ -282,7 +285,7 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
|
|||
new StringConverter<Coin>() {
|
||||
@Override
|
||||
public String toString(Coin value) {
|
||||
return model.formatTradeAmount(value);
|
||||
return formatter.formatCoinWithCode(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -297,7 +300,7 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
|
|||
new StringConverter<Fiat>() {
|
||||
@Override
|
||||
public String toString(Fiat value) {
|
||||
return model.formatPrice(value);
|
||||
return formatter.formatPriceWithCode(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -313,7 +316,7 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
|
|||
new StringConverter<Fiat>() {
|
||||
@Override
|
||||
public String toString(Fiat value) {
|
||||
return model.formatTradeVolume(value);
|
||||
return formatter.formatFiatWithCode(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -34,8 +34,6 @@ import io.bitsquare.trade.offer.Offer;
|
|||
import javafx.beans.property.*;
|
||||
import javafx.collections.ObservableList;
|
||||
import org.bitcoinj.core.BlockChainListener;
|
||||
import org.bitcoinj.core.Coin;
|
||||
import org.bitcoinj.utils.Fiat;
|
||||
import org.fxmisc.easybind.EasyBind;
|
||||
import org.fxmisc.easybind.Subscription;
|
||||
|
||||
|
@ -225,21 +223,6 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
|
|||
}
|
||||
|
||||
// columns
|
||||
String formatTradeId(String value) {
|
||||
return value;
|
||||
}
|
||||
|
||||
String formatTradeAmount(Coin value) {
|
||||
return formatter.formatCoinWithCode(value);
|
||||
}
|
||||
|
||||
String formatPrice(Fiat value) {
|
||||
return formatter.formatFiat(value);
|
||||
}
|
||||
|
||||
String formatTradeVolume(Fiat value) {
|
||||
return formatter.formatFiatWithCode(value);
|
||||
}
|
||||
|
||||
public String getRemainingTime() {
|
||||
return formatter.getPeriodBetweenBlockHeights(getBestChainHeight(),
|
||||
|
@ -255,10 +238,6 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
|
|||
return 0;
|
||||
}
|
||||
|
||||
String getDate(PendingTradesListItem item) {
|
||||
return formatter.formatDateTime(item.getTrade().getDate());
|
||||
}
|
||||
|
||||
public boolean showWarning(Trade trade) {
|
||||
return getBestChainHeight() >= trade.getCheckPaymentTimeAsBlockHeight();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue