mirror of
https://github.com/bisq-network/bisq.git
synced 2024-11-19 09:52:23 +01:00
Apply primary market based direction, add BTC if "buyer" or "seller" is used in info text, remove embedded app version in offerID,
This commit is contained in:
parent
ee90e40c54
commit
956843ca14
@ -3,6 +3,9 @@
|
|||||||
<component name="ProjectCodeStyleSettingsManager">
|
<component name="ProjectCodeStyleSettingsManager">
|
||||||
<option name="PER_PROJECT_SETTINGS">
|
<option name="PER_PROJECT_SETTINGS">
|
||||||
<value>
|
<value>
|
||||||
|
<MarkdownNavigatorCodeStyleSettings>
|
||||||
|
<option name="RIGHT_MARGIN" value="72" />
|
||||||
|
</MarkdownNavigatorCodeStyleSettings>
|
||||||
<XML>
|
<XML>
|
||||||
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
|
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
|
||||||
</XML>
|
</XML>
|
||||||
|
@ -348,17 +348,7 @@ public final class Offer implements StoragePayload, RequiresOwnerIsOnlinePayload
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getId() {
|
public String getId() {
|
||||||
String[] tokens = id.split("_");
|
return id;
|
||||||
return tokens[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public String getVersion() {
|
|
||||||
String[] tokens = id.split("_");
|
|
||||||
if (tokens.length > 1)
|
|
||||||
return tokens[1];
|
|
||||||
else
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getShortId() {
|
public String getShortId() {
|
||||||
|
@ -361,7 +361,8 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
|
|||||||
|
|
||||||
Optional<OpenOffer> openOfferOptional = findOpenOffer(message.offerId);
|
Optional<OpenOffer> openOfferOptional = findOpenOffer(message.offerId);
|
||||||
AvailabilityResult availabilityResult;
|
AvailabilityResult availabilityResult;
|
||||||
if (openOfferOptional.isPresent() && openOfferOptional.get().getState() == OpenOffer.State.AVAILABLE) {
|
if (openOfferOptional.isPresent()) {
|
||||||
|
if (openOfferOptional.get().getState() == OpenOffer.State.AVAILABLE) {
|
||||||
final Offer offer = openOfferOptional.get().getOffer();
|
final Offer offer = openOfferOptional.get().getOffer();
|
||||||
if (!preferences.getIgnoreTradersList().stream().filter(i -> i.equals(offer.getOffererNodeAddress().getHostNameWithoutPostFix())).findAny().isPresent()) {
|
if (!preferences.getIgnoreTradersList().stream().filter(i -> i.equals(offer.getOffererNodeAddress().getHostNameWithoutPostFix())).findAny().isPresent()) {
|
||||||
availabilityResult = AvailabilityResult.AVAILABLE;
|
availabilityResult = AvailabilityResult.AVAILABLE;
|
||||||
@ -395,6 +396,11 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
|
|||||||
} else {
|
} else {
|
||||||
availabilityResult = AvailabilityResult.OFFER_TAKEN;
|
availabilityResult = AvailabilityResult.OFFER_TAKEN;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
log.warn("handleOfferAvailabilityRequest: openOffer not found. That should never happen.");
|
||||||
|
availabilityResult = AvailabilityResult.OFFER_TAKEN;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
p2PService.sendEncryptedDirectMessage(sender,
|
p2PService.sendEncryptedDirectMessage(sender,
|
||||||
message.getPubKeyRing(),
|
message.getPubKeyRing(),
|
||||||
|
@ -152,19 +152,28 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
|||||||
tableView.getSelectionModel().clearSelection();
|
tableView.getSelectionModel().clearSelection();
|
||||||
|
|
||||||
tableView.getColumns().add(getSelectColumn());
|
tableView.getColumns().add(getSelectColumn());
|
||||||
TableColumn<Dispute, Dispute> tradeIdColumn = getTradeIdColumn();
|
|
||||||
tableView.getColumns().add(tradeIdColumn);
|
|
||||||
TableColumn<Dispute, Dispute> roleColumn = getRoleColumn();
|
|
||||||
tableView.getColumns().add(roleColumn);
|
|
||||||
TableColumn<Dispute, Dispute> dateColumn = getDateColumn();
|
|
||||||
tableView.getColumns().add(dateColumn);
|
|
||||||
TableColumn<Dispute, Dispute> contractColumn = getContractColumn();
|
TableColumn<Dispute, Dispute> contractColumn = getContractColumn();
|
||||||
tableView.getColumns().add(contractColumn);
|
tableView.getColumns().add(contractColumn);
|
||||||
|
|
||||||
|
TableColumn<Dispute, Dispute> dateColumn = getDateColumn();
|
||||||
|
tableView.getColumns().add(dateColumn);
|
||||||
|
|
||||||
|
TableColumn<Dispute, Dispute> tradeIdColumn = getTradeIdColumn();
|
||||||
|
tableView.getColumns().add(tradeIdColumn);
|
||||||
|
|
||||||
|
TableColumn<Dispute, Dispute> marketColumn = getMarketColumn();
|
||||||
|
tableView.getColumns().add(marketColumn);
|
||||||
|
|
||||||
|
TableColumn<Dispute, Dispute> roleColumn = getRoleColumn();
|
||||||
|
tableView.getColumns().add(roleColumn);
|
||||||
|
|
||||||
TableColumn<Dispute, Dispute> stateColumn = getStateColumn();
|
TableColumn<Dispute, Dispute> stateColumn = getStateColumn();
|
||||||
tableView.getColumns().add(stateColumn);
|
tableView.getColumns().add(stateColumn);
|
||||||
|
|
||||||
tradeIdColumn.setComparator((o1, o2) -> o1.getTradeId().compareTo(o2.getTradeId()));
|
tradeIdColumn.setComparator((o1, o2) -> o1.getTradeId().compareTo(o2.getTradeId()));
|
||||||
dateColumn.setComparator((o1, o2) -> o1.getOpeningDate().compareTo(o2.getOpeningDate()));
|
dateColumn.setComparator((o1, o2) -> o1.getOpeningDate().compareTo(o2.getOpeningDate()));
|
||||||
|
marketColumn.setComparator((o1, o2) -> formatter.getCurrencyPair(o1.getContract().offer.getCurrencyCode()).compareTo(o2.getContract().offer.getCurrencyCode()));
|
||||||
|
|
||||||
dateColumn.setSortType(TableColumn.SortType.DESCENDING);
|
dateColumn.setSortType(TableColumn.SortType.DESCENDING);
|
||||||
tableView.getSortOrder().add(dateColumn);
|
tableView.getSortOrder().add(dateColumn);
|
||||||
@ -859,6 +868,32 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
|||||||
return column;
|
return column;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TableColumn<Dispute, Dispute> getMarketColumn() {
|
||||||
|
TableColumn<Dispute, Dispute> column = new TableColumn<Dispute, Dispute>("Market") {
|
||||||
|
{
|
||||||
|
setMinWidth(130);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
||||||
|
column.setCellFactory(
|
||||||
|
new Callback<TableColumn<Dispute, Dispute>, TableCell<Dispute, Dispute>>() {
|
||||||
|
@Override
|
||||||
|
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
||||||
|
return new TableCell<Dispute, Dispute>() {
|
||||||
|
@Override
|
||||||
|
public void updateItem(final Dispute item, boolean empty) {
|
||||||
|
super.updateItem(item, empty);
|
||||||
|
if (item != null && !empty)
|
||||||
|
setText(formatter.getCurrencyPair(item.getContract().offer.getCurrencyCode()));
|
||||||
|
else
|
||||||
|
setText("");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return column;
|
||||||
|
}
|
||||||
|
|
||||||
private TableColumn<Dispute, Dispute> getRoleColumn() {
|
private TableColumn<Dispute, Dispute> getRoleColumn() {
|
||||||
TableColumn<Dispute, Dispute> column = new TableColumn<Dispute, Dispute>("Role") {
|
TableColumn<Dispute, Dispute> column = new TableColumn<Dispute, Dispute>("Role") {
|
||||||
{
|
{
|
||||||
@ -876,9 +911,9 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
|||||||
super.updateItem(item, empty);
|
super.updateItem(item, empty);
|
||||||
if (item != null && !empty) {
|
if (item != null && !empty) {
|
||||||
if (item.isDisputeOpenerIsOfferer())
|
if (item.isDisputeOpenerIsOfferer())
|
||||||
setText(item.isDisputeOpenerIsBuyer() ? "Buyer/Offerer" : "Seller/Offerer");
|
setText(item.isDisputeOpenerIsBuyer() ? "BTC buyer/Offerer" : "BTC seller/Offerer");
|
||||||
else
|
else
|
||||||
setText(item.isDisputeOpenerIsBuyer() ? "Buyer/Taker" : "Seller/Taker");
|
setText(item.isDisputeOpenerIsBuyer() ? "BTC buyer/Taker" : "BTC seller/Taker");
|
||||||
} else {
|
} else {
|
||||||
setText("");
|
setText("");
|
||||||
}
|
}
|
||||||
|
@ -108,7 +108,6 @@ public class OfferBookChartView extends ActivatableViewAndModel<VBox, OfferBookC
|
|||||||
currencyComboBox = new ComboBox<>();
|
currencyComboBox = new ComboBox<>();
|
||||||
currencyComboBox.setPromptText("Select currency");
|
currencyComboBox.setPromptText("Select currency");
|
||||||
currencyComboBox.setConverter(GUIUtil.getCurrencyListItemConverter("offers"));
|
currencyComboBox.setConverter(GUIUtil.getCurrencyListItemConverter("offers"));
|
||||||
currencyComboBox.setVisibleRowCount(25);
|
|
||||||
|
|
||||||
Label currencyLabel = new Label("Currency:");
|
Label currencyLabel = new Label("Currency:");
|
||||||
HBox currencyHBox = new HBox();
|
HBox currencyHBox = new HBox();
|
||||||
@ -150,6 +149,7 @@ public class OfferBookChartView extends ActivatableViewAndModel<VBox, OfferBookC
|
|||||||
tabPaneSelectionModel.selectedIndexProperty().addListener(selectedTabIndexListener);
|
tabPaneSelectionModel.selectedIndexProperty().addListener(selectedTabIndexListener);
|
||||||
|
|
||||||
currencyComboBox.setItems(model.getCurrencyListItems());
|
currencyComboBox.setItems(model.getCurrencyListItems());
|
||||||
|
currencyComboBox.setVisibleRowCount(25);
|
||||||
|
|
||||||
if (model.getSelectedCurrencyListItem().isPresent())
|
if (model.getSelectedCurrencyListItem().isPresent())
|
||||||
currencyComboBox.getSelectionModel().select(model.getSelectedCurrencyListItem().get());
|
currencyComboBox.getSelectionModel().select(model.getSelectedCurrencyListItem().get());
|
||||||
|
@ -133,7 +133,7 @@ class OfferBookChartViewModel extends ActivatableViewModel {
|
|||||||
.filter(e -> e != null)
|
.filter(e -> e != null)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
GUIUtil.fillCurrencyListItems(tradeCurrencyList, currencyListItems, preferences);
|
GUIUtil.fillCurrencyListItems(tradeCurrencyList, currencyListItems, null, preferences);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -116,9 +116,9 @@ public class SpreadView extends ActivatableViewAndModel<GridPane, SpreadViewMode
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateHeaders() {
|
private void updateHeaders() {
|
||||||
numberOfOffersColumn.setText("Total offers (" + sortedList.stream().mapToInt(item -> item.numberOfOffers).sum() + ")");
|
numberOfOffersColumn.setText("All offers (" + sortedList.stream().mapToInt(item -> item.numberOfOffers).sum() + ")");
|
||||||
numberOfBuyOffersColumn.setText("Bid offers (" + sortedList.stream().mapToInt(item -> item.numberOfBuyOffers).sum() + ")");
|
numberOfBuyOffersColumn.setText("Buy BTC offers (" + sortedList.stream().mapToInt(item -> item.numberOfBuyOffers).sum() + ")");
|
||||||
numberOfSellOffersColumn.setText("Ask offers (" + sortedList.stream().mapToInt(item -> item.numberOfSellOffers).sum() + ")");
|
numberOfSellOffersColumn.setText("Sell BTC offers (" + sortedList.stream().mapToInt(item -> item.numberOfSellOffers).sum() + ")");
|
||||||
totalAmountColumn.setText("Total amount in BTC (" + formatter.formatCoin(Coin.valueOf(sortedList.stream().mapToLong(item -> item.totalAmount.value).sum())) + ")");
|
totalAmountColumn.setText("Total amount in BTC (" + formatter.formatCoin(Coin.valueOf(sortedList.stream().mapToLong(item -> item.totalAmount.value).sum())) + ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,6 +140,7 @@ public class TradesChartsView extends ActivatableViewAndModel<VBox, TradesCharts
|
|||||||
tabPaneSelectionModel.selectedIndexProperty().addListener(selectedTabIndexListener);
|
tabPaneSelectionModel.selectedIndexProperty().addListener(selectedTabIndexListener);
|
||||||
|
|
||||||
currencyComboBox.setItems(model.getCurrencyListItems());
|
currencyComboBox.setItems(model.getCurrencyListItems());
|
||||||
|
currencyComboBox.setVisibleRowCount(25);
|
||||||
|
|
||||||
if (model.showAllTradeCurrenciesProperty.get())
|
if (model.showAllTradeCurrenciesProperty.get())
|
||||||
currencyComboBox.getSelectionModel().select(0);
|
currencyComboBox.getSelectionModel().select(0);
|
||||||
@ -379,7 +380,6 @@ public class TradesChartsView extends ActivatableViewAndModel<VBox, TradesCharts
|
|||||||
currencyComboBox = new ComboBox<>();
|
currencyComboBox = new ComboBox<>();
|
||||||
currencyComboBox.setPromptText("Select currency");
|
currencyComboBox.setPromptText("Select currency");
|
||||||
currencyComboBox.setConverter(GUIUtil.getCurrencyListItemConverter("trades, all time"));
|
currencyComboBox.setConverter(GUIUtil.getCurrencyListItemConverter("trades, all time"));
|
||||||
currencyComboBox.setVisibleRowCount(25);
|
|
||||||
|
|
||||||
Pane spacer = new Pane();
|
Pane spacer = new Pane();
|
||||||
HBox.setHgrow(spacer, Priority.ALWAYS);
|
HBox.setHgrow(spacer, Priority.ALWAYS);
|
||||||
@ -567,7 +567,7 @@ public class TradesChartsView extends ActivatableViewAndModel<VBox, TradesCharts
|
|||||||
public void updateItem(final TradeStatistics item, boolean empty) {
|
public void updateItem(final TradeStatistics item, boolean empty) {
|
||||||
super.updateItem(item, empty);
|
super.updateItem(item, empty);
|
||||||
if (item != null)
|
if (item != null)
|
||||||
setText(formatter.getDirection(item.direction, item.currency));
|
setText(formatter.getDirectionWithCode(item.direction, item.currency));
|
||||||
else
|
else
|
||||||
setText("");
|
setText("");
|
||||||
}
|
}
|
||||||
|
@ -79,6 +79,7 @@ class TradesChartsViewModel extends ActivatableViewModel {
|
|||||||
final ObjectProperty<TradeCurrency> selectedTradeCurrencyProperty = new SimpleObjectProperty<>();
|
final ObjectProperty<TradeCurrency> selectedTradeCurrencyProperty = new SimpleObjectProperty<>();
|
||||||
final BooleanProperty showAllTradeCurrenciesProperty = new SimpleBooleanProperty(false);
|
final BooleanProperty showAllTradeCurrenciesProperty = new SimpleBooleanProperty(false);
|
||||||
private final ObservableList<CurrencyListItem> currencyListItems = FXCollections.observableArrayList();
|
private final ObservableList<CurrencyListItem> currencyListItems = FXCollections.observableArrayList();
|
||||||
|
private CurrencyListItem showAllCurrencyListItem = new CurrencyListItem(new CryptoCurrency(GUIUtil.SHOW_ALL_FLAG, GUIUtil.SHOW_ALL_FLAG), -1);
|
||||||
final ObservableList<TradeStatistics> tradeStatisticsByCurrency = FXCollections.observableArrayList();
|
final ObservableList<TradeStatistics> tradeStatisticsByCurrency = FXCollections.observableArrayList();
|
||||||
ObservableList<XYChart.Data<Number, Number>> priceItems = FXCollections.observableArrayList();
|
ObservableList<XYChart.Data<Number, Number>> priceItems = FXCollections.observableArrayList();
|
||||||
ObservableList<XYChart.Data<Number, Number>> volumeItems = FXCollections.observableArrayList();
|
ObservableList<XYChart.Data<Number, Number>> volumeItems = FXCollections.observableArrayList();
|
||||||
@ -128,8 +129,7 @@ class TradesChartsViewModel extends ActivatableViewModel {
|
|||||||
.filter(e -> e != null)
|
.filter(e -> e != null)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
GUIUtil.fillCurrencyListItems(tradeCurrencyList, currencyListItems, preferences);
|
GUIUtil.fillCurrencyListItems(tradeCurrencyList, currencyListItems, showAllCurrencyListItem, preferences);
|
||||||
currencyListItems.add(0, new CurrencyListItem(new CryptoCurrency(GUIUtil.SHOW_ALL_FLAG, GUIUtil.SHOW_ALL_FLAG), -1));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
|
@ -19,7 +19,6 @@ package io.bitsquare.gui.main.offer.createoffer;
|
|||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import io.bitsquare.app.DevFlags;
|
import io.bitsquare.app.DevFlags;
|
||||||
import io.bitsquare.app.Version;
|
|
||||||
import io.bitsquare.arbitration.Arbitrator;
|
import io.bitsquare.arbitration.Arbitrator;
|
||||||
import io.bitsquare.btc.AddressEntry;
|
import io.bitsquare.btc.AddressEntry;
|
||||||
import io.bitsquare.btc.FeePolicy;
|
import io.bitsquare.btc.FeePolicy;
|
||||||
@ -296,10 +295,7 @@ class CreateOfferDataModel extends ActivatableDataModel {
|
|||||||
|
|
||||||
checkNotNull(p2PService.getAddress(), "Address must not be null");
|
checkNotNull(p2PService.getAddress(), "Address must not be null");
|
||||||
|
|
||||||
// We encode the version into the id to be able to distinguish in future versions offers
|
return new Offer(offerId,
|
||||||
// Once we have a hard fork we can remove that hack and add the version as a field
|
|
||||||
String idWithExtra = offerId + "_" + Version.VERSION;
|
|
||||||
return new Offer(idWithExtra,
|
|
||||||
p2PService.getAddress(),
|
p2PService.getAddress(),
|
||||||
keyRing.getPubKeyRing(),
|
keyRing.getPubKeyRing(),
|
||||||
direction,
|
direction,
|
||||||
|
@ -622,7 +622,7 @@ class CreateOfferViewModel extends ActivatableWithDataModel<CreateOfferDataModel
|
|||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
public boolean isPriceInRange() {
|
public boolean isPriceInRange() {
|
||||||
if (marketPriceMargin.get() != null) {
|
if (marketPriceMargin.get() != null && !marketPriceMargin.get().isEmpty()) {
|
||||||
if (formatter.parsePercentStringToDouble(marketPriceMargin.get()) > preferences.getMaxPriceDistanceInPercent()) {
|
if (formatter.parsePercentStringToDouble(marketPriceMargin.get()) > preferences.getMaxPriceDistanceInPercent()) {
|
||||||
displayPriceOutOfRangePopup();
|
displayPriceOutOfRangePopup();
|
||||||
return false;
|
return false;
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
package io.bitsquare.gui.main.offer.offerbook;
|
package io.bitsquare.gui.main.offer.offerbook;
|
||||||
|
|
||||||
import io.bitsquare.alert.PrivateNotificationManager;
|
import io.bitsquare.alert.PrivateNotificationManager;
|
||||||
|
import io.bitsquare.common.UserThread;
|
||||||
import io.bitsquare.gui.Navigation;
|
import io.bitsquare.gui.Navigation;
|
||||||
import io.bitsquare.gui.common.view.ActivatableViewAndModel;
|
import io.bitsquare.gui.common.view.ActivatableViewAndModel;
|
||||||
import io.bitsquare.gui.common.view.FxmlView;
|
import io.bitsquare.gui.common.view.FxmlView;
|
||||||
@ -64,6 +65,7 @@ import org.fxmisc.easybind.Subscription;
|
|||||||
import org.fxmisc.easybind.monadic.MonadicBinding;
|
import org.fxmisc.easybind.monadic.MonadicBinding;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import static io.bitsquare.gui.util.FormBuilder.*;
|
import static io.bitsquare.gui.util.FormBuilder.*;
|
||||||
|
|
||||||
@ -114,7 +116,6 @@ public class OfferBookView extends ActivatableViewAndModel<GridPane, OfferBookVi
|
|||||||
currencyComboBox = addLabelComboBox(root, gridRow, "Filter by currency:", Layout.FIRST_ROW_DISTANCE).second;
|
currencyComboBox = addLabelComboBox(root, gridRow, "Filter by currency:", Layout.FIRST_ROW_DISTANCE).second;
|
||||||
currencyComboBox.setPromptText("Select currency");
|
currencyComboBox.setPromptText("Select currency");
|
||||||
currencyComboBox.setConverter(GUIUtil.getCurrencyListItemConverter("offers"));
|
currencyComboBox.setConverter(GUIUtil.getCurrencyListItemConverter("offers"));
|
||||||
currencyComboBox.setVisibleRowCount(25);
|
|
||||||
|
|
||||||
paymentMethodComboBox = addLabelComboBox(root, ++gridRow, "Filter by payment method:").second;
|
paymentMethodComboBox = addLabelComboBox(root, ++gridRow, "Filter by payment method:").second;
|
||||||
paymentMethodComboBox.setPromptText("Select payment method");
|
paymentMethodComboBox.setPromptText("Select payment method");
|
||||||
@ -205,12 +206,15 @@ public class OfferBookView extends ActivatableViewAndModel<GridPane, OfferBookVi
|
|||||||
@Override
|
@Override
|
||||||
protected void activate() {
|
protected void activate() {
|
||||||
currencyComboBox.setItems(model.getCurrencyListItems());
|
currencyComboBox.setItems(model.getCurrencyListItems());
|
||||||
|
currencyComboBox.setVisibleRowCount(25);
|
||||||
|
|
||||||
model.currencyListItems.addListener(currencyListItemsListener);
|
model.currencyListItems.addListener(currencyListItemsListener);
|
||||||
|
|
||||||
applyCurrencyComboBoxSelection();
|
applyCurrencyComboBoxSelection();
|
||||||
|
|
||||||
currencyComboBox.setOnAction(e -> {
|
currencyComboBox.setOnAction(e -> {
|
||||||
CurrencyListItem selectedItem = currencyComboBox.getSelectionModel().getSelectedItem();
|
CurrencyListItem selectedItem = currencyComboBox.getSelectionModel().getSelectedItem();
|
||||||
|
|
||||||
if (selectedItem != null)
|
if (selectedItem != null)
|
||||||
model.onSetTradeCurrency(selectedItem.tradeCurrency);
|
model.onSetTradeCurrency(selectedItem.tradeCurrency);
|
||||||
});
|
});
|
||||||
@ -275,10 +279,13 @@ public class OfferBookView extends ActivatableViewAndModel<GridPane, OfferBookVi
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void applyCurrencyComboBoxSelection() {
|
private void applyCurrencyComboBoxSelection() {
|
||||||
if (model.showAllTradeCurrenciesProperty.get())
|
Optional<CurrencyListItem> selectedCurrencyListItem = model.getSelectedCurrencyListItem();
|
||||||
currencyComboBox.getSelectionModel().select(0);
|
UserThread.execute(() -> {
|
||||||
else if (model.getSelectedCurrencyListItem().isPresent())
|
if (model.showAllTradeCurrenciesProperty.get() || !selectedCurrencyListItem.isPresent())
|
||||||
currencyComboBox.getSelectionModel().select(model.getSelectedCurrencyListItem().get());
|
currencyComboBox.getSelectionModel().select(model.getShowAllCurrencyListItem());
|
||||||
|
else
|
||||||
|
currencyComboBox.getSelectionModel().select(selectedCurrencyListItem.get());
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -604,7 +611,7 @@ public class OfferBookView extends ActivatableViewAndModel<GridPane, OfferBookVi
|
|||||||
private TableColumn<OfferBookListItem, OfferBookListItem> getPaymentMethodColumn() {
|
private TableColumn<OfferBookListItem, OfferBookListItem> getPaymentMethodColumn() {
|
||||||
TableColumn<OfferBookListItem, OfferBookListItem> column = new TableColumn<OfferBookListItem, OfferBookListItem>("Payment method") {
|
TableColumn<OfferBookListItem, OfferBookListItem> column = new TableColumn<OfferBookListItem, OfferBookListItem>("Payment method") {
|
||||||
{
|
{
|
||||||
setMinWidth(130);
|
setMinWidth(120);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
column.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
|
column.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
|
||||||
@ -717,6 +724,7 @@ public class OfferBookView extends ActivatableViewAndModel<GridPane, OfferBookVi
|
|||||||
button.setId(isSellOffer ? "buy-button" : "sell-button");
|
button.setId(isSellOffer ? "buy-button" : "sell-button");
|
||||||
button.setStyle("-fx-text-fill: white;"); // does not take the font colors sometimes from the style
|
button.setStyle("-fx-text-fill: white;"); // does not take the font colors sometimes from the style
|
||||||
title = model.getDirectionLabel(offer);
|
title = model.getDirectionLabel(offer);
|
||||||
|
button.setTooltip(new Tooltip("Take offer for " + model.getDirectionLabelTooltip(offer)));
|
||||||
button.setOnAction(e -> onTakeOffer(offer));
|
button.setOnAction(e -> onTakeOffer(offer));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,8 +83,7 @@ class OfferBookViewModel extends ActivatableViewModel {
|
|||||||
private TradeCurrency selectedTradeCurrency;
|
private TradeCurrency selectedTradeCurrency;
|
||||||
private final ListChangeListener<OfferBookListItem> offerBookListItemsListener;
|
private final ListChangeListener<OfferBookListItem> offerBookListItemsListener;
|
||||||
final ObservableList<CurrencyListItem> currencyListItems = FXCollections.observableArrayList();
|
final ObservableList<CurrencyListItem> currencyListItems = FXCollections.observableArrayList();
|
||||||
private final ObservableList<TradeCurrency> allTradeCurrencies = FXCollections.observableArrayList();
|
private CurrencyListItem showAllCurrencyListItem = new CurrencyListItem(new CryptoCurrency(GUIUtil.SHOW_ALL_FLAG, GUIUtil.SHOW_ALL_FLAG), -1);
|
||||||
|
|
||||||
private Offer.Direction direction;
|
private Offer.Direction direction;
|
||||||
|
|
||||||
private final StringProperty btcCode = new SimpleStringProperty();
|
private final StringProperty btcCode = new SimpleStringProperty();
|
||||||
@ -135,7 +134,7 @@ class OfferBookViewModel extends ActivatableViewModel {
|
|||||||
offerBookListItems.addListener(offerBookListItemsListener);
|
offerBookListItems.addListener(offerBookListItemsListener);
|
||||||
|
|
||||||
String code = direction == Offer.Direction.BUY ? preferences.getBuyScreenCurrencyCode() : preferences.getSellScreenCurrencyCode();
|
String code = direction == Offer.Direction.BUY ? preferences.getBuyScreenCurrencyCode() : preferences.getSellScreenCurrencyCode();
|
||||||
if (code != null && !code.isEmpty() && CurrencyUtil.getTradeCurrency(code).isPresent()) {
|
if (code != null && !code.equals("SHOW_ALL_FLAG") && !code.isEmpty() && CurrencyUtil.getTradeCurrency(code).isPresent()) {
|
||||||
showAllTradeCurrenciesProperty.set(false);
|
showAllTradeCurrenciesProperty.set(false);
|
||||||
selectedTradeCurrency = CurrencyUtil.getTradeCurrency(code).get();
|
selectedTradeCurrency = CurrencyUtil.getTradeCurrency(code).get();
|
||||||
} else {
|
} else {
|
||||||
@ -143,6 +142,7 @@ class OfferBookViewModel extends ActivatableViewModel {
|
|||||||
selectedTradeCurrency = CurrencyUtil.getDefaultTradeCurrency();
|
selectedTradeCurrency = CurrencyUtil.getDefaultTradeCurrency();
|
||||||
}
|
}
|
||||||
tradeCurrencyCode.set(selectedTradeCurrency.getCode());
|
tradeCurrencyCode.set(selectedTradeCurrency.getCode());
|
||||||
|
|
||||||
setPriceFeedType();
|
setPriceFeedType();
|
||||||
|
|
||||||
btcCode.bind(preferences.btcDenominationProperty());
|
btcCode.bind(preferences.btcDenominationProperty());
|
||||||
@ -249,6 +249,10 @@ class OfferBookViewModel extends ActivatableViewModel {
|
|||||||
return currencyListItems.stream().filter(e -> tradeCurrencyCode.get() != null && e.tradeCurrency.getCode().equals(tradeCurrencyCode.get())).findAny();
|
return currencyListItems.stream().filter(e -> tradeCurrencyCode.get() != null && e.tradeCurrency.getCode().equals(tradeCurrencyCode.get())).findAny();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CurrencyListItem getShowAllCurrencyListItem() {
|
||||||
|
return showAllCurrencyListItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
String getAmount(OfferBookListItem item) {
|
String getAmount(OfferBookListItem item) {
|
||||||
Offer offer = item.getOffer();
|
Offer offer = item.getOffer();
|
||||||
@ -349,7 +353,11 @@ class OfferBookViewModel extends ActivatableViewModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String getDirectionLabel(Offer offer) {
|
String getDirectionLabel(Offer offer) {
|
||||||
return formatter.getDirection(offer.getMirroredDirection(), offer.getCurrencyCode());
|
return formatter.getDirectionWithCode(offer.getMirroredDirection(), offer.getCurrencyCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
String getDirectionLabelTooltip(Offer offer) {
|
||||||
|
return formatter.getDirectionWithCodeDetailed(offer.getMirroredDirection(), offer.getCurrencyCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -389,8 +397,7 @@ class OfferBookViewModel extends ActivatableViewModel {
|
|||||||
.filter(e -> e != null)
|
.filter(e -> e != null)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
GUIUtil.fillCurrencyListItems(tradeCurrencyList, currencyListItems, preferences);
|
GUIUtil.fillCurrencyListItems(tradeCurrencyList, currencyListItems, showAllCurrencyListItem, preferences);
|
||||||
currencyListItems.add(0, new CurrencyListItem(new CryptoCurrency(GUIUtil.SHOW_ALL_FLAG, GUIUtil.SHOW_ALL_FLAG), -1));
|
|
||||||
tradeCurrencyCodes = currencyListItems.stream().map(e -> e.tradeCurrency.getCode()).collect(Collectors.toSet());
|
tradeCurrencyCodes = currencyListItems.stream().map(e -> e.tradeCurrency.getCode()).collect(Collectors.toSet());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -880,7 +880,7 @@ public class TakeOfferView extends ActivatableViewAndModel<AnchorPane, TakeOffer
|
|||||||
priceAsPercentageLabel = priceAsPercentageTuple.third;
|
priceAsPercentageLabel = priceAsPercentageTuple.third;
|
||||||
|
|
||||||
Tuple2<Label, VBox> priceAsPercentageInputBoxTuple = getTradeInputBox(priceAsPercentageValueCurrencyBox, "Distance in % from market price");
|
Tuple2<Label, VBox> priceAsPercentageInputBoxTuple = getTradeInputBox(priceAsPercentageValueCurrencyBox, "Distance in % from market price");
|
||||||
priceAsPercentageInputBoxTuple.first.setPrefWidth(200);
|
priceAsPercentageInputBoxTuple.first.setPrefWidth(220);
|
||||||
priceAsPercentageInputBox = priceAsPercentageInputBoxTuple.second;
|
priceAsPercentageInputBox = priceAsPercentageInputBoxTuple.second;
|
||||||
|
|
||||||
priceAsPercentageTextField.setPromptText("Enter % value");
|
priceAsPercentageTextField.setPromptText("Enter % value");
|
||||||
@ -920,7 +920,7 @@ public class TakeOfferView extends ActivatableViewAndModel<AnchorPane, TakeOffer
|
|||||||
private Tuple2<Label, VBox> getTradeInputBox(HBox amountValueBox, String promptText) {
|
private Tuple2<Label, VBox> getTradeInputBox(HBox amountValueBox, String promptText) {
|
||||||
Label descriptionLabel = new Label(promptText);
|
Label descriptionLabel = new Label(promptText);
|
||||||
descriptionLabel.setId("input-description-label");
|
descriptionLabel.setId("input-description-label");
|
||||||
descriptionLabel.setPrefWidth(170);
|
descriptionLabel.setPrefWidth(190);
|
||||||
|
|
||||||
VBox box = new VBox();
|
VBox box = new VBox();
|
||||||
box.setSpacing(4);
|
box.setSpacing(4);
|
||||||
@ -930,7 +930,7 @@ public class TakeOfferView extends ActivatableViewAndModel<AnchorPane, TakeOffer
|
|||||||
|
|
||||||
private Tuple3<HBox, InputTextField, Label> getAmountCurrencyBox(String promptText) {
|
private Tuple3<HBox, InputTextField, Label> getAmountCurrencyBox(String promptText) {
|
||||||
InputTextField input = new InputTextField();
|
InputTextField input = new InputTextField();
|
||||||
input.setPrefWidth(170);
|
input.setPrefWidth(190);
|
||||||
input.setAlignment(Pos.CENTER_RIGHT);
|
input.setAlignment(Pos.CENTER_RIGHT);
|
||||||
input.setId("text-input-with-currency-text-field");
|
input.setId("text-input-with-currency-text-field");
|
||||||
input.setPromptText(promptText);
|
input.setPromptText(promptText);
|
||||||
@ -945,7 +945,7 @@ public class TakeOfferView extends ActivatableViewAndModel<AnchorPane, TakeOffer
|
|||||||
|
|
||||||
private Tuple3<HBox, TextField, Label> getValueCurrencyBox() {
|
private Tuple3<HBox, TextField, Label> getValueCurrencyBox() {
|
||||||
TextField textField = new InputTextField();
|
TextField textField = new InputTextField();
|
||||||
textField.setPrefWidth(170);
|
textField.setPrefWidth(190);
|
||||||
textField.setAlignment(Pos.CENTER_RIGHT);
|
textField.setAlignment(Pos.CENTER_RIGHT);
|
||||||
textField.setId("text-input-with-currency-text-field");
|
textField.setId("text-input-with-currency-text-field");
|
||||||
textField.setMouseTransparent(true);
|
textField.setMouseTransparent(true);
|
||||||
|
@ -154,7 +154,7 @@ public class NotificationCenter {
|
|||||||
if (tradeManager.isBuyer(trade.getOffer())) {
|
if (tradeManager.isBuyer(trade.getOffer())) {
|
||||||
switch (tradeState) {
|
switch (tradeState) {
|
||||||
case OFFERER_RECEIVED_DEPOSIT_TX_PUBLISHED_MSG:
|
case OFFERER_RECEIVED_DEPOSIT_TX_PUBLISHED_MSG:
|
||||||
message = "Your offer has been accepted by a seller.";
|
message = "Your offer has been accepted by a BTC seller.";
|
||||||
break;
|
break;
|
||||||
case DEPOSIT_CONFIRMED_IN_BLOCK_CHAIN:
|
case DEPOSIT_CONFIRMED_IN_BLOCK_CHAIN:
|
||||||
message = "Your trade has at least one blockchain confirmation.\n" +
|
message = "Your trade has at least one blockchain confirmation.\n" +
|
||||||
@ -164,10 +164,10 @@ public class NotificationCenter {
|
|||||||
} else {
|
} else {
|
||||||
switch (tradeState) {
|
switch (tradeState) {
|
||||||
case OFFERER_RECEIVED_DEPOSIT_TX_PUBLISHED_MSG:
|
case OFFERER_RECEIVED_DEPOSIT_TX_PUBLISHED_MSG:
|
||||||
message = "Your offer has been accepted by a buyer.";
|
message = "Your offer has been accepted by a BTC buyer.";
|
||||||
break;
|
break;
|
||||||
case SELLER_RECEIVED_FIAT_PAYMENT_INITIATED_MSG:
|
case SELLER_RECEIVED_FIAT_PAYMENT_INITIATED_MSG:
|
||||||
message = "The bitcoin buyer has started the payment.";
|
message = "The BTC buyer has started the payment.";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -116,23 +116,24 @@ public class ContractWindow extends Overlay<ContractWindow> {
|
|||||||
Layout.FIRST_ROW_DISTANCE).second.setMouseTransparent(false);
|
Layout.FIRST_ROW_DISTANCE).second.setMouseTransparent(false);
|
||||||
addLabelTextField(gridPane, ++rowIndex, "Offer date:", formatter.formatDateTime(offer.getDate()));
|
addLabelTextField(gridPane, ++rowIndex, "Offer date:", formatter.formatDateTime(offer.getDate()));
|
||||||
addLabelTextField(gridPane, ++rowIndex, "Trade date:", formatter.formatDateTime(dispute.getTradeDate()));
|
addLabelTextField(gridPane, ++rowIndex, "Trade date:", formatter.formatDateTime(dispute.getTradeDate()));
|
||||||
addLabelTextField(gridPane, ++rowIndex, "Trade type:", formatter.getDirectionBothSides(offer.getDirection()));
|
String currencyCode = offer.getCurrencyCode();
|
||||||
|
addLabelTextField(gridPane, ++rowIndex, "Trade type:", formatter.getDirectionBothSides(offer.getDirection(), currencyCode));
|
||||||
addLabelTextField(gridPane, ++rowIndex, "Trade price:", formatter.formatPrice(contract.getTradePrice()));
|
addLabelTextField(gridPane, ++rowIndex, "Trade price:", formatter.formatPrice(contract.getTradePrice()));
|
||||||
addLabelTextField(gridPane, ++rowIndex, "Trade amount:", formatter.formatCoinWithCode(contract.getTradeAmount()));
|
addLabelTextField(gridPane, ++rowIndex, "Trade amount:", formatter.formatCoinWithCode(contract.getTradeAmount()));
|
||||||
addLabelTextField(gridPane, ++rowIndex, formatter.formatVolumeLabel(offer.getCurrencyCode(), ":"),
|
addLabelTextField(gridPane, ++rowIndex, formatter.formatVolumeLabel(currencyCode, ":"),
|
||||||
formatter.formatVolumeWithCode(new ExchangeRate(contract.getTradePrice()).coinToFiat(contract.getTradeAmount())));
|
formatter.formatVolumeWithCode(new ExchangeRate(contract.getTradePrice()).coinToFiat(contract.getTradeAmount())));
|
||||||
addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "Buyer bitcoin address:",
|
addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "BTC buyer bitcoin address:",
|
||||||
contract.getBuyerPayoutAddressString()).second.setMouseTransparent(false);
|
contract.getBuyerPayoutAddressString()).second.setMouseTransparent(false);
|
||||||
addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "Seller bitcoin address:",
|
addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "BTC seller bitcoin address:",
|
||||||
contract.getSellerPayoutAddressString()).second.setMouseTransparent(false);
|
contract.getSellerPayoutAddressString()).second.setMouseTransparent(false);
|
||||||
addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "Contract hash:",
|
addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "Contract hash:",
|
||||||
Utils.HEX.encode(dispute.getContractHash())).second.setMouseTransparent(false);
|
Utils.HEX.encode(dispute.getContractHash())).second.setMouseTransparent(false);
|
||||||
addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "Buyer address:", contract.getBuyerNodeAddress().getFullAddress());
|
addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "BTC buyer address:", contract.getBuyerNodeAddress().getFullAddress());
|
||||||
addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "Seller address:", contract.getSellerNodeAddress().getFullAddress());
|
addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "BTC seller address:", contract.getSellerNodeAddress().getFullAddress());
|
||||||
addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "Selected arbitrator:", contract.arbitratorNodeAddress.getFullAddress());
|
addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "Selected arbitrator:", contract.arbitratorNodeAddress.getFullAddress());
|
||||||
addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "Buyer payment details:",
|
addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "BTC buyer payment details:",
|
||||||
BSResources.get(contract.getBuyerPaymentAccountContractData().getPaymentDetails())).second.setMouseTransparent(false);
|
BSResources.get(contract.getBuyerPaymentAccountContractData().getPaymentDetails())).second.setMouseTransparent(false);
|
||||||
addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "Seller payment details:",
|
addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "BTC seller payment details:",
|
||||||
BSResources.get(sellerPaymentAccountContractData.getPaymentDetails())).second.setMouseTransparent(false);
|
BSResources.get(sellerPaymentAccountContractData.getPaymentDetails())).second.setMouseTransparent(false);
|
||||||
|
|
||||||
if (showAcceptedCountryCodes) {
|
if (showAcceptedCountryCodes) {
|
||||||
|
@ -232,14 +232,14 @@ public class DisputeSummaryWindow extends Overlay<DisputeSummaryWindow> {
|
|||||||
addLabelTextField(gridPane, ++rowIndex, "Ticket opening date:", formatter.formatDateTime(dispute.getOpeningDate()));
|
addLabelTextField(gridPane, ++rowIndex, "Ticket opening date:", formatter.formatDateTime(dispute.getOpeningDate()));
|
||||||
if (dispute.isDisputeOpenerIsOfferer()) {
|
if (dispute.isDisputeOpenerIsOfferer()) {
|
||||||
if (dispute.isDisputeOpenerIsBuyer())
|
if (dispute.isDisputeOpenerIsBuyer())
|
||||||
role = "Buyer/offerer";
|
role = "BTC Buyer/offerer";
|
||||||
else
|
else
|
||||||
role = "Seller/offerer";
|
role = "BTC Seller/offerer";
|
||||||
} else {
|
} else {
|
||||||
if (dispute.isDisputeOpenerIsBuyer())
|
if (dispute.isDisputeOpenerIsBuyer())
|
||||||
role = "Buyer/taker";
|
role = "BTC Buyer/taker";
|
||||||
else
|
else
|
||||||
role = "Seller/taker";
|
role = "BTC Seller/taker";
|
||||||
}
|
}
|
||||||
addLabelTextField(gridPane, ++rowIndex, "Traders role:", role);
|
addLabelTextField(gridPane, ++rowIndex, "Traders role:", role);
|
||||||
addLabelTextField(gridPane, ++rowIndex, "Trade amount:", formatter.formatCoinWithCode(contract.getTradeAmount()));
|
addLabelTextField(gridPane, ++rowIndex, "Trade amount:", formatter.formatCoinWithCode(contract.getTradeAmount()));
|
||||||
@ -272,8 +272,8 @@ public class DisputeSummaryWindow extends Overlay<DisputeSummaryWindow> {
|
|||||||
Label distributionLabel = addLabel(gridPane, ++rowIndex, "Trade amount payout:", 10);
|
Label distributionLabel = addLabel(gridPane, ++rowIndex, "Trade amount payout:", 10);
|
||||||
GridPane.setValignment(distributionLabel, VPos.TOP);
|
GridPane.setValignment(distributionLabel, VPos.TOP);
|
||||||
|
|
||||||
buyerIsWinnerRadioButton = new RadioButton("Buyer gets trade amount payout");
|
buyerIsWinnerRadioButton = new RadioButton("BTC buyer gets trade amount payout");
|
||||||
sellerIsWinnerRadioButton = new RadioButton("Seller gets trade amount payout");
|
sellerIsWinnerRadioButton = new RadioButton("BTC seller gets trade amount payout");
|
||||||
shareRadioButton = new RadioButton("Both gets half trade amount payout");
|
shareRadioButton = new RadioButton("Both gets half trade amount payout");
|
||||||
VBox radioButtonPane = new VBox();
|
VBox radioButtonPane = new VBox();
|
||||||
radioButtonPane.setSpacing(20);
|
radioButtonPane.setSpacing(20);
|
||||||
@ -475,8 +475,8 @@ public class DisputeSummaryWindow extends Overlay<DisputeSummaryWindow> {
|
|||||||
"\n" + role + " delivered tamper proof evidence: " + formatter.booleanToYesNo(disputeResult.tamperProofEvidenceProperty().get()) +
|
"\n" + role + " delivered tamper proof evidence: " + formatter.booleanToYesNo(disputeResult.tamperProofEvidenceProperty().get()) +
|
||||||
"\n" + role + " did ID verification: " + formatter.booleanToYesNo(disputeResult.idVerificationProperty().get()) +
|
"\n" + role + " did ID verification: " + formatter.booleanToYesNo(disputeResult.idVerificationProperty().get()) +
|
||||||
"\n" + role + " did screencast or video: " + formatter.booleanToYesNo(disputeResult.screenCastProperty().get()) +
|
"\n" + role + " did screencast or video: " + formatter.booleanToYesNo(disputeResult.screenCastProperty().get()) +
|
||||||
"\nPayout amount for buyer: " + formatter.formatCoinWithCode(disputeResult.getBuyerPayoutAmount()) +
|
"\nPayout amount for BTC buyer: " + formatter.formatCoinWithCode(disputeResult.getBuyerPayoutAmount()) +
|
||||||
"\nPayout amount for seller: " + formatter.formatCoinWithCode(disputeResult.getSellerPayoutAmount()) +
|
"\nPayout amount for BTC seller: " + formatter.formatCoinWithCode(disputeResult.getSellerPayoutAmount()) +
|
||||||
"\nArbitrators dispute fee: " + formatter.formatCoinWithCode(disputeResult.getArbitratorPayoutAmount()) +
|
"\nArbitrators dispute fee: " + formatter.formatCoinWithCode(disputeResult.getArbitratorPayoutAmount()) +
|
||||||
"\n\nSummary notes:\n" + disputeResult.summaryNotesProperty().get();
|
"\n\nSummary notes:\n" + disputeResult.summaryNotesProperty().get();
|
||||||
|
|
||||||
|
@ -160,20 +160,21 @@ public class OfferDetailsWindow extends Overlay<OfferDetailsWindow> {
|
|||||||
String fiatDirectionInfo = ":";
|
String fiatDirectionInfo = ":";
|
||||||
String btcDirectionInfo = ":";
|
String btcDirectionInfo = ":";
|
||||||
Offer.Direction direction = offer.getDirection();
|
Offer.Direction direction = offer.getDirection();
|
||||||
|
String currencyCode = offer.getCurrencyCode();
|
||||||
if (takeOfferHandlerOptional.isPresent()) {
|
if (takeOfferHandlerOptional.isPresent()) {
|
||||||
addLabelTextField(gridPane, rowIndex, "Offer type:", formatter.getDirectionForTakeOffer(direction), Layout.FIRST_ROW_DISTANCE);
|
addLabelTextField(gridPane, rowIndex, "Offer type:", formatter.getDirectionForTakeOffer(direction, currencyCode), Layout.FIRST_ROW_DISTANCE);
|
||||||
fiatDirectionInfo = direction == Offer.Direction.BUY ? " to receive:" : " to spend:";
|
fiatDirectionInfo = direction == Offer.Direction.BUY ? " to receive:" : " to spend:";
|
||||||
btcDirectionInfo = direction == Offer.Direction.SELL ? " to receive:" : " to spend:";
|
btcDirectionInfo = direction == Offer.Direction.SELL ? " to receive:" : " to spend:";
|
||||||
} else if (placeOfferHandlerOptional.isPresent()) {
|
} else if (placeOfferHandlerOptional.isPresent()) {
|
||||||
addLabelTextField(gridPane, rowIndex, "Offer type:", formatter.getOfferDirectionForCreateOffer(direction), Layout.FIRST_ROW_DISTANCE);
|
addLabelTextField(gridPane, rowIndex, "Offer type:", formatter.getOfferDirectionForCreateOffer(direction, currencyCode), Layout.FIRST_ROW_DISTANCE);
|
||||||
fiatDirectionInfo = direction == Offer.Direction.SELL ? " to receive:" : " to spend:";
|
fiatDirectionInfo = direction == Offer.Direction.SELL ? " to receive:" : " to spend:";
|
||||||
btcDirectionInfo = direction == Offer.Direction.BUY ? " to receive:" : " to spend:";
|
btcDirectionInfo = direction == Offer.Direction.BUY ? " to receive:" : " to spend:";
|
||||||
} else {
|
} else {
|
||||||
addLabelTextField(gridPane, rowIndex, "Offer type:", formatter.getDirectionBothSides(direction), Layout.FIRST_ROW_DISTANCE);
|
addLabelTextField(gridPane, rowIndex, "Offer type:", formatter.getDirectionBothSides(direction, currencyCode), Layout.FIRST_ROW_DISTANCE);
|
||||||
}
|
}
|
||||||
if (takeOfferHandlerOptional.isPresent()) {
|
if (takeOfferHandlerOptional.isPresent()) {
|
||||||
addLabelTextField(gridPane, ++rowIndex, "Bitcoin amount" + btcDirectionInfo, formatter.formatCoinWithCode(tradeAmount));
|
addLabelTextField(gridPane, ++rowIndex, "Bitcoin amount" + btcDirectionInfo, formatter.formatCoinWithCode(tradeAmount));
|
||||||
addLabelTextField(gridPane, ++rowIndex, formatter.formatVolumeLabel(offer.getCurrencyCode()) + fiatDirectionInfo,
|
addLabelTextField(gridPane, ++rowIndex, formatter.formatVolumeLabel(currencyCode) + fiatDirectionInfo,
|
||||||
formatter.formatVolumeWithCode(offer.getVolumeByAmount(tradeAmount)));
|
formatter.formatVolumeWithCode(offer.getVolumeByAmount(tradeAmount)));
|
||||||
} else {
|
} else {
|
||||||
addLabelTextField(gridPane, ++rowIndex, "Bitcoin amount" + btcDirectionInfo, formatter.formatCoinWithCode(offer.getAmount()));
|
addLabelTextField(gridPane, ++rowIndex, "Bitcoin amount" + btcDirectionInfo, formatter.formatCoinWithCode(offer.getAmount()));
|
||||||
@ -182,7 +183,7 @@ public class OfferDetailsWindow extends Overlay<OfferDetailsWindow> {
|
|||||||
String minVolume = "";
|
String minVolume = "";
|
||||||
if (!offer.getAmount().equals(offer.getMinAmount()))
|
if (!offer.getAmount().equals(offer.getMinAmount()))
|
||||||
minVolume = " (min. " + formatter.formatVolumeWithCode(offer.getMinOfferVolume()) + ")";
|
minVolume = " (min. " + formatter.formatVolumeWithCode(offer.getMinOfferVolume()) + ")";
|
||||||
addLabelTextField(gridPane, ++rowIndex, formatter.formatVolumeLabel(offer.getCurrencyCode()) + fiatDirectionInfo, volume + minVolume);
|
addLabelTextField(gridPane, ++rowIndex, formatter.formatVolumeLabel(currencyCode) + fiatDirectionInfo, volume + minVolume);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (takeOfferHandlerOptional.isPresent()) {
|
if (takeOfferHandlerOptional.isPresent()) {
|
||||||
|
@ -35,7 +35,7 @@ public class TacWindow extends Overlay<TacWindow> {
|
|||||||
"4. The user confirms that he has read and agreed to the rules regarding the dispute process:\n" +
|
"4. The user confirms that he has read and agreed to the rules regarding the dispute process:\n" +
|
||||||
" - You must finalize trades within the maximum duration specified for each payment method.\n" +
|
" - You must finalize trades within the maximum duration specified for each payment method.\n" +
|
||||||
" - You must enter the trade ID in the \"reason for payment\" text field when doing the fiat payment transfer.\n" +
|
" - You must enter the trade ID in the \"reason for payment\" text field when doing the fiat payment transfer.\n" +
|
||||||
" - If the bank of the fiat sender charges fees the sender (bitcoin buyer) has to cover the fees.\n" +
|
" - If the bank of the fiat sender charges fees the sender (BTC buyer) has to cover the fees.\n" +
|
||||||
" - You must cooperate with the arbitrator during the arbitration process.\n" +
|
" - You must cooperate with the arbitrator during the arbitration process.\n" +
|
||||||
" - You must reply within 48 hours to each arbitrator inquiry.\n" +
|
" - You must reply within 48 hours to each arbitrator inquiry.\n" +
|
||||||
" - Failure to follow the above requirements may result in loss of your security deposit.\n\n" +
|
" - Failure to follow the above requirements may result in loss of your security deposit.\n\n" +
|
||||||
|
@ -116,11 +116,11 @@ public class TradeDetailsWindow extends Overlay<TradeDetailsWindow> {
|
|||||||
String fiatDirectionInfo;
|
String fiatDirectionInfo;
|
||||||
String btcDirectionInfo;
|
String btcDirectionInfo;
|
||||||
if (tradeManager.isBuyer(offer)) {
|
if (tradeManager.isBuyer(offer)) {
|
||||||
addLabelTextField(gridPane, rowIndex, "Trade type:", formatter.getDirectionForBuyer(myOffer), Layout.FIRST_ROW_DISTANCE);
|
addLabelTextField(gridPane, rowIndex, "Trade type:", formatter.getDirectionForBuyer(myOffer, offer.getCurrencyCode()), Layout.FIRST_ROW_DISTANCE);
|
||||||
fiatDirectionInfo = " to spend:";
|
fiatDirectionInfo = " to spend:";
|
||||||
btcDirectionInfo = " to receive:";
|
btcDirectionInfo = " to receive:";
|
||||||
} else {
|
} else {
|
||||||
addLabelTextField(gridPane, rowIndex, "Trade type:", formatter.getDirectionForSeller(myOffer), Layout.FIRST_ROW_DISTANCE);
|
addLabelTextField(gridPane, rowIndex, "Trade type:", formatter.getDirectionForSeller(myOffer, offer.getCurrencyCode()), Layout.FIRST_ROW_DISTANCE);
|
||||||
fiatDirectionInfo = " to receive:";
|
fiatDirectionInfo = " to receive:";
|
||||||
btcDirectionInfo = " to spend:";
|
btcDirectionInfo = " to spend:";
|
||||||
}
|
}
|
||||||
@ -180,11 +180,11 @@ public class TradeDetailsWindow extends Overlay<TradeDetailsWindow> {
|
|||||||
|
|
||||||
if (contract != null) {
|
if (contract != null) {
|
||||||
if (buyerPaymentAccountContractData != null) {
|
if (buyerPaymentAccountContractData != null) {
|
||||||
TextFieldWithCopyIcon tf = addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "Buyer payment details:", BSResources.get(buyerPaymentAccountContractData.getPaymentDetails())).second;
|
TextFieldWithCopyIcon tf = addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "BTC buyer payment details:", BSResources.get(buyerPaymentAccountContractData.getPaymentDetails())).second;
|
||||||
tf.setTooltip(new Tooltip(tf.getText()));
|
tf.setTooltip(new Tooltip(tf.getText()));
|
||||||
}
|
}
|
||||||
if (sellerPaymentAccountContractData != null) {
|
if (sellerPaymentAccountContractData != null) {
|
||||||
TextFieldWithCopyIcon tf = addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "Seller payment details:", BSResources.get(sellerPaymentAccountContractData.getPaymentDetails())).second;
|
TextFieldWithCopyIcon tf = addLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, "BTC seller payment details:", BSResources.get(sellerPaymentAccountContractData.getPaymentDetails())).second;
|
||||||
tf.setTooltip(new Tooltip(tf.getText()));
|
tf.setTooltip(new Tooltip(tf.getText()));
|
||||||
}
|
}
|
||||||
if (buyerPaymentAccountContractData == null && sellerPaymentAccountContractData == null)
|
if (buyerPaymentAccountContractData == null && sellerPaymentAccountContractData == null)
|
||||||
|
@ -76,7 +76,7 @@ class ClosedTradesViewModel extends ActivatableWithDataModel<ClosedTradesDataMod
|
|||||||
}
|
}
|
||||||
|
|
||||||
String getDirectionLabel(ClosedTradableListItem item) {
|
String getDirectionLabel(ClosedTradableListItem item) {
|
||||||
return (item != null) ? formatter.getDirection(dataModel.getDirection(item.getTradable().getOffer()), item.getTradable().getOffer().getCurrencyCode()) : "";
|
return (item != null) ? formatter.getDirectionWithCode(dataModel.getDirection(item.getTradable().getOffer()), item.getTradable().getOffer().getCurrencyCode()) : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
String getDate(ClosedTradableListItem item) {
|
String getDate(ClosedTradableListItem item) {
|
||||||
|
@ -64,8 +64,20 @@ public class FailedTradesView extends ActivatableViewAndModel<VBox, FailedTrades
|
|||||||
tradeIdColumn.setComparator((o1, o2) -> o1.getTrade().getId().compareTo(o2.getTrade().getId()));
|
tradeIdColumn.setComparator((o1, o2) -> o1.getTrade().getId().compareTo(o2.getTrade().getId()));
|
||||||
dateColumn.setComparator((o1, o2) -> o1.getTrade().getDate().compareTo(o2.getTrade().getDate()));
|
dateColumn.setComparator((o1, o2) -> o1.getTrade().getDate().compareTo(o2.getTrade().getDate()));
|
||||||
priceColumn.setComparator((o1, o2) -> o1.getTrade().getTradePrice().compareTo(o2.getTrade().getTradePrice()));
|
priceColumn.setComparator((o1, o2) -> o1.getTrade().getTradePrice().compareTo(o2.getTrade().getTradePrice()));
|
||||||
volumeColumn.setComparator((o1, o2) -> o1.getTrade().getTradeVolume().compareTo(o2.getTrade().getTradeVolume()));
|
|
||||||
amountColumn.setComparator((o1, o2) -> o1.getTrade().getTradeAmount().compareTo(o2.getTrade().getTradeAmount()));
|
volumeColumn.setComparator((o1, o2) -> {
|
||||||
|
if (o1.getTrade().getTradeVolume() != null && o2.getTrade().getTradeVolume() != null)
|
||||||
|
return o1.getTrade().getTradeVolume().compareTo(o2.getTrade().getTradeVolume());
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
amountColumn.setComparator((o1, o2) -> {
|
||||||
|
if (o1.getTrade().getTradeAmount() != null && o2.getTrade().getTradeAmount() != null)
|
||||||
|
return o1.getTrade().getTradeAmount().compareTo(o2.getTrade().getTradeAmount());
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
|
||||||
stateColumn.setComparator((o1, o2) -> model.getState(o1).compareTo(model.getState(o2)));
|
stateColumn.setComparator((o1, o2) -> model.getState(o1).compareTo(model.getState(o2)));
|
||||||
marketColumn.setComparator((o1, o2) -> model.getMarketLabel(o1).compareTo(model.getMarketLabel(o2)));
|
marketColumn.setComparator((o1, o2) -> model.getMarketLabel(o1).compareTo(model.getMarketLabel(o2)));
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ class FailedTradesViewModel extends ActivatableWithDataModel<FailedTradesDataMod
|
|||||||
}
|
}
|
||||||
|
|
||||||
String getDirectionLabel(FailedTradesListItem item) {
|
String getDirectionLabel(FailedTradesListItem item) {
|
||||||
return (item != null) ? formatter.getDirection(dataModel.getDirection(item.getTrade().getOffer()), item.getTrade().getOffer().getCurrencyCode()) : "";
|
return (item != null) ? formatter.getDirectionWithCode(dataModel.getDirection(item.getTrade().getOffer()), item.getTrade().getOffer().getCurrencyCode()) : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
String getMarketLabel(FailedTradesListItem item) {
|
String getMarketLabel(FailedTradesListItem item) {
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
<TableColumn text="Price" fx:id="priceColumn" minWidth="160"/>
|
<TableColumn text="Price" fx:id="priceColumn" minWidth="160"/>
|
||||||
<TableColumn text="Amount in BTC (Min.)" fx:id="amountColumn" minWidth="180" maxWidth="190"/>
|
<TableColumn text="Amount in BTC (Min.)" fx:id="amountColumn" minWidth="180" maxWidth="190"/>
|
||||||
<TableColumn text="Amount (Min.)" fx:id="volumeColumn" minWidth="200"/>
|
<TableColumn text="Amount (Min.)" fx:id="volumeColumn" minWidth="200"/>
|
||||||
<TableColumn text="Trade type" fx:id="directionColumn" minWidth="100" maxWidth="100"/>
|
<TableColumn text="Trade type" fx:id="directionColumn" minWidth="100"/>
|
||||||
<TableColumn text="" fx:id="removeItemColumn" minWidth="120" maxWidth="120" sortable="false"/>
|
<TableColumn text="" fx:id="removeItemColumn" minWidth="120" maxWidth="120" sortable="false"/>
|
||||||
</columns>
|
</columns>
|
||||||
</TableView>
|
</TableView>
|
||||||
|
@ -83,7 +83,7 @@ class OpenOffersViewModel extends ActivatableWithDataModel<OpenOffersDataModel>
|
|||||||
if ((item == null))
|
if ((item == null))
|
||||||
return "";
|
return "";
|
||||||
|
|
||||||
return formatter.getDirection(dataModel.getDirection(item.getOffer()), item.getOffer().getCurrencyCode());
|
return formatter.getDirectionWithCode(dataModel.getDirection(item.getOffer()), item.getOffer().getCurrencyCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
String getMarketLabel(OpenOfferListItem item) {
|
String getMarketLabel(OpenOfferListItem item) {
|
||||||
|
@ -28,15 +28,14 @@
|
|||||||
|
|
||||||
<TableView fx:id="tableView" VBox.vgrow="SOMETIMES">
|
<TableView fx:id="tableView" VBox.vgrow="SOMETIMES">
|
||||||
<columns>
|
<columns>
|
||||||
<TableColumn text="Select" fx:id="selectColumn" minWidth="70" maxWidth="70" sortable="false"/>
|
|
||||||
<TableColumn text="Trade ID" fx:id="idColumn" minWidth="100"/>
|
<TableColumn text="Trade ID" fx:id="idColumn" minWidth="100"/>
|
||||||
<TableColumn text="Date/Time" fx:id="dateColumn" minWidth="130"/>
|
<TableColumn text="Date/Time" fx:id="dateColumn" minWidth="130"/>
|
||||||
<TableColumn text="Market" fx:id="marketColumn" minWidth="90"/>
|
<TableColumn text="Market" fx:id="marketColumn" minWidth="90"/>
|
||||||
<TableColumn text="Price" fx:id="priceColumn" minWidth="100"/>
|
<TableColumn text="Price" fx:id="priceColumn" minWidth="100"/>
|
||||||
<TableColumn text="Amount in BTC" fx:id="tradeAmountColumn" minWidth="150"/>
|
<TableColumn text="Amount in BTC" fx:id="tradeAmountColumn" minWidth="150"/>
|
||||||
<TableColumn text="Amount" fx:id="tradeVolumeColumn" minWidth="130"/>
|
<TableColumn text="Amount" fx:id="tradeVolumeColumn" minWidth="130"/>
|
||||||
<TableColumn text="Payment method" fx:id="paymentMethodColumn" minWidth="120"/>
|
<TableColumn text="Payment method" fx:id="paymentMethodColumn" minWidth="130"/>
|
||||||
<TableColumn text="My role" fx:id="roleColumn" minWidth="110" maxWidth="120"/>
|
<TableColumn text="My role" fx:id="roleColumn" minWidth="130"/>
|
||||||
<TableColumn text="" fx:id="avatarColumn" minWidth="40" maxWidth="40"/>
|
<TableColumn text="" fx:id="avatarColumn" minWidth="40" maxWidth="40"/>
|
||||||
</columns>
|
</columns>
|
||||||
</TableView>
|
</TableView>
|
||||||
|
@ -55,7 +55,7 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
|
|||||||
@FXML
|
@FXML
|
||||||
TableView<PendingTradesListItem> tableView;
|
TableView<PendingTradesListItem> tableView;
|
||||||
@FXML
|
@FXML
|
||||||
TableColumn<PendingTradesListItem, PendingTradesListItem> selectColumn, priceColumn, tradeVolumeColumn, tradeAmountColumn, avatarColumn, marketColumn, roleColumn, paymentMethodColumn, idColumn, dateColumn;
|
TableColumn<PendingTradesListItem, PendingTradesListItem> priceColumn, tradeVolumeColumn, tradeAmountColumn, avatarColumn, marketColumn, roleColumn, paymentMethodColumn, idColumn, dateColumn;
|
||||||
@FXML
|
@FXML
|
||||||
|
|
||||||
private SortedList<PendingTradesListItem> sortedList;
|
private SortedList<PendingTradesListItem> sortedList;
|
||||||
@ -81,7 +81,6 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
setSelectColumnCellFactory();
|
|
||||||
setTradeIdColumnCellFactory();
|
setTradeIdColumnCellFactory();
|
||||||
setDateColumnCellFactory();
|
setDateColumnCellFactory();
|
||||||
setAmountColumnCellFactory();
|
setAmountColumnCellFactory();
|
||||||
@ -98,11 +97,26 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
|
|||||||
|
|
||||||
idColumn.setComparator((o1, o2) -> o1.getTrade().getId().compareTo(o2.getTrade().getId()));
|
idColumn.setComparator((o1, o2) -> o1.getTrade().getId().compareTo(o2.getTrade().getId()));
|
||||||
dateColumn.setComparator((o1, o2) -> o1.getTrade().getDate().compareTo(o2.getTrade().getDate()));
|
dateColumn.setComparator((o1, o2) -> o1.getTrade().getDate().compareTo(o2.getTrade().getDate()));
|
||||||
tradeVolumeColumn.setComparator((o1, o2) -> o1.getTrade().getTradeVolume().compareTo(o2.getTrade().getTradeVolume()));
|
tradeVolumeColumn.setComparator((o1, o2) -> {
|
||||||
tradeAmountColumn.setComparator((o1, o2) -> o1.getTrade().getTradeAmount().compareTo(o2.getTrade().getTradeAmount()));
|
if (o1.getTrade().getTradeVolume() != null && o2.getTrade().getTradeVolume() != null)
|
||||||
|
return o1.getTrade().getTradeVolume().compareTo(o2.getTrade().getTradeVolume());
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
tradeAmountColumn.setComparator((o1, o2) -> {
|
||||||
|
if (o1.getTrade().getTradeAmount() != null && o2.getTrade().getTradeAmount() != null)
|
||||||
|
return o1.getTrade().getTradeAmount().compareTo(o2.getTrade().getTradeAmount());
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
priceColumn.setComparator((o1, o2) -> o1.getPrice().compareTo(o2.getPrice()));
|
priceColumn.setComparator((o1, o2) -> o1.getPrice().compareTo(o2.getPrice()));
|
||||||
paymentMethodColumn.setComparator((o1, o2) -> o1.getTrade().getOffer().getPaymentMethod().getId().compareTo(o2.getTrade().getOffer().getPaymentMethod().getId()));
|
paymentMethodColumn.setComparator((o1, o2) -> o1.getTrade().getOffer().getPaymentMethod().getId().compareTo(o2.getTrade().getOffer().getPaymentMethod().getId()));
|
||||||
avatarColumn.setComparator((o1, o2) -> o1.getTrade().getTradingPeerNodeAddress().hostName.compareTo(o2.getTrade().getTradingPeerNodeAddress().hostName));
|
avatarColumn.setComparator((o1, o2) -> {
|
||||||
|
if (o1.getTrade().getTradingPeerNodeAddress() != null && o2.getTrade().getTradingPeerNodeAddress() != null)
|
||||||
|
return o1.getTrade().getTradingPeerNodeAddress().hostName.compareTo(o2.getTrade().getTradingPeerNodeAddress().hostName);
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
roleColumn.setComparator((o1, o2) -> model.getMyRole(o1).compareTo(model.getMyRole(o2)));
|
roleColumn.setComparator((o1, o2) -> model.getMyRole(o1).compareTo(model.getMyRole(o2)));
|
||||||
marketColumn.setComparator((o1, o2) -> model.getMarketLabel(o1).compareTo(model.getMarketLabel(o2)));
|
marketColumn.setComparator((o1, o2) -> model.getMarketLabel(o1).compareTo(model.getMarketLabel(o2)));
|
||||||
|
|
||||||
@ -235,39 +249,6 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
|
|||||||
// CellFactories
|
// CellFactories
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
private void setSelectColumnCellFactory() {
|
|
||||||
selectColumn.setCellValueFactory((pendingTradesListItem) -> new ReadOnlyObjectWrapper<>(pendingTradesListItem.getValue()));
|
|
||||||
selectColumn.setCellFactory(
|
|
||||||
new Callback<TableColumn<PendingTradesListItem, PendingTradesListItem>, TableCell<PendingTradesListItem, PendingTradesListItem>>() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TableCell<PendingTradesListItem, PendingTradesListItem> call(TableColumn<PendingTradesListItem,
|
|
||||||
PendingTradesListItem> column) {
|
|
||||||
return new TableCell<PendingTradesListItem, PendingTradesListItem>() {
|
|
||||||
Button button;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateItem(final PendingTradesListItem item, boolean empty) {
|
|
||||||
super.updateItem(item, empty);
|
|
||||||
if (item != null && !empty) {
|
|
||||||
if (button == null) {
|
|
||||||
button = new Button("Select");
|
|
||||||
button.setOnAction(e -> tableView.getSelectionModel().select(item));
|
|
||||||
setGraphic(button);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
setGraphic(null);
|
|
||||||
if (button != null) {
|
|
||||||
button.setOnAction(null);
|
|
||||||
button = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setTradeIdColumnCellFactory() {
|
private void setTradeIdColumnCellFactory() {
|
||||||
idColumn.setCellValueFactory((pendingTradesListItem) -> new ReadOnlyObjectWrapper<>(pendingTradesListItem.getValue()));
|
idColumn.setCellValueFactory((pendingTradesListItem) -> new ReadOnlyObjectWrapper<>(pendingTradesListItem.getValue()));
|
||||||
idColumn.setCellFactory(
|
idColumn.setCellFactory(
|
||||||
|
@ -212,11 +212,13 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
|
|||||||
String getMyRole(PendingTradesListItem item) {
|
String getMyRole(PendingTradesListItem item) {
|
||||||
Trade trade = item.getTrade();
|
Trade trade = item.getTrade();
|
||||||
Contract contract = trade.getContract();
|
Contract contract = trade.getContract();
|
||||||
if (contract != null)
|
if (contract != null) {
|
||||||
return formatter.getRole(contract.isBuyerOffererAndSellerTaker(), dataModel.isOfferer(trade.getOffer()));
|
Offer offer = trade.getOffer();
|
||||||
else
|
return formatter.getRole(contract.isBuyerOffererAndSellerTaker(), dataModel.isOfferer(offer), offer.getCurrencyCode());
|
||||||
|
} else {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
String getPaymentMethod(PendingTradesListItem item) {
|
String getPaymentMethod(PendingTradesListItem item) {
|
||||||
String result = "";
|
String result = "";
|
||||||
|
@ -73,7 +73,7 @@ public class BuyerStep2View extends TradeStepView {
|
|||||||
"(You can wait for more confirmations if you want - 6 confirmations are considered as very secure.)\n\n" +
|
"(You can wait for more confirmations if you want - 6 confirmations are considered as very secure.)\n\n" +
|
||||||
"Please transfer from your external " +
|
"Please transfer from your external " +
|
||||||
CurrencyUtil.getNameByCode(trade.getOffer().getCurrencyCode()) + " wallet\n" +
|
CurrencyUtil.getNameByCode(trade.getOffer().getCurrencyCode()) + " wallet\n" +
|
||||||
model.formatter.formatVolumeWithCode(trade.getTradeVolume()) + " to the bitcoin seller.\n\n" +
|
model.formatter.formatVolumeWithCode(trade.getTradeVolume()) + " to the BTC seller.\n\n" +
|
||||||
"Here are the payment account details of the bitcoin seller:\n" +
|
"Here are the payment account details of the bitcoin seller:\n" +
|
||||||
"" + paymentAccountContractData.getPaymentDetailsForTradePopup() + ".\n\n" +
|
"" + paymentAccountContractData.getPaymentDetailsForTradePopup() + ".\n\n" +
|
||||||
"(You can copy & paste the values from the main screen after closing that popup.)";
|
"(You can copy & paste the values from the main screen after closing that popup.)";
|
||||||
@ -82,8 +82,8 @@ public class BuyerStep2View extends TradeStepView {
|
|||||||
message = "Your trade has reached at least one blockchain confirmation.\n" +
|
message = "Your trade has reached at least one blockchain confirmation.\n" +
|
||||||
"(You can wait for more confirmations if you want - 6 confirmations are considered as very secure.)\n\n" +
|
"(You can wait for more confirmations if you want - 6 confirmations are considered as very secure.)\n\n" +
|
||||||
"Please go to a bank and pay " +
|
"Please go to a bank and pay " +
|
||||||
model.formatter.formatVolumeWithCode(trade.getTradeVolume()) + " to the bitcoin seller.\n\n" +
|
model.formatter.formatVolumeWithCode(trade.getTradeVolume()) + " to the BTC seller.\n\n" +
|
||||||
"Here are the payment account details of the bitcoin seller:\n" +
|
"Here are the payment account details of the BTC seller:\n" +
|
||||||
"" + paymentAccountContractData.getPaymentDetailsForTradePopup() + ".\n" +
|
"" + paymentAccountContractData.getPaymentDetailsForTradePopup() + ".\n" +
|
||||||
"(You can copy & paste the values from the main screen after closing that popup.)\n\n" +
|
"(You can copy & paste the values from the main screen after closing that popup.)\n\n" +
|
||||||
"Please don't forget to add the trade ID \"" + trade.getShortId() +
|
"Please don't forget to add the trade ID \"" + trade.getShortId() +
|
||||||
@ -92,13 +92,13 @@ public class BuyerStep2View extends TradeStepView {
|
|||||||
"Bitcoin, Btc or Bitsquare.\n\n" +
|
"Bitcoin, Btc or Bitsquare.\n\n" +
|
||||||
"If your bank charges fees you have to cover those fees.\n\n" +
|
"If your bank charges fees you have to cover those fees.\n\n" +
|
||||||
"After you have done the payment write on the paper receipt: NO REFUNDS.\n" +
|
"After you have done the payment write on the paper receipt: NO REFUNDS.\n" +
|
||||||
"Then tear it in 2 parts, make a photo and send it to the seller's email address.";
|
"Then tear it in 2 parts, make a photo and send it to the BTC seller's email address.";
|
||||||
else
|
else
|
||||||
message = "Your trade has reached at least one blockchain confirmation.\n" +
|
message = "Your trade has reached at least one blockchain confirmation.\n" +
|
||||||
"(You can wait for more confirmations if you want - 6 confirmations are considered as very secure.)\n\n" +
|
"(You can wait for more confirmations if you want - 6 confirmations are considered as very secure.)\n\n" +
|
||||||
"Please go to your online banking web page and pay " +
|
"Please go to your online banking web page and pay " +
|
||||||
model.formatter.formatVolumeWithCode(trade.getTradeVolume()) + " to the bitcoin seller.\n\n" +
|
model.formatter.formatVolumeWithCode(trade.getTradeVolume()) + " to the BTC seller.\n\n" +
|
||||||
"Here are the payment account details of the bitcoin seller:\n" +
|
"Here are the payment account details of the BTC seller:\n" +
|
||||||
"" + paymentAccountContractData.getPaymentDetailsForTradePopup() + ".\n" +
|
"" + paymentAccountContractData.getPaymentDetailsForTradePopup() + ".\n" +
|
||||||
"(You can copy & paste the values from the main screen after closing that popup.)\n\n" +
|
"(You can copy & paste the values from the main screen after closing that popup.)\n\n" +
|
||||||
"Please don't forget to add the trade ID \"" + trade.getShortId() +
|
"Please don't forget to add the trade ID \"" + trade.getShortId() +
|
||||||
|
@ -37,12 +37,12 @@ public class BuyerStep3View extends TradeStepView {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getInfoBlockTitle() {
|
protected String getInfoBlockTitle() {
|
||||||
return "Wait for seller's payment confirmation";
|
return "Wait for BTC seller's payment confirmation";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getInfoText() {
|
protected String getInfoText() {
|
||||||
return "Waiting for the bitcoin seller's confirmation " +
|
return "Waiting for the BTC seller's confirmation " +
|
||||||
"for the receipt of the " + model.dataModel.getCurrencyCode() + " payment.";
|
"for the receipt of the " + model.dataModel.getCurrencyCode() + " payment.";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,9 +57,9 @@ public class BuyerStep3View extends TradeStepView {
|
|||||||
String substitute = model.isBlockChainMethod() ?
|
String substitute = model.isBlockChainMethod() ?
|
||||||
"on the " + model.dataModel.getCurrencyCode() + "blockchain" :
|
"on the " + model.dataModel.getCurrencyCode() + "blockchain" :
|
||||||
"at your payment provider (e.g. bank)";
|
"at your payment provider (e.g. bank)";
|
||||||
return "The seller still has not confirmed your payment!\n" +
|
return "The BTC seller still has not confirmed your payment!\n" +
|
||||||
"Please check " + substitute + " if the payment sending was successful.\n" +
|
"Please check " + substitute + " if the payment sending was successful.\n" +
|
||||||
"If the seller does not confirm the receipt of your payment until " +
|
"If the BTC seller does not confirm the receipt of your payment until " +
|
||||||
model.getDateForOpenDispute() +
|
model.getDateForOpenDispute() +
|
||||||
" the trade will be investigated by the arbitrator.";
|
" the trade will be investigated by the arbitrator.";
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ public class BuyerStep3View extends TradeStepView {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getOpenForDisputeText() {
|
protected String getOpenForDisputeText() {
|
||||||
return "The seller has not confirmed your payment!\n" +
|
return "The BTC seller has not confirmed your payment!\n" +
|
||||||
"The max. period for the trade has elapsed.\n" +
|
"The max. period for the trade has elapsed.\n" +
|
||||||
"Please contact the arbitrator for opening a dispute.";
|
"Please contact the arbitrator for opening a dispute.";
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ public class SellerStep1View extends TradeStepView {
|
|||||||
@Override
|
@Override
|
||||||
protected String getInfoText() {
|
protected String getInfoText() {
|
||||||
return "Deposit transaction has been published.\n" +
|
return "Deposit transaction has been published.\n" +
|
||||||
"The bitcoin buyer needs to wait for at least one blockchain confirmation before " +
|
"The BTC buyer needs to wait for at least one blockchain confirmation before " +
|
||||||
"starting the payment.";
|
"starting the payment.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ public class SellerStep2View extends TradeStepView {
|
|||||||
@Override
|
@Override
|
||||||
protected String getInfoText() {
|
protected String getInfoText() {
|
||||||
return "The deposit transaction has at least one blockchain confirmation.\n" +
|
return "The deposit transaction has at least one blockchain confirmation.\n" +
|
||||||
"You need to wait until the bitcoin buyer starts the " + model.dataModel.getCurrencyCode() + " payment.";
|
"You need to wait until the BTC buyer starts the " + model.dataModel.getCurrencyCode() + " payment.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ public class SellerStep2View extends TradeStepView {
|
|||||||
@Override
|
@Override
|
||||||
protected String getWarningText() {
|
protected String getWarningText() {
|
||||||
setInformationHeadline();
|
setInformationHeadline();
|
||||||
return "The buyer still has not done the " + model.dataModel.getCurrencyCode() + " payment.\n" +
|
return "The BTC buyer still has not done the " + model.dataModel.getCurrencyCode() + " payment.\n" +
|
||||||
"You need to wait until he starts the payment.\n" +
|
"You need to wait until he starts the payment.\n" +
|
||||||
"If the trade has not been completed on " +
|
"If the trade has not been completed on " +
|
||||||
model.getDateForOpenDispute() +
|
model.getDateForOpenDispute() +
|
||||||
@ -67,7 +67,7 @@ public class SellerStep2View extends TradeStepView {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getOpenForDisputeText() {
|
protected String getOpenForDisputeText() {
|
||||||
return "The buyer has not started his payment!\n" +
|
return "The BTC buyer has not started his payment!\n" +
|
||||||
"The max. allowed period for the trade has elapsed.\n" +
|
"The max. allowed period for the trade has elapsed.\n" +
|
||||||
"Please contact the arbitrator for opening a dispute.";
|
"Please contact the arbitrator for opening a dispute.";
|
||||||
}
|
}
|
||||||
|
@ -82,11 +82,11 @@ public class SellerStep3View extends TradeStepView {
|
|||||||
} else {
|
} else {
|
||||||
message = "Your trading partner has confirmed that he initiated the " + currencyName + " payment.\n\n" +
|
message = "Your trading partner has confirmed that he initiated the " + currencyName + " payment.\n\n" +
|
||||||
"Please go to your online banking web page and check if you have received " +
|
"Please go to your online banking web page and check if you have received " +
|
||||||
tradeVolumeWithCode + " from the bitcoin buyer.\n\n" +
|
tradeVolumeWithCode + " from the BTC buyer.\n\n" +
|
||||||
"The trade ID (\"reason for payment\" text) of the transaction is: \"" + trade.getShortId() + "\"";
|
"The trade ID (\"reason for payment\" text) of the transaction is: \"" + trade.getShortId() + "\"";
|
||||||
|
|
||||||
if (paymentAccountContractData instanceof CashDepositAccountContractData)
|
if (paymentAccountContractData instanceof CashDepositAccountContractData)
|
||||||
message += "\n\nBecause the payment is done via Cash Deposit the buyer has to write \"NO REFUND\" " +
|
message += "\n\nBecause the payment is done via Cash Deposit the BTC buyer has to write \"NO REFUND\" " +
|
||||||
"on the paper receipt, tear it in 2 parts and send you a photo by email.\n\n" +
|
"on the paper receipt, tear it in 2 parts and send you a photo by email.\n\n" +
|
||||||
"To avoid chargeback risk, only confirm if you received the email and if you are " +
|
"To avoid chargeback risk, only confirm if you received the email and if you are " +
|
||||||
"sure the paper receipt is valid.\n" +
|
"sure the paper receipt is valid.\n" +
|
||||||
@ -200,11 +200,11 @@ public class SellerStep3View extends TradeStepView {
|
|||||||
@Override
|
@Override
|
||||||
protected String getInfoText() {
|
protected String getInfoText() {
|
||||||
if (model.isBlockChainMethod()) {
|
if (model.isBlockChainMethod()) {
|
||||||
return "The bitcoin buyer has started the " + model.dataModel.getCurrencyCode() + " payment.\n" +
|
return "The BTC buyer has started the " + model.dataModel.getCurrencyCode() + " payment.\n" +
|
||||||
"Check for blockchain confirmations at your altcoin wallet or block explorer and " +
|
"Check for blockchain confirmations at your altcoin wallet or block explorer and " +
|
||||||
"confirm the payment when you have sufficient blockchain confirmations.";
|
"confirm the payment when you have sufficient blockchain confirmations.";
|
||||||
} else {
|
} else {
|
||||||
return "The bitcoin buyer has started the " + model.dataModel.getCurrencyCode() + " payment.\n" +
|
return "The BTC buyer has started the " + model.dataModel.getCurrencyCode() + " payment.\n" +
|
||||||
"Check at your payment account (e.g. bank account) and confirm when you have " +
|
"Check at your payment account (e.g. bank account) and confirm when you have " +
|
||||||
"received the payment.";
|
"received the payment.";
|
||||||
}
|
}
|
||||||
@ -271,7 +271,7 @@ public class SellerStep3View extends TradeStepView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
message += "Please note, that as soon you have confirmed the receipt, the locked trade amount will be released " +
|
message += "Please note, that as soon you have confirmed the receipt, the locked trade amount will be released " +
|
||||||
"to the bitcoin buyer and the security deposit will be refunded.";
|
"to the BTC buyer and the security deposit will be refunded.";
|
||||||
new Popup()
|
new Popup()
|
||||||
.headLine("Confirm that you have received the payment")
|
.headLine("Confirm that you have received the payment")
|
||||||
.confirmation(message)
|
.confirmation(message)
|
||||||
|
@ -355,7 +355,7 @@ public class PreferencesView extends ActivatableViewAndModel<GridPane, Activatab
|
|||||||
private void activateDisplayCurrencies() {
|
private void activateDisplayCurrencies() {
|
||||||
preferredTradeCurrencyComboBox.setItems(tradeCurrencies);
|
preferredTradeCurrencyComboBox.setItems(tradeCurrencies);
|
||||||
preferredTradeCurrencyComboBox.getSelectionModel().select(preferences.getPreferredTradeCurrency());
|
preferredTradeCurrencyComboBox.getSelectionModel().select(preferences.getPreferredTradeCurrency());
|
||||||
preferredTradeCurrencyComboBox.setVisibleRowCount(Math.min(preferredTradeCurrencyComboBox.getItems().size(), 25));
|
preferredTradeCurrencyComboBox.setVisibleRowCount(25);
|
||||||
preferredTradeCurrencyComboBox.setOnAction(e -> {
|
preferredTradeCurrencyComboBox.setOnAction(e -> {
|
||||||
TradeCurrency selectedItem = preferredTradeCurrencyComboBox.getSelectionModel().getSelectedItem();
|
TradeCurrency selectedItem = preferredTradeCurrencyComboBox.getSelectionModel().getSelectedItem();
|
||||||
if (selectedItem != null)
|
if (selectedItem != null)
|
||||||
|
@ -334,13 +334,20 @@ public class BSFormatter {
|
|||||||
return decimalFormat.format(MathUtils.roundDouble(value, precision)).replace(",", ".");
|
return decimalFormat.format(MathUtils.roundDouble(value, precision)).replace(",", ".");
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDirection(Offer.Direction direction, String currencyCode) {
|
public String getDirectionWithCode(Offer.Direction direction, String currencyCode) {
|
||||||
if (CurrencyUtil.isFiatCurrency(currencyCode))
|
if (CurrencyUtil.isFiatCurrency(currencyCode))
|
||||||
return (direction == Offer.Direction.BUY) ? "Buy BTC" : "Sell BTC";
|
return (direction == Offer.Direction.BUY) ? "Buy BTC" : "Sell BTC";
|
||||||
else
|
else
|
||||||
return (direction == Offer.Direction.SELL) ? "Buy " + currencyCode : "Sell " + currencyCode;
|
return (direction == Offer.Direction.SELL) ? "Buy " + currencyCode : "Sell " + currencyCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getDirectionWithCodeDetailed(Offer.Direction direction, String currencyCode) {
|
||||||
|
if (CurrencyUtil.isFiatCurrency(currencyCode))
|
||||||
|
return (direction == Offer.Direction.BUY) ? "buying BTC for " + currencyCode : "selling BTC for " + currencyCode;
|
||||||
|
else
|
||||||
|
return (direction == Offer.Direction.SELL) ? "buying " + currencyCode + " (selling BTC)" : "selling " + currencyCode + " (buying BTC)";
|
||||||
|
}
|
||||||
|
|
||||||
public String formatAmount(Offer offer) {
|
public String formatAmount(Offer offer) {
|
||||||
return formatCoin(offer.getAmount());
|
return formatCoin(offer.getAmount());
|
||||||
}
|
}
|
||||||
@ -512,36 +519,64 @@ public class BSFormatter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDirectionBothSides(Offer.Direction direction) {
|
public String getDirectionBothSides(Offer.Direction direction, String currencyCode) {
|
||||||
return direction == Offer.Direction.BUY ? "Offerer as bitcoin buyer / Taker as bitcoin seller" :
|
if (CurrencyUtil.isFiatCurrency(currencyCode))
|
||||||
"Offerer as bitcoin seller / Taker as bitcoin buyer";
|
return direction == Offer.Direction.BUY ? "Offerer as BTC buyer / Taker as BTC seller" :
|
||||||
}
|
"Offerer as BTC seller / Taker as BTC buyer";
|
||||||
|
|
||||||
public String getDirectionForBuyer(boolean isMyOffer) {
|
|
||||||
return isMyOffer ? "You are buying bitcoin as offerer / Taker is selling bitcoin" :
|
|
||||||
"You are buying bitcoin as taker / Offerer is selling bitcoin";
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDirectionForSeller(boolean isMyOffer) {
|
|
||||||
return isMyOffer ? "You are selling bitcoin as offerer / Taker is buying bitcoin" :
|
|
||||||
"You are selling bitcoin as taker / Offerer is buying bitcoin";
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDirectionForTakeOffer(Offer.Direction direction) {
|
|
||||||
return direction == Offer.Direction.BUY ? "You are selling bitcoin (by taking an offer from someone who wants to buy bitcoin)" :
|
|
||||||
"You are buying bitcoin (by taking an offer from someone who wants to sell bitcoin)";
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getOfferDirectionForCreateOffer(Offer.Direction direction) {
|
|
||||||
return direction == Offer.Direction.BUY ? "You are creating an offer for buying bitcoin" :
|
|
||||||
"You are creating an offer for selling bitcoin";
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRole(boolean isBuyerOffererAndSellerTaker, boolean isOfferer) {
|
|
||||||
if (isBuyerOffererAndSellerTaker)
|
|
||||||
return isOfferer ? "Buyer (offerer)" : "Seller (taker)";
|
|
||||||
else
|
else
|
||||||
return isOfferer ? "Seller (offerer)" : "Buyer (taker)";
|
return direction == Offer.Direction.SELL ? "Offerer as " + currencyCode + " buyer / Taker as " + currencyCode + " seller" :
|
||||||
|
"Offerer as " + currencyCode + " seller / Taker as " + currencyCode + " buyer";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDirectionForBuyer(boolean isMyOffer, String currencyCode) {
|
||||||
|
if (CurrencyUtil.isFiatCurrency(currencyCode))
|
||||||
|
return isMyOffer ? "You are buying BTC as offerer / Taker is selling BTC" :
|
||||||
|
"You are buying BTC as taker / Offerer is selling BTC";
|
||||||
|
else
|
||||||
|
return isMyOffer ? "You are selling " + currencyCode + " as offerer / Taker is buying " + currencyCode + "" :
|
||||||
|
"You are selling " + currencyCode + " as taker / Offerer is buying " + currencyCode + "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDirectionForSeller(boolean isMyOffer, String currencyCode) {
|
||||||
|
if (CurrencyUtil.isFiatCurrency(currencyCode))
|
||||||
|
return isMyOffer ? "You are selling BTC as offerer / Taker is buying BTC" :
|
||||||
|
"You are selling BTC as taker / Offerer is buying BTC";
|
||||||
|
else
|
||||||
|
return isMyOffer ? "You are buying " + currencyCode + " as offerer / Taker is selling " + currencyCode + "" :
|
||||||
|
"You are buying " + currencyCode + " as taker / Offerer is selling " + currencyCode + "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDirectionForTakeOffer(Offer.Direction direction, String currencyCode) {
|
||||||
|
if (CurrencyUtil.isFiatCurrency(currencyCode))
|
||||||
|
return direction == Offer.Direction.BUY ? "You are selling BTC (buying " + currencyCode + ")" :
|
||||||
|
"You are buying BTC (selling " + currencyCode + ")";
|
||||||
|
else
|
||||||
|
return direction == Offer.Direction.SELL ? "You are selling " + currencyCode + " (buying BTC)" :
|
||||||
|
"You are buying " + currencyCode + " (selling BTC)";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOfferDirectionForCreateOffer(Offer.Direction direction, String currencyCode) {
|
||||||
|
if (CurrencyUtil.isFiatCurrency(currencyCode))
|
||||||
|
return direction == Offer.Direction.BUY ? "You are creating an offer for buying BTC" :
|
||||||
|
"You are creating an offer for selling BTC";
|
||||||
|
else
|
||||||
|
return direction == Offer.Direction.SELL ? "You are creating an offer for buying " + currencyCode + " (selling BTC)" :
|
||||||
|
"You are creating an offer for selling " + currencyCode + " (buying BTC)";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRole(boolean isBuyerOffererAndSellerTaker, boolean isOfferer, String currencyCode) {
|
||||||
|
if (CurrencyUtil.isFiatCurrency(currencyCode)) {
|
||||||
|
if (isBuyerOffererAndSellerTaker)
|
||||||
|
return isOfferer ? "BTC buyer as offerer" : "BTC seller as taker";
|
||||||
|
else
|
||||||
|
return isOfferer ? "BTC seller as offerer" : "BTC buyer as taker";
|
||||||
|
} else {
|
||||||
|
if (isBuyerOffererAndSellerTaker)
|
||||||
|
return isOfferer ? currencyCode + " seller as offerer" : currencyCode + " buyer as taker";
|
||||||
|
else
|
||||||
|
return isOfferer ? currencyCode + " buyer as offerer" : currencyCode + " seller as taker";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String formatBytes(long bytes) {
|
public String formatBytes(long bytes) {
|
||||||
|
@ -28,5 +28,30 @@ public class CurrencyListItem {
|
|||||||
this.numTrades = numTrades;
|
this.numTrades = numTrades;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
|
||||||
|
CurrencyListItem that = (CurrencyListItem) o;
|
||||||
|
|
||||||
|
if (numTrades != that.numTrades) return false;
|
||||||
|
return !(tradeCurrency != null ? !tradeCurrency.equals(that.tradeCurrency) : that.tradeCurrency != null);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = tradeCurrency != null ? tradeCurrency.hashCode() : 0;
|
||||||
|
result = 31 * result + numTrades;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "CurrencyListItem{" +
|
||||||
|
"tradeCurrency=" + tradeCurrency +
|
||||||
|
", numTrades=" + numTrades +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -44,6 +44,7 @@ import javafx.util.StringConverter;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -232,7 +233,7 @@ public class GUIUtil {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void fillCurrencyListItems(List<TradeCurrency> tradeCurrencyList, ObservableList<CurrencyListItem> currencyListItems, Preferences preferences) {
|
public static void fillCurrencyListItems(List<TradeCurrency> tradeCurrencyList, ObservableList<CurrencyListItem> currencyListItems, @Nullable CurrencyListItem showAllCurrencyListItem, Preferences preferences) {
|
||||||
Set<TradeCurrency> tradeCurrencySet = new HashSet<>();
|
Set<TradeCurrency> tradeCurrencySet = new HashSet<>();
|
||||||
Map<String, Integer> tradesPerCurrencyMap = new HashMap<>();
|
Map<String, Integer> tradesPerCurrencyMap = new HashMap<>();
|
||||||
tradeCurrencyList.stream().forEach(tradeCurrency -> {
|
tradeCurrencyList.stream().forEach(tradeCurrency -> {
|
||||||
@ -244,7 +245,7 @@ public class GUIUtil {
|
|||||||
tradesPerCurrencyMap.put(code, 1);
|
tradesPerCurrencyMap.put(code, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
List<CurrencyListItem> fiatList = tradeCurrencySet.stream()
|
List<CurrencyListItem> list = tradeCurrencySet.stream()
|
||||||
.filter(e -> CurrencyUtil.isFiatCurrency(e.getCode()))
|
.filter(e -> CurrencyUtil.isFiatCurrency(e.getCode()))
|
||||||
.map(e -> new CurrencyListItem(e, tradesPerCurrencyMap.get(e.getCode())))
|
.map(e -> new CurrencyListItem(e, tradesPerCurrencyMap.get(e.getCode())))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
@ -254,15 +255,19 @@ public class GUIUtil {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
if (preferences.getSortMarketCurrenciesNumerically()) {
|
if (preferences.getSortMarketCurrenciesNumerically()) {
|
||||||
fiatList.sort((o1, o2) -> new Integer(o2.numTrades).compareTo(o1.numTrades));
|
list.sort((o1, o2) -> new Integer(o2.numTrades).compareTo(o1.numTrades));
|
||||||
cryptoList.sort((o1, o2) -> new Integer(o2.numTrades).compareTo(o1.numTrades));
|
cryptoList.sort((o1, o2) -> new Integer(o2.numTrades).compareTo(o1.numTrades));
|
||||||
} else {
|
} else {
|
||||||
fiatList.sort((o1, o2) -> o1.tradeCurrency.compareTo(o2.tradeCurrency));
|
list.sort((o1, o2) -> o1.tradeCurrency.compareTo(o2.tradeCurrency));
|
||||||
cryptoList.sort((o1, o2) -> o1.tradeCurrency.compareTo(o2.tradeCurrency));
|
cryptoList.sort((o1, o2) -> o1.tradeCurrency.compareTo(o2.tradeCurrency));
|
||||||
}
|
}
|
||||||
|
|
||||||
fiatList.addAll(cryptoList);
|
list.addAll(cryptoList);
|
||||||
currencyListItems.setAll(fiatList);
|
|
||||||
|
if (showAllCurrencyListItem != null)
|
||||||
|
list.add(0, showAllCurrencyListItem);
|
||||||
|
|
||||||
|
currencyListItems.setAll(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void openWebPage(String target) {
|
public static void openWebPage(String target) {
|
||||||
|
@ -107,7 +107,7 @@ takeOffer.amountPriceBox.next=Next step
|
|||||||
takeOffer.amountPriceBox.warning.invalidBtcDecimalPlaces=The amount you have entered exceeds the number of allowed decimal places.\nThe amount has been adjusted to 4 decimal places.
|
takeOffer.amountPriceBox.warning.invalidBtcDecimalPlaces=The amount you have entered exceeds the number of allowed decimal places.\nThe amount has been adjusted to 4 decimal places.
|
||||||
takeOffer.validation.amountSmallerThanMinAmount=Amount cannot be smaller than minimum amount defined in the offer.
|
takeOffer.validation.amountSmallerThanMinAmount=Amount cannot be smaller than minimum amount defined in the offer.
|
||||||
takeOffer.validation.amountLargerThanOfferAmount=Input amount cannot be higher than the amount defined in the offer.
|
takeOffer.validation.amountLargerThanOfferAmount=Input amount cannot be higher than the amount defined in the offer.
|
||||||
takeOffer.validation.amountLargerThanOfferAmountMinusFee=That input amount would create a dust change for the seller.
|
takeOffer.validation.amountLargerThanOfferAmountMinusFee=That input amount would create a dust change for the BTC seller.
|
||||||
|
|
||||||
takeOffer.fundsBox.title=Fund your trade
|
takeOffer.fundsBox.title=Fund your trade
|
||||||
takeOffer.fundsBox.isOfferAvailable=Check if offer is available...
|
takeOffer.fundsBox.isOfferAvailable=Check if offer is available...
|
||||||
@ -117,7 +117,7 @@ takeOffer.fundsBox.address=Trade wallet address:
|
|||||||
takeOffer.fundsBox.balance=Trade wallet balance:
|
takeOffer.fundsBox.balance=Trade wallet balance:
|
||||||
takeOffer.fundsBox.buy.info=For every offer there is a dedicated trade wallet. You need to fund that trade wallet with the necessary bitcoin amount. Those \
|
takeOffer.fundsBox.buy.info=For every offer there is a dedicated trade wallet. You need to fund that trade wallet with the necessary bitcoin amount. Those \
|
||||||
funds will be paid in to a locked deposit address. At the end of a successful trade you will get back your security deposit and the bitcoin amount you sold will be transferred to the \
|
funds will be paid in to a locked deposit address. At the end of a successful trade you will get back your security deposit and the bitcoin amount you sold will be transferred to the \
|
||||||
buyer.
|
BTC buyer.
|
||||||
takeOffer.fundsBox.sell.info=For every offer there is a dedicated trade wallet. You need to fund that trade wallet with the necessary bitcoin amount. Those \
|
takeOffer.fundsBox.sell.info=For every offer there is a dedicated trade wallet. You need to fund that trade wallet with the necessary bitcoin amount. Those \
|
||||||
funds will be paid in to a locked deposit address. At the end of a successful trade you will get back your security deposit.
|
funds will be paid in to a locked deposit address. At the end of a successful trade you will get back your security deposit.
|
||||||
takeOffer.fundsBox.tradeAmount=Amount to sell:
|
takeOffer.fundsBox.tradeAmount=Amount to sell:
|
||||||
|
Loading…
Reference in New Issue
Block a user