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;
}
public boolean isBuyerOffererAndSellerTaker() {
return isBuyerOffererAndSellerTaker;
}
public String getBuyerAccountId() {
return isBuyerOffererAndSellerTaker ? offererAccountId : takerAccountId;
}

View File

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

View File

@ -54,7 +54,8 @@
<PropertyValueFactory property="tradeVolume"/>
</cellValueFactory>
</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>
</TableView>
</VBox>

View File

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

View File

@ -28,7 +28,9 @@ import io.bitsquare.gui.util.validation.*;
import io.bitsquare.locale.BSResources;
import io.bitsquare.p2p.P2PService;
import io.bitsquare.payment.PaymentMethod;
import io.bitsquare.trade.Contract;
import io.bitsquare.trade.Trade;
import io.bitsquare.trade.offer.Offer;
import javafx.beans.property.*;
import javafx.collections.ObservableList;
import org.bitcoinj.core.BlockChainListener;
@ -242,8 +244,28 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
return formatter.formatFiatWithCode(value);
}
String evaluateDirection(PendingTradesListItem item) {
return (item != null) ? formatter.getDirection(dataModel.getDirection(item.getTrade().getOffer())) : "";
String getMyRole(PendingTradesListItem item) {
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) {

View File

@ -365,4 +365,11 @@ public class BSFormatter {
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";
}
public String getRole(boolean isBuyerOffererAndSellerTaker, boolean isOfferer) {
if (isBuyerOffererAndSellerTaker)
return isOfferer ? "Buyer (offerer)" : "Seller (taker)";
else
return isOfferer ? "Seller (offerer)" : "Buyer (taker)";
}
}