mirror of
https://github.com/bisq-network/bisq.git
synced 2025-02-24 23:18:17 +01:00
Adapt dispute flow to match new design
This commit is contained in:
parent
f6d8b69c90
commit
d843e73b7f
5 changed files with 120 additions and 113 deletions
|
@ -1660,22 +1660,22 @@ Please open the download directory, shut down the application and install the ne
|
||||||
displayUpdateDownloadWindow.download.openDir=Open download directory
|
displayUpdateDownloadWindow.download.openDir=Open download directory
|
||||||
|
|
||||||
disputeSummaryWindow.title=Summary
|
disputeSummaryWindow.title=Summary
|
||||||
disputeSummaryWindow.openDate=Ticket opening date:
|
disputeSummaryWindow.openDate=Ticket opening date
|
||||||
disputeSummaryWindow.role=Trader's role:
|
disputeSummaryWindow.role=Trader's role
|
||||||
disputeSummaryWindow.evidence=Evidence:
|
disputeSummaryWindow.evidence=Evidence
|
||||||
disputeSummaryWindow.evidence.tamperProof=Tamper proof evidence
|
disputeSummaryWindow.evidence.tamperProof=Tamper proof evidence
|
||||||
disputeSummaryWindow.evidence.id=ID Verification
|
disputeSummaryWindow.evidence.id=ID Verification
|
||||||
disputeSummaryWindow.evidence.video=Video/Screencast
|
disputeSummaryWindow.evidence.video=Video/Screencast
|
||||||
disputeSummaryWindow.payout=Trade amount payout:
|
disputeSummaryWindow.payout=Trade amount payout
|
||||||
disputeSummaryWindow.payout.getsTradeAmount=BTC {0} gets trade amount payout
|
disputeSummaryWindow.payout.getsTradeAmount=BTC {0} gets trade amount payout
|
||||||
disputeSummaryWindow.payout.getsAll=BTC {0} gets all
|
disputeSummaryWindow.payout.getsAll=BTC {0} gets all
|
||||||
disputeSummaryWindow.payout.custom=Custom payout
|
disputeSummaryWindow.payout.custom=Custom payout
|
||||||
disputeSummaryWindow.payout.adjustAmount=Amount entered exceeds available amount of {0}.\n\
|
disputeSummaryWindow.payout.adjustAmount=Amount entered exceeds available amount of {0}.\n\
|
||||||
We adjust this input field to the max possible value.
|
We adjust this input field to the max possible value.
|
||||||
disputeSummaryWindow.payoutAmount.buyer=Buyer's payout amount:
|
disputeSummaryWindow.payoutAmount.buyer=Buyer's payout amount
|
||||||
disputeSummaryWindow.payoutAmount.seller=Seller's payout amount:
|
disputeSummaryWindow.payoutAmount.seller=Seller's payout amount
|
||||||
disputeSummaryWindow.payoutAmount.invert=Use loser as publisher:
|
disputeSummaryWindow.payoutAmount.invert=Use loser as publisher
|
||||||
disputeSummaryWindow.reason=Reason of dispute:
|
disputeSummaryWindow.reason=Reason of dispute
|
||||||
disputeSummaryWindow.reason.bug=Bug
|
disputeSummaryWindow.reason.bug=Bug
|
||||||
disputeSummaryWindow.reason.usability=Usability
|
disputeSummaryWindow.reason.usability=Usability
|
||||||
disputeSummaryWindow.reason.protocolViolation=Protocol violation
|
disputeSummaryWindow.reason.protocolViolation=Protocol violation
|
||||||
|
@ -1683,7 +1683,7 @@ disputeSummaryWindow.reason.noReply=No reply
|
||||||
disputeSummaryWindow.reason.scam=Scam
|
disputeSummaryWindow.reason.scam=Scam
|
||||||
disputeSummaryWindow.reason.other=Other
|
disputeSummaryWindow.reason.other=Other
|
||||||
disputeSummaryWindow.reason.bank=Bank
|
disputeSummaryWindow.reason.bank=Bank
|
||||||
disputeSummaryWindow.summaryNotes=Summary notes:
|
disputeSummaryWindow.summaryNotes=Summary notes
|
||||||
disputeSummaryWindow.addSummaryNotes=Add summary notes
|
disputeSummaryWindow.addSummaryNotes=Add summary notes
|
||||||
disputeSummaryWindow.close.button=Close ticket
|
disputeSummaryWindow.close.button=Close ticket
|
||||||
disputeSummaryWindow.close.msg=Ticket closed on {0}\n\n\
|
disputeSummaryWindow.close.msg=Ticket closed on {0}\n\n\
|
||||||
|
|
|
@ -124,6 +124,7 @@ bg color of non edit textFields: fafafa
|
||||||
-bs-rd-separator: #DBDBDB;
|
-bs-rd-separator: #DBDBDB;
|
||||||
-bs-rd-separator-dark: #D5E0D6;
|
-bs-rd-separator-dark: #D5E0D6;
|
||||||
-bs-rd-error-red: #dd0000; /* 5 usages */
|
-bs-rd-error-red: #dd0000; /* 5 usages */
|
||||||
|
-bs-rd-message-bubble: #0086C6;
|
||||||
|
|
||||||
-bs-red: #D73030; /* 5 usages */
|
-bs-red: #D73030; /* 5 usages */
|
||||||
-fx-box-border: -bs-rd-grey-medium-light;
|
-fx-box-border: -bs-rd-grey-medium-light;
|
||||||
|
@ -1501,7 +1502,7 @@ textfield */
|
||||||
}
|
}
|
||||||
|
|
||||||
#message-bubble-blue {
|
#message-bubble-blue {
|
||||||
-fx-background-color: -fx-accent;
|
-fx-background-color: -bs-rd-message-bubble;
|
||||||
-fx-background-radius: 10 10 10 10;
|
-fx-background-radius: 10 10 10 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1746,8 +1747,8 @@ textfield */
|
||||||
}
|
}
|
||||||
|
|
||||||
.my-message-header {
|
.my-message-header {
|
||||||
-fx-text-fill: -fx-accent;
|
-fx-text-fill: -bs-rd-message-bubble;
|
||||||
-fx-fill: -fx-accent;
|
-fx-fill: -bs-rd-message-bubble;
|
||||||
-fx-font-size: 0.846em;
|
-fx-font-size: 0.846em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,8 @@ import com.google.common.io.ByteStreams;
|
||||||
import de.jensd.fx.fontawesome.AwesomeDude;
|
import de.jensd.fx.fontawesome.AwesomeDude;
|
||||||
import de.jensd.fx.fontawesome.AwesomeIcon;
|
import de.jensd.fx.fontawesome.AwesomeIcon;
|
||||||
|
|
||||||
|
import com.jfoenix.controls.JFXTextArea;
|
||||||
|
|
||||||
import javafx.stage.FileChooser;
|
import javafx.stage.FileChooser;
|
||||||
|
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
|
@ -121,6 +123,7 @@ import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -257,10 +260,10 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
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(Comparator.comparing(Dispute::getTradeId));
|
||||||
dateColumn.setComparator((o1, o2) -> o1.getOpeningDate().compareTo(o2.getOpeningDate()));
|
dateColumn.setComparator(Comparator.comparing(Dispute::getOpeningDate));
|
||||||
buyerOnionAddressColumn.setComparator((o1, o2) -> getBuyerOnionAddressColumnLabel(o1).compareTo(getBuyerOnionAddressColumnLabel(o2)));
|
buyerOnionAddressColumn.setComparator(Comparator.comparing(this::getBuyerOnionAddressColumnLabel));
|
||||||
sellerOnionAddressColumn.setComparator((o1, o2) -> getSellerOnionAddressColumnLabel(o1).compareTo(getSellerOnionAddressColumnLabel(o2)));
|
sellerOnionAddressColumn.setComparator(Comparator.comparing(this::getSellerOnionAddressColumnLabel));
|
||||||
marketColumn.setComparator((o1, o2) -> formatter.getCurrencyPair(o1.getContract().getOfferPayload().getCurrencyCode()).compareTo(o2.getContract().getOfferPayload().getCurrencyCode()));
|
marketColumn.setComparator((o1, o2) -> formatter.getCurrencyPair(o1.getContract().getOfferPayload().getCurrencyCode()).compareTo(o2.getContract().getOfferPayload().getCurrencyCode()));
|
||||||
|
|
||||||
dateColumn.setSortType(TableColumn.SortType.DESCENDING);
|
dateColumn.setSortType(TableColumn.SortType.DESCENDING);
|
||||||
|
@ -282,7 +285,7 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
keyEventEventHandler = event -> {
|
keyEventEventHandler = event -> {
|
||||||
if (Utilities.isAltOrCtrlPressed(KeyCode.L, event)) {
|
if (Utilities.isAltOrCtrlPressed(KeyCode.L, event)) {
|
||||||
Map<String, List<Dispute>> map = new HashMap<>();
|
Map<String, List<Dispute>> map = new HashMap<>();
|
||||||
disputeManager.getDisputesAsObservableList().stream().forEach(dispute -> {
|
disputeManager.getDisputesAsObservableList().forEach(dispute -> {
|
||||||
String tradeId = dispute.getTradeId();
|
String tradeId = dispute.getTradeId();
|
||||||
List<Dispute> list;
|
List<Dispute> list;
|
||||||
if (!map.containsKey(tradeId))
|
if (!map.containsKey(tradeId))
|
||||||
|
@ -292,13 +295,13 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
list.add(dispute);
|
list.add(dispute);
|
||||||
});
|
});
|
||||||
List<List<Dispute>> disputeGroups = new ArrayList<>();
|
List<List<Dispute>> disputeGroups = new ArrayList<>();
|
||||||
map.entrySet().stream().forEach(entry -> disputeGroups.add(entry.getValue()));
|
map.forEach((key, value) -> disputeGroups.add(value));
|
||||||
disputeGroups.sort((o1, o2) -> !o1.isEmpty() && !o2.isEmpty() ? o1.get(0).getOpeningDate().compareTo(o2.get(0).getOpeningDate()) : 0);
|
disputeGroups.sort((o1, o2) -> !o1.isEmpty() && !o2.isEmpty() ? o1.get(0).getOpeningDate().compareTo(o2.get(0).getOpeningDate()) : 0);
|
||||||
StringBuilder stringBuilder = new StringBuilder();
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
|
||||||
// We don't translate that as it is not intended for the public
|
// We don't translate that as it is not intended for the public
|
||||||
stringBuilder.append("Summary of all disputes (No. of disputes: ").append(disputeGroups.size()).append(")\n\n");
|
stringBuilder.append("Summary of all disputes (No. of disputes: ").append(disputeGroups.size()).append(")\n\n");
|
||||||
disputeGroups.stream().forEach(disputeGroup -> {
|
disputeGroups.forEach(disputeGroup -> {
|
||||||
Dispute dispute0 = disputeGroup.get(0);
|
Dispute dispute0 = disputeGroup.get(0);
|
||||||
stringBuilder.append("##########################################################################################/\n")
|
stringBuilder.append("##########################################################################################/\n")
|
||||||
.append("## Trade ID: ")
|
.append("## Trade ID: ")
|
||||||
|
@ -317,14 +320,14 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
}
|
}
|
||||||
stringBuilder.append("##########################################################################################/\n")
|
stringBuilder.append("##########################################################################################/\n")
|
||||||
.append("\n");
|
.append("\n");
|
||||||
disputeGroup.stream().forEach(dispute -> {
|
disputeGroup.forEach(dispute -> {
|
||||||
stringBuilder
|
stringBuilder
|
||||||
.append("*******************************************************************************************\n")
|
.append("*******************************************************************************************\n")
|
||||||
.append("** Trader's ID: ")
|
.append("** Trader's ID: ")
|
||||||
.append(dispute.getTraderId())
|
.append(dispute.getTraderId())
|
||||||
.append("\n*******************************************************************************************\n")
|
.append("\n*******************************************************************************************\n")
|
||||||
.append("\n");
|
.append("\n");
|
||||||
dispute.getDisputeCommunicationMessages().stream().forEach(m -> {
|
dispute.getDisputeCommunicationMessages().forEach(m -> {
|
||||||
String role = m.isSenderIsTrader() ? ">> Trader's msg: " : "<< Arbitrator's msg: ";
|
String role = m.isSenderIsTrader() ? ">> Trader's msg: " : "<< Arbitrator's msg: ";
|
||||||
stringBuilder.append(role)
|
stringBuilder.append(role)
|
||||||
.append(m.getMessage())
|
.append(m.getMessage())
|
||||||
|
@ -409,18 +412,18 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
startDate = new Date(0); // print all from start
|
startDate = new Date(0); // print all from start
|
||||||
|
|
||||||
HashMap<String, Dispute> map = new HashMap<>();
|
HashMap<String, Dispute> map = new HashMap<>();
|
||||||
disputeManager.getDisputesAsObservableList().stream().forEach(dispute -> map.put(dispute.getDepositTxId(), dispute));
|
disputeManager.getDisputesAsObservableList().forEach(dispute -> map.put(dispute.getDepositTxId(), dispute));
|
||||||
|
|
||||||
final Date finalStartDate = startDate;
|
final Date finalStartDate = startDate;
|
||||||
List<Dispute> disputes = new ArrayList<>(map.values());
|
List<Dispute> disputes = new ArrayList<>(map.values());
|
||||||
disputes.sort((o1, o2) -> o1.getOpeningDate().compareTo(o2.getOpeningDate()));
|
disputes.sort(Comparator.comparing(Dispute::getOpeningDate));
|
||||||
List<List<Dispute>> subLists = Lists.partition(disputes, 1000);
|
List<List<Dispute>> subLists = Lists.partition(disputes, 1000);
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
// We don't translate that as it is not intended for the public
|
// We don't translate that as it is not intended for the public
|
||||||
subLists.stream().forEach(list -> {
|
subLists.forEach(list -> {
|
||||||
StringBuilder sb1 = new StringBuilder("\n<html><head><script type=\"text/javascript\">function load(){\n");
|
StringBuilder sb1 = new StringBuilder("\n<html><head><script type=\"text/javascript\">function load(){\n");
|
||||||
StringBuilder sb2 = new StringBuilder("\n}</script></head><body onload=\"load()\">\n");
|
StringBuilder sb2 = new StringBuilder("\n}</script></head><body onload=\"load()\">\n");
|
||||||
list.stream().forEach(dispute -> {
|
list.forEach(dispute -> {
|
||||||
if (dispute.getOpeningDate().after(finalStartDate)) {
|
if (dispute.getOpeningDate().after(finalStartDate)) {
|
||||||
String txId = dispute.getDepositTxId();
|
String txId = dispute.getDepositTxId();
|
||||||
sb1.append("window.open(\"https://blockchain.info/tx/").append(txId).append("\", '_blank');\n");
|
sb1.append("window.open(\"https://blockchain.info/tx/").append(txId).append("\", '_blank');\n");
|
||||||
|
@ -676,7 +679,7 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
|
|
||||||
disputeCommunicationMessages = selectedDispute.getDisputeCommunicationMessages();
|
disputeCommunicationMessages = selectedDispute.getDisputeCommunicationMessages();
|
||||||
SortedList<DisputeCommunicationMessage> sortedList = new SortedList<>(disputeCommunicationMessages);
|
SortedList<DisputeCommunicationMessage> sortedList = new SortedList<>(disputeCommunicationMessages);
|
||||||
sortedList.setComparator((o1, o2) -> new Date(o1.getDate()).compareTo(new Date(o2.getDate())));
|
sortedList.setComparator(Comparator.comparing(o -> new Date(o.getDate())));
|
||||||
messageListView = new ListView<>(sortedList);
|
messageListView = new ListView<>(sortedList);
|
||||||
messageListView.setId("message-list-view");
|
messageListView.setId("message-list-view");
|
||||||
|
|
||||||
|
@ -688,7 +691,7 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
messagesAnchorPane = new AnchorPane();
|
messagesAnchorPane = new AnchorPane();
|
||||||
VBox.setVgrow(messagesAnchorPane, Priority.ALWAYS);
|
VBox.setVgrow(messagesAnchorPane, Priority.ALWAYS);
|
||||||
|
|
||||||
inputTextArea = new TextArea();
|
inputTextArea = new JFXTextArea();
|
||||||
inputTextArea.setPrefHeight(70);
|
inputTextArea.setPrefHeight(70);
|
||||||
inputTextArea.setWrapText(true);
|
inputTextArea.setWrapText(true);
|
||||||
if (!(this instanceof ArbitratorDisputeView))
|
if (!(this instanceof ArbitratorDisputeView))
|
||||||
|
@ -740,10 +743,10 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
messagesAnchorPane.getChildren().addAll(tableGroupHeadline, messageListView);
|
messagesAnchorPane.getChildren().addAll(tableGroupHeadline, messageListView);
|
||||||
}
|
}
|
||||||
|
|
||||||
messageListView.setCellFactory(new Callback<ListView<DisputeCommunicationMessage>, ListCell<DisputeCommunicationMessage>>() {
|
messageListView.setCellFactory(new Callback<>() {
|
||||||
@Override
|
@Override
|
||||||
public ListCell<DisputeCommunicationMessage> call(ListView<DisputeCommunicationMessage> list) {
|
public ListCell<DisputeCommunicationMessage> call(ListView<DisputeCommunicationMessage> list) {
|
||||||
return new ListCell<DisputeCommunicationMessage>() {
|
return new ListCell<>() {
|
||||||
ChangeListener<Boolean> sendMsgBusyAnimationListener;
|
ChangeListener<Boolean> sendMsgBusyAnimationListener;
|
||||||
final Pane bg = new Pane();
|
final Pane bg = new Pane();
|
||||||
final ImageView arrow = new ImageView();
|
final ImageView arrow = new ImageView();
|
||||||
|
@ -801,7 +804,7 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
AnchorPane.setBottomAnchor(attachmentsBox, bottomBorder + 10);
|
AnchorPane.setBottomAnchor(attachmentsBox, bottomBorder + 10);
|
||||||
|
|
||||||
boolean senderIsTrader = message.isSenderIsTrader();
|
boolean senderIsTrader = message.isSenderIsTrader();
|
||||||
boolean isMyMsg = isTrader ? senderIsTrader : !senderIsTrader;
|
boolean isMyMsg = isTrader == senderIsTrader;
|
||||||
|
|
||||||
arrow.setVisible(!message.isSystemMessage());
|
arrow.setVisible(!message.isSystemMessage());
|
||||||
arrow.setManaged(!message.isSystemMessage());
|
arrow.setManaged(!message.isSystemMessage());
|
||||||
|
@ -1007,7 +1010,7 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
private TableColumn<Dispute, Dispute> getSelectColumn() {
|
private TableColumn<Dispute, Dispute> getSelectColumn() {
|
||||||
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<Dispute, Dispute>(Res.get("shared.select"));
|
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<>(Res.get("shared.select"));
|
||||||
column.setMinWidth(80);
|
column.setMinWidth(80);
|
||||||
column.setMaxWidth(80);
|
column.setMaxWidth(80);
|
||||||
column.setSortable(false);
|
column.setSortable(false);
|
||||||
|
@ -1015,13 +1018,12 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
column.setCellValueFactory((addressListItem) ->
|
column.setCellValueFactory((addressListItem) ->
|
||||||
new ReadOnlyObjectWrapper<>(addressListItem.getValue()));
|
new ReadOnlyObjectWrapper<>(addressListItem.getValue()));
|
||||||
column.setCellFactory(
|
column.setCellFactory(
|
||||||
new Callback<TableColumn<Dispute, Dispute>, TableCell<Dispute,
|
new Callback<>() {
|
||||||
Dispute>>() {
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TableCell<Dispute, Dispute> call(TableColumn<Dispute,
|
public TableCell<Dispute, Dispute> call(TableColumn<Dispute,
|
||||||
Dispute> column) {
|
Dispute> column) {
|
||||||
return new TableCell<Dispute, Dispute>() {
|
return new TableCell<>() {
|
||||||
|
|
||||||
Button button;
|
Button button;
|
||||||
|
|
||||||
|
@ -1050,7 +1052,7 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private TableColumn<Dispute, Dispute> getContractColumn() {
|
private TableColumn<Dispute, Dispute> getContractColumn() {
|
||||||
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<Dispute, Dispute>(Res.get("shared.details")) {
|
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<>(Res.get("shared.details")) {
|
||||||
{
|
{
|
||||||
setMinWidth(80);
|
setMinWidth(80);
|
||||||
setSortable(false);
|
setSortable(false);
|
||||||
|
@ -1058,11 +1060,11 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
};
|
};
|
||||||
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
||||||
column.setCellFactory(
|
column.setCellFactory(
|
||||||
new Callback<TableColumn<Dispute, Dispute>, TableCell<Dispute, Dispute>>() {
|
new Callback<>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
||||||
return new TableCell<Dispute, Dispute>() {
|
return new TableCell<>() {
|
||||||
Button button;
|
Button button;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1090,17 +1092,17 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private TableColumn<Dispute, Dispute> getDateColumn() {
|
private TableColumn<Dispute, Dispute> getDateColumn() {
|
||||||
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<Dispute, Dispute>(Res.get("shared.date")) {
|
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<>(Res.get("shared.date")) {
|
||||||
{
|
{
|
||||||
setMinWidth(180);
|
setMinWidth(180);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
||||||
column.setCellFactory(
|
column.setCellFactory(
|
||||||
new Callback<TableColumn<Dispute, Dispute>, TableCell<Dispute, Dispute>>() {
|
new Callback<>() {
|
||||||
@Override
|
@Override
|
||||||
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
||||||
return new TableCell<Dispute, Dispute>() {
|
return new TableCell<>() {
|
||||||
@Override
|
@Override
|
||||||
public void updateItem(final Dispute item, boolean empty) {
|
public void updateItem(final Dispute item, boolean empty) {
|
||||||
super.updateItem(item, empty);
|
super.updateItem(item, empty);
|
||||||
|
@ -1116,17 +1118,17 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private TableColumn<Dispute, Dispute> getTradeIdColumn() {
|
private TableColumn<Dispute, Dispute> getTradeIdColumn() {
|
||||||
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<Dispute, Dispute>(Res.get("shared.tradeId")) {
|
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<>(Res.get("shared.tradeId")) {
|
||||||
{
|
{
|
||||||
setMinWidth(110);
|
setMinWidth(110);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
||||||
column.setCellFactory(
|
column.setCellFactory(
|
||||||
new Callback<TableColumn<Dispute, Dispute>, TableCell<Dispute, Dispute>>() {
|
new Callback<>() {
|
||||||
@Override
|
@Override
|
||||||
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
||||||
return new TableCell<Dispute, Dispute>() {
|
return new TableCell<>() {
|
||||||
private HyperlinkWithIcon field;
|
private HyperlinkWithIcon field;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1157,17 +1159,17 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private TableColumn<Dispute, Dispute> getBuyerOnionAddressColumn() {
|
private TableColumn<Dispute, Dispute> getBuyerOnionAddressColumn() {
|
||||||
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<Dispute, Dispute>(Res.get("support.buyerAddress")) {
|
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<>(Res.get("support.buyerAddress")) {
|
||||||
{
|
{
|
||||||
setMinWidth(170);
|
setMinWidth(170);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
||||||
column.setCellFactory(
|
column.setCellFactory(
|
||||||
new Callback<TableColumn<Dispute, Dispute>, TableCell<Dispute, Dispute>>() {
|
new Callback<>() {
|
||||||
@Override
|
@Override
|
||||||
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
||||||
return new TableCell<Dispute, Dispute>() {
|
return new TableCell<>() {
|
||||||
@Override
|
@Override
|
||||||
public void updateItem(final Dispute item, boolean empty) {
|
public void updateItem(final Dispute item, boolean empty) {
|
||||||
super.updateItem(item, empty);
|
super.updateItem(item, empty);
|
||||||
|
@ -1183,17 +1185,17 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private TableColumn<Dispute, Dispute> getSellerOnionAddressColumn() {
|
private TableColumn<Dispute, Dispute> getSellerOnionAddressColumn() {
|
||||||
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<Dispute, Dispute>(Res.get("support.sellerAddress")) {
|
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<>(Res.get("support.sellerAddress")) {
|
||||||
{
|
{
|
||||||
setMinWidth(170);
|
setMinWidth(170);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
||||||
column.setCellFactory(
|
column.setCellFactory(
|
||||||
new Callback<TableColumn<Dispute, Dispute>, TableCell<Dispute, Dispute>>() {
|
new Callback<>() {
|
||||||
@Override
|
@Override
|
||||||
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
||||||
return new TableCell<Dispute, Dispute>() {
|
return new TableCell<>() {
|
||||||
@Override
|
@Override
|
||||||
public void updateItem(final Dispute item, boolean empty) {
|
public void updateItem(final Dispute item, boolean empty) {
|
||||||
super.updateItem(item, empty);
|
super.updateItem(item, empty);
|
||||||
|
@ -1236,17 +1238,17 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private TableColumn<Dispute, Dispute> getMarketColumn() {
|
private TableColumn<Dispute, Dispute> getMarketColumn() {
|
||||||
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<Dispute, Dispute>(Res.get("shared.market")) {
|
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<>(Res.get("shared.market")) {
|
||||||
{
|
{
|
||||||
setMinWidth(130);
|
setMinWidth(130);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
||||||
column.setCellFactory(
|
column.setCellFactory(
|
||||||
new Callback<TableColumn<Dispute, Dispute>, TableCell<Dispute, Dispute>>() {
|
new Callback<>() {
|
||||||
@Override
|
@Override
|
||||||
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
||||||
return new TableCell<Dispute, Dispute>() {
|
return new TableCell<>() {
|
||||||
@Override
|
@Override
|
||||||
public void updateItem(final Dispute item, boolean empty) {
|
public void updateItem(final Dispute item, boolean empty) {
|
||||||
super.updateItem(item, empty);
|
super.updateItem(item, empty);
|
||||||
|
@ -1262,17 +1264,17 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private TableColumn<Dispute, Dispute> getRoleColumn() {
|
private TableColumn<Dispute, Dispute> getRoleColumn() {
|
||||||
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<Dispute, Dispute>(Res.get("support.role")) {
|
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<>(Res.get("support.role")) {
|
||||||
{
|
{
|
||||||
setMinWidth(130);
|
setMinWidth(130);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
||||||
column.setCellFactory(
|
column.setCellFactory(
|
||||||
new Callback<TableColumn<Dispute, Dispute>, TableCell<Dispute, Dispute>>() {
|
new Callback<>() {
|
||||||
@Override
|
@Override
|
||||||
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
||||||
return new TableCell<Dispute, Dispute>() {
|
return new TableCell<>() {
|
||||||
@Override
|
@Override
|
||||||
public void updateItem(final Dispute item, boolean empty) {
|
public void updateItem(final Dispute item, boolean empty) {
|
||||||
super.updateItem(item, empty);
|
super.updateItem(item, empty);
|
||||||
|
@ -1292,21 +1294,21 @@ public class TraderDisputeView extends ActivatableView<VBox, Void> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private TableColumn<Dispute, Dispute> getStateColumn() {
|
private TableColumn<Dispute, Dispute> getStateColumn() {
|
||||||
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<Dispute, Dispute>(Res.get("support.state")) {
|
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<>(Res.get("support.state")) {
|
||||||
{
|
{
|
||||||
setMinWidth(50);
|
setMinWidth(50);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
column.setCellValueFactory((dispute) -> new ReadOnlyObjectWrapper<>(dispute.getValue()));
|
||||||
column.setCellFactory(
|
column.setCellFactory(
|
||||||
new Callback<TableColumn<Dispute, Dispute>, TableCell<Dispute, Dispute>>() {
|
new Callback<>() {
|
||||||
@Override
|
@Override
|
||||||
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
public TableCell<Dispute, Dispute> call(TableColumn<Dispute, Dispute> column) {
|
||||||
return new TableCell<Dispute, Dispute>() {
|
return new TableCell<>() {
|
||||||
|
|
||||||
|
|
||||||
public ReadOnlyBooleanProperty closedProperty;
|
ReadOnlyBooleanProperty closedProperty;
|
||||||
public ChangeListener<Boolean> listener;
|
ChangeListener<Boolean> listener;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateItem(final Dispute item, boolean empty) {
|
public void updateItem(final Dispute item, boolean empty) {
|
||||||
|
|
|
@ -19,7 +19,6 @@ package bisq.desktop.main.overlays.windows;
|
||||||
|
|
||||||
import bisq.desktop.main.MainView;
|
import bisq.desktop.main.MainView;
|
||||||
import bisq.desktop.main.overlays.Overlay;
|
import bisq.desktop.main.overlays.Overlay;
|
||||||
import bisq.desktop.util.FormBuilder;
|
|
||||||
import bisq.desktop.util.Layout;
|
import bisq.desktop.util.Layout;
|
||||||
|
|
||||||
import bisq.core.arbitration.Dispute;
|
import bisq.core.arbitration.Dispute;
|
||||||
|
@ -45,9 +44,10 @@ import javafx.stage.Window;
|
||||||
|
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.scene.control.Button;
|
import javafx.scene.control.Button;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.control.TextArea;
|
import javafx.scene.control.TextArea;
|
||||||
import javafx.scene.control.TextField;
|
|
||||||
import javafx.scene.control.Tooltip;
|
import javafx.scene.control.Tooltip;
|
||||||
|
import javafx.scene.layout.GridPane;
|
||||||
|
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
|
|
||||||
|
@ -117,18 +117,18 @@ public class ContractWindow extends Overlay<ContractWindow> {
|
||||||
|
|
||||||
PaymentAccountPayload sellerPaymentAccountPayload = contract.getSellerPaymentAccountPayload();
|
PaymentAccountPayload sellerPaymentAccountPayload = contract.getSellerPaymentAccountPayload();
|
||||||
addTitledGroupBg(gridPane, ++rowIndex, rows, Res.get("contractWindow.title"));
|
addTitledGroupBg(gridPane, ++rowIndex, rows, Res.get("contractWindow.title"));
|
||||||
addTopLabelTextFieldWithCopyIcon(gridPane, rowIndex, Res.getWithCol("shared.offerId"), offer.getId(),
|
addConfirmationLabelTextFieldWithCopyIcon(gridPane, rowIndex, Res.get("shared.offerId"), offer.getId(),
|
||||||
Layout.FIRST_ROW_DISTANCE).second.setMouseTransparent(false);
|
Layout.FIRST_ROW_DISTANCE).second.setMouseTransparent(false);
|
||||||
FormBuilder.addTopLabelTextField(gridPane, ++rowIndex, Res.get("contractWindow.dates"),
|
addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("contractWindow.dates"),
|
||||||
formatter.formatDateTime(offer.getDate()) + " / " + formatter.formatDateTime(dispute.getTradeDate()));
|
formatter.formatDateTime(offer.getDate()) + " / " + formatter.formatDateTime(dispute.getTradeDate()));
|
||||||
String currencyCode = offer.getCurrencyCode();
|
String currencyCode = offer.getCurrencyCode();
|
||||||
FormBuilder.addTopLabelTextField(gridPane, ++rowIndex, Res.getWithCol("shared.offerType"),
|
addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("shared.offerType"),
|
||||||
formatter.getDirectionBothSides(offer.getDirection(), currencyCode));
|
formatter.getDirectionBothSides(offer.getDirection(), currencyCode));
|
||||||
FormBuilder.addTopLabelTextField(gridPane, ++rowIndex, Res.getWithCol("shared.tradePrice"),
|
addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("shared.tradePrice"),
|
||||||
formatter.formatPrice(contract.getTradePrice()));
|
formatter.formatPrice(contract.getTradePrice()));
|
||||||
FormBuilder.addTopLabelTextField(gridPane, ++rowIndex, Res.getWithCol("shared.tradeAmount"),
|
addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("shared.tradeAmount"),
|
||||||
formatter.formatCoinWithCode(contract.getTradeAmount()));
|
formatter.formatCoinWithCode(contract.getTradeAmount()));
|
||||||
FormBuilder.addTopLabelTextField(gridPane, ++rowIndex, formatter.formatVolumeLabel(currencyCode, ":"),
|
addConfirmationLabelLabel(gridPane, ++rowIndex, formatter.formatVolumeLabel(currencyCode, ":"),
|
||||||
formatter.formatVolumeWithCode(contract.getTradePrice().getVolumeByAmount(contract.getTradeAmount())));
|
formatter.formatVolumeWithCode(contract.getTradePrice().getVolumeByAmount(contract.getTradeAmount())));
|
||||||
String securityDeposit = Res.getWithColAndCap("shared.buyer") +
|
String securityDeposit = Res.getWithColAndCap("shared.buyer") +
|
||||||
" " +
|
" " +
|
||||||
|
@ -137,43 +137,43 @@ public class ContractWindow extends Overlay<ContractWindow> {
|
||||||
Res.getWithColAndCap("shared.seller") +
|
Res.getWithColAndCap("shared.seller") +
|
||||||
" " +
|
" " +
|
||||||
formatter.formatCoinWithCode(offer.getSellerSecurityDeposit());
|
formatter.formatCoinWithCode(offer.getSellerSecurityDeposit());
|
||||||
FormBuilder.addTopLabelTextField(gridPane, ++rowIndex, Res.getWithCol("shared.securityDeposit"), securityDeposit);
|
addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("shared.securityDeposit"), securityDeposit);
|
||||||
addTopLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, Res.get("contractWindow.btcAddresses"),
|
addConfirmationLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, Res.get("contractWindow.btcAddresses"),
|
||||||
contract.getBuyerPayoutAddressString() + " / " +
|
contract.getBuyerPayoutAddressString() + " / " +
|
||||||
contract.getSellerPayoutAddressString()).second.setMouseTransparent(false);
|
contract.getSellerPayoutAddressString()).second.setMouseTransparent(false);
|
||||||
addTopLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, Res.get("contractWindow.onions"),
|
addConfirmationLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, Res.get("contractWindow.onions"),
|
||||||
contract.getBuyerNodeAddress().getFullAddress() + " / " + contract.getSellerNodeAddress().getFullAddress());
|
contract.getBuyerNodeAddress().getFullAddress() + " / " + contract.getSellerNodeAddress().getFullAddress());
|
||||||
|
|
||||||
addTopLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, Res.get("contractWindow.numDisputes"),
|
addConfirmationLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, Res.get("contractWindow.numDisputes"),
|
||||||
disputeManager.getNrOfDisputes(true, contract) + " / " + disputeManager.getNrOfDisputes(false, contract));
|
disputeManager.getNrOfDisputes(true, contract) + " / " + disputeManager.getNrOfDisputes(false, contract));
|
||||||
|
|
||||||
addTopLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, Res.get("shared.paymentDetails", Res.get("shared.buyer")),
|
addConfirmationLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, Res.get("shared.paymentDetails", Res.get("shared.buyer")),
|
||||||
contract.getBuyerPaymentAccountPayload().getPaymentDetails()).second.setMouseTransparent(false);
|
contract.getBuyerPaymentAccountPayload().getPaymentDetails()).second.setMouseTransparent(false);
|
||||||
addTopLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, Res.get("shared.paymentDetails", Res.get("shared.seller")),
|
addConfirmationLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, Res.get("shared.paymentDetails", Res.get("shared.seller")),
|
||||||
sellerPaymentAccountPayload.getPaymentDetails()).second.setMouseTransparent(false);
|
sellerPaymentAccountPayload.getPaymentDetails()).second.setMouseTransparent(false);
|
||||||
|
|
||||||
addTopLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, Res.get("shared.arbitrator"), contract.getArbitratorNodeAddress().getFullAddress());
|
addConfirmationLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, Res.get("shared.arbitrator"), contract.getArbitratorNodeAddress().getFullAddress());
|
||||||
|
|
||||||
if (showAcceptedCountryCodes) {
|
if (showAcceptedCountryCodes) {
|
||||||
String countries;
|
String countries;
|
||||||
Tooltip tooltip = null;
|
Tooltip tooltip = null;
|
||||||
if (CountryUtil.containsAllSepaEuroCountries(acceptedCountryCodes)) {
|
if (CountryUtil.containsAllSepaEuroCountries(acceptedCountryCodes)) {
|
||||||
countries = Res.getWithCol("shared.allEuroCountries");
|
countries = Res.get("shared.allEuroCountries");
|
||||||
} else {
|
} else {
|
||||||
countries = CountryUtil.getCodesString(acceptedCountryCodes);
|
countries = CountryUtil.getCodesString(acceptedCountryCodes);
|
||||||
tooltip = new Tooltip(CountryUtil.getNamesByCodesString(acceptedCountryCodes));
|
tooltip = new Tooltip(CountryUtil.getNamesByCodesString(acceptedCountryCodes));
|
||||||
}
|
}
|
||||||
TextField acceptedCountries = FormBuilder.addTopLabelTextField(gridPane, ++rowIndex, Res.getWithCol("shared.acceptedTakerCountries"), countries).second;
|
Label acceptedCountries = addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("shared.acceptedTakerCountries"), countries).second;
|
||||||
if (tooltip != null) acceptedCountries.setTooltip(new Tooltip());
|
if (tooltip != null) acceptedCountries.setTooltip(new Tooltip());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (showAcceptedBanks) {
|
if (showAcceptedBanks) {
|
||||||
if (offer.getPaymentMethod().equals(PaymentMethod.SAME_BANK)) {
|
if (offer.getPaymentMethod().equals(PaymentMethod.SAME_BANK)) {
|
||||||
FormBuilder.addTopLabelTextField(gridPane, ++rowIndex, Res.getWithCol("shared.bankName"), acceptedBanks.get(0));
|
addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("shared.bankName"), acceptedBanks.get(0));
|
||||||
} else if (offer.getPaymentMethod().equals(PaymentMethod.SPECIFIC_BANKS)) {
|
} else if (offer.getPaymentMethod().equals(PaymentMethod.SPECIFIC_BANKS)) {
|
||||||
String value = Joiner.on(", ").join(acceptedBanks);
|
String value = Joiner.on(", ").join(acceptedBanks);
|
||||||
Tooltip tooltip = new Tooltip(Res.getWithCol("shared.acceptedBanks") + value);
|
Tooltip tooltip = new Tooltip(Res.get("shared.acceptedBanks") + value);
|
||||||
TextField acceptedBanksTextField = FormBuilder.addTopLabelTextField(gridPane, ++rowIndex, Res.getWithCol("shared.acceptedBanks"), value).second;
|
Label acceptedBanksTextField = addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("shared.acceptedBanks"), value).second;
|
||||||
acceptedBanksTextField.setMouseTransparent(false);
|
acceptedBanksTextField.setMouseTransparent(false);
|
||||||
acceptedBanksTextField.setTooltip(tooltip);
|
acceptedBanksTextField.setTooltip(tooltip);
|
||||||
}
|
}
|
||||||
|
@ -182,15 +182,15 @@ public class ContractWindow extends Overlay<ContractWindow> {
|
||||||
addLabelTxIdTextField(gridPane, ++rowIndex, Res.get("shared.makerFeeTxId"), offer.getOfferFeePaymentTxId());
|
addLabelTxIdTextField(gridPane, ++rowIndex, Res.get("shared.makerFeeTxId"), offer.getOfferFeePaymentTxId());
|
||||||
addLabelTxIdTextField(gridPane, ++rowIndex, Res.get("shared.takerFeeTxId"), contract.getTakerFeeTxID());
|
addLabelTxIdTextField(gridPane, ++rowIndex, Res.get("shared.takerFeeTxId"), contract.getTakerFeeTxID());
|
||||||
if (dispute.getDepositTxSerialized() != null)
|
if (dispute.getDepositTxSerialized() != null)
|
||||||
addLabelTxIdTextField(gridPane, ++rowIndex, Res.getWithCol("shared.depositTransactionId"), dispute.getDepositTxId());
|
addLabelTxIdTextField(gridPane, ++rowIndex, Res.get("shared.depositTransactionId"), dispute.getDepositTxId());
|
||||||
if (dispute.getPayoutTxSerialized() != null)
|
if (dispute.getPayoutTxSerialized() != null)
|
||||||
addLabelTxIdTextField(gridPane, ++rowIndex, Res.get("shared.payoutTxId"), dispute.getPayoutTxId());
|
addLabelTxIdTextField(gridPane, ++rowIndex, Res.get("shared.payoutTxId"), dispute.getPayoutTxId());
|
||||||
|
|
||||||
if (dispute.getContractHash() != null)
|
if (dispute.getContractHash() != null)
|
||||||
addTopLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, Res.get("contractWindow.contractHash"),
|
addConfirmationLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, Res.get("contractWindow.contractHash"),
|
||||||
Utils.HEX.encode(dispute.getContractHash())).second.setMouseTransparent(false);
|
Utils.HEX.encode(dispute.getContractHash())).second.setMouseTransparent(false);
|
||||||
|
|
||||||
Button viewContractButton = addTopLabelButton(gridPane, ++rowIndex, Res.get("shared.contractAsJson"),
|
Button viewContractButton = addConfirmationLabelButton(gridPane, ++rowIndex, Res.get("shared.contractAsJson"),
|
||||||
Res.get("shared.viewContractAsJson"), 0).second;
|
Res.get("shared.viewContractAsJson"), 0).second;
|
||||||
viewContractButton.setDefaultButton(false);
|
viewContractButton.setDefaultButton(false);
|
||||||
viewContractButton.setOnAction(e -> {
|
viewContractButton.setOnAction(e -> {
|
||||||
|
@ -223,6 +223,7 @@ public class ContractWindow extends Overlay<ContractWindow> {
|
||||||
});
|
});
|
||||||
|
|
||||||
Button closeButton = addButtonAfterGroup(gridPane, ++rowIndex, Res.get("shared.close"));
|
Button closeButton = addButtonAfterGroup(gridPane, ++rowIndex, Res.get("shared.close"));
|
||||||
|
GridPane.setColumnSpan(closeButton, 2);
|
||||||
//TODO app wide focus
|
//TODO app wide focus
|
||||||
//closeButton.requestFocus();
|
//closeButton.requestFocus();
|
||||||
closeButton.setOnAction(e -> {
|
closeButton.setOnAction(e -> {
|
||||||
|
|
|
@ -22,7 +22,6 @@ import bisq.desktop.components.AutoTooltipRadioButton;
|
||||||
import bisq.desktop.components.InputTextField;
|
import bisq.desktop.components.InputTextField;
|
||||||
import bisq.desktop.main.overlays.Overlay;
|
import bisq.desktop.main.overlays.Overlay;
|
||||||
import bisq.desktop.main.overlays.popups.Popup;
|
import bisq.desktop.main.overlays.popups.Popup;
|
||||||
import bisq.desktop.util.FormBuilder;
|
|
||||||
import bisq.desktop.util.Layout;
|
import bisq.desktop.util.Layout;
|
||||||
|
|
||||||
import bisq.core.arbitration.Dispute;
|
import bisq.core.arbitration.Dispute;
|
||||||
|
@ -39,12 +38,15 @@ import bisq.core.util.BSFormatter;
|
||||||
|
|
||||||
import bisq.common.UserThread;
|
import bisq.common.UserThread;
|
||||||
import bisq.common.util.Tuple2;
|
import bisq.common.util.Tuple2;
|
||||||
|
import bisq.common.util.Tuple3;
|
||||||
|
|
||||||
import org.bitcoinj.core.AddressFormatException;
|
import org.bitcoinj.core.AddressFormatException;
|
||||||
import org.bitcoinj.core.Coin;
|
import org.bitcoinj.core.Coin;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import com.jfoenix.controls.JFXTextArea;
|
||||||
|
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.scene.control.Button;
|
import javafx.scene.control.Button;
|
||||||
import javafx.scene.control.CheckBox;
|
import javafx.scene.control.CheckBox;
|
||||||
|
@ -59,6 +61,7 @@ import javafx.scene.layout.GridPane;
|
||||||
import javafx.scene.layout.HBox;
|
import javafx.scene.layout.HBox;
|
||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
|
|
||||||
|
import javafx.geometry.HPos;
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
import javafx.geometry.VPos;
|
import javafx.geometry.VPos;
|
||||||
|
|
||||||
|
@ -122,7 +125,7 @@ public class DisputeSummaryWindow extends Overlay<DisputeSummaryWindow> {
|
||||||
this.dispute = dispute;
|
this.dispute = dispute;
|
||||||
|
|
||||||
rowIndex = -1;
|
rowIndex = -1;
|
||||||
width = 1118;
|
width = 700;
|
||||||
createGridPane();
|
createGridPane();
|
||||||
addContent();
|
addContent();
|
||||||
display();
|
display();
|
||||||
|
@ -169,6 +172,7 @@ public class DisputeSummaryWindow extends Overlay<DisputeSummaryWindow> {
|
||||||
super.createGridPane();
|
super.createGridPane();
|
||||||
gridPane.setPadding(new Insets(35, 40, 30, 40));
|
gridPane.setPadding(new Insets(35, 40, 30, 40));
|
||||||
gridPane.getStyleClass().add("grid-pane");
|
gridPane.getStyleClass().add("grid-pane");
|
||||||
|
gridPane.getColumnConstraints().get(0).setHalignment(HPos.LEFT);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addContent() {
|
private void addContent() {
|
||||||
|
@ -242,9 +246,10 @@ public class DisputeSummaryWindow extends Overlay<DisputeSummaryWindow> {
|
||||||
|
|
||||||
private void addInfoPane() {
|
private void addInfoPane() {
|
||||||
Contract contract = dispute.getContract();
|
Contract contract = dispute.getContract();
|
||||||
addTitledGroupBg(gridPane, ++rowIndex, 16, Res.get("disputeSummaryWindow.title"));
|
addTitledGroupBg(gridPane, ++rowIndex, 16, Res.get("disputeSummaryWindow.title")).getStyleClass().add("last");
|
||||||
FormBuilder.addTopLabelTextField(gridPane, rowIndex, Res.getWithCol("shared.tradeId"), dispute.getShortTradeId(), Layout.FIRST_ROW_DISTANCE);
|
addConfirmationLabelLabel(gridPane, rowIndex, Res.get("shared.tradeId"), dispute.getShortTradeId(),
|
||||||
FormBuilder.addTopLabelTextField(gridPane, ++rowIndex, Res.get("disputeSummaryWindow.openDate"), formatter.formatDateTime(dispute.getOpeningDate()));
|
Layout.TWICE_FIRST_ROW_DISTANCE);
|
||||||
|
addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("disputeSummaryWindow.openDate"), formatter.formatDateTime(dispute.getOpeningDate()));
|
||||||
if (dispute.isDisputeOpenerIsMaker()) {
|
if (dispute.isDisputeOpenerIsMaker()) {
|
||||||
if (dispute.isDisputeOpenerIsBuyer())
|
if (dispute.isDisputeOpenerIsBuyer())
|
||||||
role = Res.get("support.buyerOfferer");
|
role = Res.get("support.buyerOfferer");
|
||||||
|
@ -256,12 +261,12 @@ public class DisputeSummaryWindow extends Overlay<DisputeSummaryWindow> {
|
||||||
else
|
else
|
||||||
role = Res.get("support.sellerTaker");
|
role = Res.get("support.sellerTaker");
|
||||||
}
|
}
|
||||||
FormBuilder.addTopLabelTextField(gridPane, ++rowIndex, Res.get("disputeSummaryWindow.role"), role);
|
addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("disputeSummaryWindow.role"), role);
|
||||||
FormBuilder.addTopLabelTextField(gridPane, ++rowIndex, Res.getWithCol("shared.tradeAmount"),
|
addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("shared.tradeAmount"),
|
||||||
formatter.formatCoinWithCode(contract.getTradeAmount()));
|
formatter.formatCoinWithCode(contract.getTradeAmount()));
|
||||||
FormBuilder.addTopLabelTextField(gridPane, ++rowIndex, Res.getWithCol("shared.tradePrice"),
|
addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("shared.tradePrice"),
|
||||||
formatter.formatPrice(contract.getTradePrice()));
|
formatter.formatPrice(contract.getTradePrice()));
|
||||||
FormBuilder.addTopLabelTextField(gridPane, ++rowIndex, Res.getWithCol("shared.tradeVolume"),
|
addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("shared.tradeVolume"),
|
||||||
formatter.formatVolumeWithCode(contract.getTradePrice().getVolumeByAmount(contract.getTradeAmount())));
|
formatter.formatVolumeWithCode(contract.getTradePrice().getVolumeByAmount(contract.getTradeAmount())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -287,8 +292,6 @@ public class DisputeSummaryWindow extends Overlay<DisputeSummaryWindow> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addTradeAmountPayoutControls() {
|
private void addTradeAmountPayoutControls() {
|
||||||
Label distributionLabel = addLabel(gridPane, ++rowIndex, Res.get("disputeSummaryWindow.payout"), 10);
|
|
||||||
GridPane.setValignment(distributionLabel, VPos.TOP);
|
|
||||||
|
|
||||||
buyerGetsTradeAmountRadioButton = new AutoTooltipRadioButton(Res.get("disputeSummaryWindow.payout.getsTradeAmount",
|
buyerGetsTradeAmountRadioButton = new AutoTooltipRadioButton(Res.get("disputeSummaryWindow.payout.getsTradeAmount",
|
||||||
Res.get("shared.buyer")));
|
Res.get("shared.buyer")));
|
||||||
|
@ -300,15 +303,15 @@ public class DisputeSummaryWindow extends Overlay<DisputeSummaryWindow> {
|
||||||
Res.get("shared.seller")));
|
Res.get("shared.seller")));
|
||||||
|
|
||||||
customRadioButton = new AutoTooltipRadioButton(Res.get("disputeSummaryWindow.payout.custom"));
|
customRadioButton = new AutoTooltipRadioButton(Res.get("disputeSummaryWindow.payout.custom"));
|
||||||
|
|
||||||
VBox radioButtonPane = new VBox();
|
VBox radioButtonPane = new VBox();
|
||||||
radioButtonPane.setSpacing(10);
|
radioButtonPane.setSpacing(10);
|
||||||
radioButtonPane.getChildren().addAll(buyerGetsTradeAmountRadioButton, buyerGetsAllRadioButton,
|
radioButtonPane.getChildren().addAll(buyerGetsTradeAmountRadioButton, buyerGetsAllRadioButton,
|
||||||
sellerGetsTradeAmountRadioButton, sellerGetsAllRadioButton,
|
sellerGetsTradeAmountRadioButton, sellerGetsAllRadioButton,
|
||||||
customRadioButton);
|
customRadioButton);
|
||||||
GridPane.setRowIndex(radioButtonPane, rowIndex);
|
|
||||||
GridPane.setColumnIndex(radioButtonPane, 1);
|
addTopLabelWithVBox(gridPane, ++rowIndex, Res.get("disputeSummaryWindow.payout"),
|
||||||
GridPane.setMargin(radioButtonPane, new Insets(10, 0, 0, 0));
|
radioButtonPane, 10).second.getChildren();
|
||||||
gridPane.getChildren().add(radioButtonPane);
|
|
||||||
|
|
||||||
tradeAmountToggleGroup = new ToggleGroup();
|
tradeAmountToggleGroup = new ToggleGroup();
|
||||||
buyerGetsTradeAmountRadioButton.setToggleGroup(tradeAmountToggleGroup);
|
buyerGetsTradeAmountRadioButton.setToggleGroup(tradeAmountToggleGroup);
|
||||||
|
@ -401,12 +404,10 @@ public class DisputeSummaryWindow extends Overlay<DisputeSummaryWindow> {
|
||||||
sellerPayoutAmountInputTextField.setEditable(false);
|
sellerPayoutAmountInputTextField.setEditable(false);
|
||||||
|
|
||||||
isLoserPublisherCheckBox = addLabelCheckBox(gridPane, ++rowIndex,
|
isLoserPublisherCheckBox = addLabelCheckBox(gridPane, ++rowIndex,
|
||||||
Res.get("disputeSummaryWindow.payoutAmount.invert"));
|
Res.get("disputeSummaryWindow.payoutAmount.invert"), 15);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addReasonControls() {
|
private void addReasonControls() {
|
||||||
Label label = addLabel(gridPane, ++rowIndex, Res.get("disputeSummaryWindow.reason"), 10);
|
|
||||||
GridPane.setValignment(label, VPos.TOP);
|
|
||||||
reasonWasBugRadioButton = new AutoTooltipRadioButton(Res.get("disputeSummaryWindow.reason.bug"));
|
reasonWasBugRadioButton = new AutoTooltipRadioButton(Res.get("disputeSummaryWindow.reason.bug"));
|
||||||
reasonWasUsabilityIssueRadioButton = new AutoTooltipRadioButton(Res.get("disputeSummaryWindow.reason.usability"));
|
reasonWasUsabilityIssueRadioButton = new AutoTooltipRadioButton(Res.get("disputeSummaryWindow.reason.usability"));
|
||||||
reasonProtocolViolationRadioButton = new AutoTooltipRadioButton(Res.get("disputeSummaryWindow.reason.protocolViolation"));
|
reasonProtocolViolationRadioButton = new AutoTooltipRadioButton(Res.get("disputeSummaryWindow.reason.protocolViolation"));
|
||||||
|
@ -420,10 +421,11 @@ public class DisputeSummaryWindow extends Overlay<DisputeSummaryWindow> {
|
||||||
feeRadioButtonPane.getChildren().addAll(reasonWasBugRadioButton, reasonWasUsabilityIssueRadioButton,
|
feeRadioButtonPane.getChildren().addAll(reasonWasBugRadioButton, reasonWasUsabilityIssueRadioButton,
|
||||||
reasonProtocolViolationRadioButton, reasonNoReplyRadioButton,
|
reasonProtocolViolationRadioButton, reasonNoReplyRadioButton,
|
||||||
reasonWasBankRadioButton, reasonWasScamRadioButton, reasonWasOtherRadioButton);
|
reasonWasBankRadioButton, reasonWasScamRadioButton, reasonWasOtherRadioButton);
|
||||||
GridPane.setRowIndex(feeRadioButtonPane, rowIndex);
|
|
||||||
GridPane.setColumnIndex(feeRadioButtonPane, 1);
|
GridPane.setColumnSpan(
|
||||||
GridPane.setMargin(feeRadioButtonPane, new Insets(10, 0, 10, 0));
|
addTopLabelWithVBox(gridPane, ++rowIndex,
|
||||||
gridPane.getChildren().add(feeRadioButtonPane);
|
Res.get("disputeSummaryWindow.reason"),
|
||||||
|
feeRadioButtonPane, 10).second, 2);
|
||||||
|
|
||||||
reasonToggleGroup = new ToggleGroup();
|
reasonToggleGroup = new ToggleGroup();
|
||||||
reasonWasBugRadioButton.setToggleGroup(reasonToggleGroup);
|
reasonWasBugRadioButton.setToggleGroup(reasonToggleGroup);
|
||||||
|
@ -482,23 +484,24 @@ public class DisputeSummaryWindow extends Overlay<DisputeSummaryWindow> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addSummaryNotes() {
|
private void addSummaryNotes() {
|
||||||
Label label = addLabel(gridPane, ++rowIndex, Res.get("disputeSummaryWindow.summaryNotes"), 0);
|
|
||||||
GridPane.setValignment(label, VPos.TOP);
|
|
||||||
|
|
||||||
summaryNotesTextArea = new TextArea();
|
summaryNotesTextArea = new JFXTextArea();
|
||||||
summaryNotesTextArea.setPromptText(Res.get("disputeSummaryWindow.addSummaryNotes"));
|
summaryNotesTextArea.setPromptText(Res.get("disputeSummaryWindow.addSummaryNotes"));
|
||||||
summaryNotesTextArea.setWrapText(true);
|
summaryNotesTextArea.setWrapText(true);
|
||||||
|
|
||||||
|
final Tuple2<Label, VBox> topLabelWithVBox = addTopLabelWithVBox(gridPane, rowIndex,
|
||||||
|
Res.get("disputeSummaryWindow.summaryNotes"), summaryNotesTextArea, 0);
|
||||||
|
GridPane.setColumnSpan(topLabelWithVBox.second, 2);
|
||||||
|
|
||||||
summaryNotesTextArea.setPrefHeight(50);
|
summaryNotesTextArea.setPrefHeight(50);
|
||||||
summaryNotesTextArea.textProperty().bindBidirectional(disputeResult.summaryNotesProperty());
|
summaryNotesTextArea.textProperty().bindBidirectional(disputeResult.summaryNotesProperty());
|
||||||
GridPane.setRowIndex(summaryNotesTextArea, rowIndex);
|
|
||||||
GridPane.setColumnIndex(summaryNotesTextArea, 1);
|
|
||||||
gridPane.getChildren().add(summaryNotesTextArea);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addButtons(Contract contract) {
|
private void addButtons(Contract contract) {
|
||||||
Tuple2<Button, Button> tuple = add2ButtonsAfterGroup(gridPane, ++rowIndex,
|
Tuple3<Button, Button, HBox> tuple = add2ButtonsWithBox(gridPane, ++rowIndex,
|
||||||
Res.get("disputeSummaryWindow.close.button"),
|
Res.get("disputeSummaryWindow.close.button"),
|
||||||
Res.get("shared.cancel"));
|
Res.get("shared.cancel"), 15, true);
|
||||||
|
//GridPane.setColumnSpan(tuple.third, 2);
|
||||||
Button closeTicketButton = tuple.first;
|
Button closeTicketButton = tuple.first;
|
||||||
closeTicketButton.disableProperty().bind(Bindings.createBooleanBinding(
|
closeTicketButton.disableProperty().bind(Bindings.createBooleanBinding(
|
||||||
() -> tradeAmountToggleGroup.getSelectedToggle() == null
|
() -> tradeAmountToggleGroup.getSelectedToggle() == null
|
||||||
|
|
Loading…
Add table
Reference in a new issue