Add market price feed for altcoins

This commit is contained in:
Manfred Karrer 2016-02-10 13:59:22 +01:00
parent d2e8c6afd7
commit eefafab977
14 changed files with 177 additions and 63 deletions

View file

@ -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;");

View file

@ -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) {

View file

@ -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());
}
///////////////////////////////////////////////////////////////////////////////////////////

View file

@ -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);
}
///////////////////////////////////////////////////////////////////////////////////////////

View file

@ -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);
}

View file

@ -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

View file

@ -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());
}
///////////////////////////////////////////////////////////////////////////////////////////

View file

@ -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);
}

View file

@ -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

View file

@ -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();
}