Improve display for role (buyer/seller/offerer/taker)

This commit is contained in:
Manfred Karrer 2016-02-03 23:20:12 +01:00
parent d31a4c2947
commit ba4a228fed
6 changed files with 70 additions and 18 deletions

View file

@ -98,6 +98,10 @@ public class Contract implements Serializable {
this.takerBtcPubKey = takerBtcPubKey; this.takerBtcPubKey = takerBtcPubKey;
} }
public boolean isBuyerOffererAndSellerTaker() {
return isBuyerOffererAndSellerTaker;
}
public String getBuyerAccountId() { public String getBuyerAccountId() {
return isBuyerOffererAndSellerTaker ? offererAccountId : takerAccountId; return isBuyerOffererAndSellerTaker ? offererAccountId : takerAccountId;
} }

View file

@ -61,7 +61,6 @@ import static com.google.common.base.Preconditions.checkNotNull;
public class PendingTradesDataModel extends ActivatableDataModel { public class PendingTradesDataModel extends ActivatableDataModel {
private final TradeManager tradeManager; private final TradeManager tradeManager;
private final WalletService walletService; private final WalletService walletService;
private final TradeWalletService tradeWalletService; private final TradeWalletService tradeWalletService;
private final User user; private final User user;
@ -295,6 +294,10 @@ public class PendingTradesDataModel extends ActivatableDataModel {
return trade.getOffer().getDirection() == Offer.Direction.BUY; return trade.getOffer().getDirection() == Offer.Direction.BUY;
} }
boolean isOfferer(Offer offer) {
return tradeManager.isMyOffer(offer);
}
boolean isOfferer() { boolean isOfferer() {
return isOfferer; return isOfferer;
} }
@ -380,11 +383,5 @@ public class PendingTradesDataModel extends ActivatableDataModel {
public Preferences getPreferences() { public Preferences getPreferences() {
return preferences; return preferences;
} }
///////////////////////////////////////////////////////////////////////////////////////////
// Utils
///////////////////////////////////////////////////////////////////////////////////////////
} }

View file

@ -54,7 +54,8 @@
<PropertyValueFactory property="tradeVolume"/> <PropertyValueFactory property="tradeVolume"/>
</cellValueFactory> </cellValueFactory>
</TableColumn> </TableColumn>
<TableColumn text="Trade type" fx:id="directionColumn" minWidth="80"/> <TableColumn text="Payment method" fx:id="paymentMethodColumn" minWidth="120"/>
<TableColumn text="My role" fx:id="roleColumn" minWidth="120" maxWidth="120"/>
</columns> </columns>
</TableView> </TableView>
</VBox> </VBox>

View file

@ -58,9 +58,7 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
@FXML @FXML
TableColumn<PendingTradesListItem, Fiat> tradeVolumeColumn; TableColumn<PendingTradesListItem, Fiat> tradeVolumeColumn;
@FXML @FXML
TableColumn<PendingTradesListItem, PendingTradesListItem> directionColumn; TableColumn<PendingTradesListItem, PendingTradesListItem> roleColumn, paymentMethodColumn, idColumn;
@FXML
TableColumn<PendingTradesListItem, PendingTradesListItem> idColumn;
@FXML @FXML
TableColumn<PendingTradesListItem, Date> dateColumn; TableColumn<PendingTradesListItem, Date> dateColumn;
@FXML @FXML
@ -93,7 +91,8 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
setAmountColumnCellFactory(); setAmountColumnCellFactory();
setPriceColumnCellFactory(); setPriceColumnCellFactory();
setVolumeColumnCellFactory(); setVolumeColumnCellFactory();
setDirectionColumnCellFactory(); setPaymentMethodColumnCellFactory();
setRoleColumnCellFactory();
table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
table.setPlaceholder(new Label("No pending trades available")); table.setPlaceholder(new Label("No pending trades available"));
@ -308,9 +307,9 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
})); }));
} }
private void setDirectionColumnCellFactory() { private void setPaymentMethodColumnCellFactory() {
directionColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue())); paymentMethodColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
directionColumn.setCellFactory( paymentMethodColumn.setCellFactory(
new Callback<TableColumn<PendingTradesListItem, PendingTradesListItem>, TableCell<PendingTradesListItem, new Callback<TableColumn<PendingTradesListItem, PendingTradesListItem>, TableCell<PendingTradesListItem,
PendingTradesListItem>>() { PendingTradesListItem>>() {
@Override @Override
@ -321,7 +320,29 @@ public class PendingTradesView extends ActivatableViewAndModel<VBox, PendingTrad
public void updateItem(final PendingTradesListItem item, boolean empty) { public void updateItem(final PendingTradesListItem item, boolean empty) {
super.updateItem(item, empty); super.updateItem(item, empty);
if (item != null && !empty) if (item != null && !empty)
setText(model.evaluateDirection(item)); setText(model.getPaymentMethod(item));
else
setText(null);
}
};
}
});
}
private void setRoleColumnCellFactory() {
roleColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
roleColumn.setCellFactory(
new Callback<TableColumn<PendingTradesListItem, PendingTradesListItem>, TableCell<PendingTradesListItem,
PendingTradesListItem>>() {
@Override
public TableCell<PendingTradesListItem, PendingTradesListItem> call(
TableColumn<PendingTradesListItem, PendingTradesListItem> column) {
return new TableCell<PendingTradesListItem, PendingTradesListItem>() {
@Override
public void updateItem(final PendingTradesListItem item, boolean empty) {
super.updateItem(item, empty);
if (item != null && !empty)
setText(model.getMyRole(item));
else else
setText(null); setText(null);
} }

View file

@ -28,7 +28,9 @@ import io.bitsquare.gui.util.validation.*;
import io.bitsquare.locale.BSResources; import io.bitsquare.locale.BSResources;
import io.bitsquare.p2p.P2PService; import io.bitsquare.p2p.P2PService;
import io.bitsquare.payment.PaymentMethod; import io.bitsquare.payment.PaymentMethod;
import io.bitsquare.trade.Contract;
import io.bitsquare.trade.Trade; import io.bitsquare.trade.Trade;
import io.bitsquare.trade.offer.Offer;
import javafx.beans.property.*; import javafx.beans.property.*;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import org.bitcoinj.core.BlockChainListener; import org.bitcoinj.core.BlockChainListener;
@ -242,8 +244,28 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
return formatter.formatFiatWithCode(value); return formatter.formatFiatWithCode(value);
} }
String evaluateDirection(PendingTradesListItem item) { String getMyRole(PendingTradesListItem item) {
return (item != null) ? formatter.getDirection(dataModel.getDirection(item.getTrade().getOffer())) : ""; Trade trade = item.getTrade();
Contract contract = trade.getContract();
if (contract != null)
return formatter.getRole(contract.isBuyerOffererAndSellerTaker(), dataModel.isOfferer(trade.getOffer()));
else
return "";
}
String getPaymentMethod(PendingTradesListItem item) {
String result = "";
if (item != null) {
Offer offer = item.getTrade().getOffer();
String method = BSResources.get(offer.getPaymentMethod().getId());
String methodCountryCode = offer.getPaymentMethodCountryCode();
if (methodCountryCode != null)
result = method + " (" + methodCountryCode + ")";
else
result = method;
}
return result;
} }
String formatDate(Date value) { String formatDate(Date value) {

View file

@ -365,4 +365,11 @@ public class BSFormatter {
public String getDirectionDescription(Offer.Direction direction) { public String getDirectionDescription(Offer.Direction direction) {
return direction == Offer.Direction.BUY ? "Offerer as bitcoin buyer / Taker as bitcoin seller" : "Offerer as bitcoin seller / Taker as bitcoin buyer"; return direction == Offer.Direction.BUY ? "Offerer as bitcoin buyer / Taker as bitcoin seller" : "Offerer as bitcoin seller / Taker as bitcoin buyer";
} }
public String getRole(boolean isBuyerOffererAndSellerTaker, boolean isOfferer) {
if (isBuyerOffererAndSellerTaker)
return isOfferer ? "Buyer (offerer)" : "Seller (taker)";
else
return isOfferer ? "Seller (offerer)" : "Buyer (taker)";
}
} }