diff --git a/gui/src/main/java/io/bitsquare/gui/main/offer/createoffer/CreateOfferView.java b/gui/src/main/java/io/bitsquare/gui/main/offer/createoffer/CreateOfferView.java index ba152701e4..0bc3fe423c 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/offer/createoffer/CreateOfferView.java +++ b/gui/src/main/java/io/bitsquare/gui/main/offer/createoffer/CreateOfferView.java @@ -118,6 +118,7 @@ public class CreateOfferView extends ActivatableViewAndModel tradeCurrencyCodeListener; private ImageView qrCodeImageView; private ChangeListener balanceListener; + private HBox fundingHBox; /////////////////////////////////////////////////////////////////////////////////////////// @@ -311,8 +312,7 @@ public class CreateOfferView extends ActivatableViewAndModel tuple = add2ButtonsAfterGroup(gridPane, ++gridRow, "Transfer from Bitsquare wallet", "Fund from external wallet"); - fundFromSavingsWalletButton = tuple.first; - fundFromSavingsWalletButton.setVisible(false); + + fundingHBox = new HBox(); + fundingHBox.setSpacing(10); + fundFromSavingsWalletButton = new Button("Transfer funds from Bitsquare wallet"); + fundFromSavingsWalletButton.setDefaultButton(true); + fundingHBox.setVisible(false); fundFromSavingsWalletButton.setDefaultButton(false); fundFromSavingsWalletButton.setOnAction(e -> model.useSavingsWalletForFunding()); - - fundFromExternalWalletButton = tuple.second; - fundFromExternalWalletButton.setVisible(false); + Label label = new Label("OR"); + label.setPadding(new Insets(5, 0, 0, 0)); + fundFromExternalWalletButton = new Button("Pay in funds from external wallet"); fundFromExternalWalletButton.setDefaultButton(false); fundFromExternalWalletButton.setOnAction(e -> { try { @@ -776,6 +779,12 @@ public class CreateOfferView extends ActivatableViewAndModel { List acceptedCountryCodes = offer.getAcceptedCountryCodes(); boolean showAcceptedCountryCodes = acceptedCountryCodes != null && !acceptedCountryCodes.isEmpty(); - int rows = 16; + int rows = 17; if (dispute.getDepositTxSerialized() != null) rows++; if (dispute.getPayoutTxSerialized() != null) @@ -167,6 +174,36 @@ public class ContractWindow extends Overlay { if (dispute.getPayoutTxSerialized() != null) addLabelTxIdTextField(gridPane, ++rowIndex, "Payout transaction ID:", dispute.getPayoutTxId()); + if (contract != null) { + Button viewContractButton = addLabelButton(gridPane, ++rowIndex, "Contract in JSON format:", "View contract in JSON format", 0).second; + viewContractButton.setDefaultButton(false); + viewContractButton.setOnAction(e -> { + TextArea textArea = new TextArea(); + textArea.setText(dispute.getContractAsJson()); + textArea.setPrefHeight(50); + textArea.setEditable(false); + textArea.setWrapText(true); + textArea.setPrefSize(800, 600); + + Scene viewContractScene = new Scene(textArea); + Stage viewContractStage = new Stage(); + viewContractStage.setTitle("Contract for trade with ID: " + dispute.getShortTradeId()); + viewContractStage.setScene(viewContractScene); + if (owner == null) + owner = MainView.getRootContainer(); + Scene rootScene = owner.getScene(); + viewContractStage.initOwner(rootScene.getWindow()); + viewContractStage.initModality(Modality.NONE); + viewContractStage.initStyle(StageStyle.UTILITY); + viewContractStage.show(); + + Window window = rootScene.getWindow(); + double titleBarHeight = window.getHeight() - rootScene.getHeight(); + viewContractStage.setX(Math.round(window.getX() + (owner.getWidth() - viewContractStage.getWidth()) / 2) + 200); + viewContractStage.setY(Math.round(window.getY() + titleBarHeight + (owner.getHeight() - viewContractStage.getHeight()) / 2) + 50); + }); + } + Button cancelButton = addButtonAfterGroup(gridPane, ++rowIndex, "Close"); //TODO app wide focus //cancelButton.requestFocus(); diff --git a/gui/src/main/java/io/bitsquare/gui/main/overlays/windows/TradeDetailsWindow.java b/gui/src/main/java/io/bitsquare/gui/main/overlays/windows/TradeDetailsWindow.java index 3ff8d856f9..6299aa385e 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/overlays/windows/TradeDetailsWindow.java +++ b/gui/src/main/java/io/bitsquare/gui/main/overlays/windows/TradeDetailsWindow.java @@ -19,6 +19,7 @@ package io.bitsquare.gui.main.overlays.windows; import io.bitsquare.arbitration.DisputeManager; import io.bitsquare.btc.FeePolicy; +import io.bitsquare.gui.main.MainView; import io.bitsquare.gui.main.overlays.Overlay; import io.bitsquare.gui.util.BSFormatter; import io.bitsquare.gui.util.Layout; @@ -32,10 +33,15 @@ import javafx.beans.property.IntegerProperty; import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.value.ChangeListener; import javafx.geometry.Insets; +import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TextArea; import javafx.scene.control.TextField; import javafx.scene.control.Tooltip; +import javafx.stage.Modality; +import javafx.stage.Stage; +import javafx.stage.StageStyle; +import javafx.stage.Window; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -116,6 +122,7 @@ public class TradeDetailsWindow extends Overlay { addLabelTextField(gridPane, ++rowIndex, "Currency:", offer.getCurrencyCode()); addLabelTextField(gridPane, ++rowIndex, "Payment method:", BSResources.get(offer.getPaymentMethod().getId())); + // second group rows = 5; PaymentAccountContractData buyerPaymentAccountContractData = null; PaymentAccountContractData sellerPaymentAccountContractData = null; @@ -146,7 +153,8 @@ public class TradeDetailsWindow extends Overlay { rows++; if (trade.getPayoutTx() != null) rows++; - if (disputeManager.findOwnDispute(trade.getId()).isPresent()) + boolean showDisputedTx = disputeManager.findOwnDispute(trade.getId()).isPresent() && disputeManager.findOwnDispute(trade.getId()).get().getDisputePayoutTxId() != null; + if (showDisputedTx) rows++; if (trade.errorMessageProperty().get() != null) rows += 2; @@ -186,14 +194,37 @@ public class TradeDetailsWindow extends Overlay { addLabelTxIdTextField(gridPane, ++rowIndex, "Deposit transaction ID:", trade.getDepositTx().getHashAsString()); if (trade.getPayoutTx() != null) addLabelTxIdTextField(gridPane, ++rowIndex, "Payout transaction ID:", trade.getPayoutTx().getHashAsString()); - if (disputeManager.findOwnDispute(trade.getId()).isPresent() && disputeManager.findOwnDispute(trade.getId()).get().getDisputePayoutTxId() != null) + if (showDisputedTx) addLabelTxIdTextField(gridPane, ++rowIndex, "Disputed payout transaction ID:", disputeManager.findOwnDispute(trade.getId()).get().getDisputePayoutTxId()); if (contract != null) { - TextArea textArea = addLabelTextArea(gridPane, ++rowIndex, "Contract in JSON format:", trade.getContractAsJson()).second; - textArea.setText(trade.getContractAsJson()); - textArea.setPrefHeight(50); - textArea.setEditable(false); + Button viewContractButton = addLabelButton(gridPane, ++rowIndex, "Contract in JSON format:", "View contract", 0).second; + viewContractButton.setDefaultButton(false); + viewContractButton.setOnAction(e -> { + TextArea textArea = new TextArea(); + textArea.setText(trade.getContractAsJson()); + textArea.setPrefHeight(50); + textArea.setEditable(false); + textArea.setWrapText(true); + textArea.setPrefSize(800, 600); + + Scene viewContractScene = new Scene(textArea); + Stage viewContractStage = new Stage(); + viewContractStage.setTitle("Contract for trade with ID: " + trade.getShortId()); + viewContractStage.setScene(viewContractScene); + if (owner == null) + owner = MainView.getRootContainer(); + Scene rootScene = owner.getScene(); + viewContractStage.initOwner(rootScene.getWindow()); + viewContractStage.initModality(Modality.NONE); + viewContractStage.initStyle(StageStyle.UTILITY); + viewContractStage.show(); + + Window window = rootScene.getWindow(); + double titleBarHeight = window.getHeight() - rootScene.getHeight(); + viewContractStage.setX(Math.round(window.getX() + (owner.getWidth() - viewContractStage.getWidth()) / 2) + 200); + viewContractStage.setY(Math.round(window.getY() + titleBarHeight + (owner.getHeight() - viewContractStage.getHeight()) / 2) + 50); + }); } if (trade.errorMessageProperty().get() != null) { diff --git a/gui/src/main/java/io/bitsquare/gui/main/portfolio/pendingtrades/steps/buyer/BuyerStep5View.java b/gui/src/main/java/io/bitsquare/gui/main/portfolio/pendingtrades/steps/buyer/BuyerStep5View.java index 026cdd96cd..921b6f76bd 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/portfolio/pendingtrades/steps/buyer/BuyerStep5View.java +++ b/gui/src/main/java/io/bitsquare/gui/main/portfolio/pendingtrades/steps/buyer/BuyerStep5View.java @@ -34,9 +34,12 @@ import io.bitsquare.gui.main.portfolio.pendingtrades.steps.TradeStepView; import io.bitsquare.gui.util.BSFormatter; import io.bitsquare.gui.util.Layout; import javafx.beans.value.ChangeListener; +import javafx.geometry.Insets; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.HBox; import org.bitcoinj.core.AddressFormatException; import org.bitcoinj.core.Coin; @@ -117,9 +120,20 @@ public class BuyerStep5View extends TradeStepView { addLabelTextField(gridPane, gridRow, "Amount to withdraw:", model.getPayoutAmount(), Layout.FIRST_ROW_AND_GROUP_DISTANCE); withdrawAddressTextField = addLabelInputTextField(gridPane, ++gridRow, "Withdraw to address:").second; - Tuple2 tuple2 = add2ButtonsAfterGroup(gridPane, ++gridRow, "Move to Bitsquare wallet", "Withdraw to external wallet"); - useSavingsWalletButton = tuple2.first; - withdrawToExternalWalletButton = tuple2.second; + HBox hBox = new HBox(); + hBox.setSpacing(10); + useSavingsWalletButton = new Button("Move funds to Bitsquare wallet"); + useSavingsWalletButton.setDefaultButton(false); + Label label = new Label("OR"); + label.setPadding(new Insets(5, 0, 0, 0)); + withdrawToExternalWalletButton = new Button("Withdraw to external wallet"); + withdrawToExternalWalletButton.setDefaultButton(false); + hBox.getChildren().addAll(useSavingsWalletButton, label, withdrawToExternalWalletButton); + GridPane.setRowIndex(hBox, ++gridRow); + GridPane.setColumnIndex(hBox, 1); + GridPane.setMargin(hBox, new Insets(15, 10, 0, 0)); + gridPane.getChildren().add(hBox); + useSavingsWalletButton.setOnAction(e -> { model.dataModel.walletService.swapTradeToSavings(trade.getId()); handleTradeCompleted();