diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/open_trades/trade_state/states/BuyerState4.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/open_trades/trade_state/states/BuyerState4.java index f86cb00446..2dae0831df 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/open_trades/trade_state/states/BuyerState4.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/open_trades/trade_state/states/BuyerState4.java @@ -23,6 +23,7 @@ import bisq.common.data.Pair; import bisq.desktop.ServiceProvider; import bisq.desktop.common.Browser; +import bisq.desktop.common.utils.ClipboardUtil; import bisq.desktop.components.overlay.Popup; import bisq.desktop.main.content.bisq_easy.open_trades.trade_state.OpenTradesUtils; import bisq.i18n.Res; @@ -115,9 +116,16 @@ private void onExportTrade() { } private void openExplorer() { + Browser.open(getBlockExplorerUrl()); + } + + private void copyExplorerLink() { + ClipboardUtil.copyToClipboard(getBlockExplorerUrl()); + } + + private String getBlockExplorerUrl() { ExplorerService.Provider provider = explorerService.getSelectedProvider().get(); - String url = provider.getBaseUrl() + provider.getTxPath() + model.getPaymentProof(); - Browser.open(url); + return provider.getBaseUrl() + provider.getTxPath() + model.getPaymentProof(); } } @@ -178,7 +186,8 @@ protected void onViewAttached() { model.getTradeDate(), model.getPrice(), model.getPriceSymbol(), txIdDescriptionAndValue); if (model.isBlockExplorerLinkVisible()) { tradeCompletedTable.showBlockExplorerLink(); - tradeCompletedTable.getBlockExplorerButton().setOnAction(e -> controller.openExplorer()); + tradeCompletedTable.getOpenTxExplorerButton().setOnAction(e -> controller.openExplorer()); + tradeCompletedTable.getCopyTxExplorerLinkButton().setOnAction(e -> controller.copyExplorerLink()); } leaveButton.setOnAction(e -> controller.onLeaveChannel()); exportButton.setOnAction(e -> controller.onExportTrade()); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/open_trades/trade_state/states/SellerState4.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/open_trades/trade_state/states/SellerState4.java index 49797257ba..53af20f299 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/open_trades/trade_state/states/SellerState4.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/open_trades/trade_state/states/SellerState4.java @@ -23,6 +23,7 @@ import bisq.common.data.Pair; import bisq.desktop.ServiceProvider; import bisq.desktop.common.Browser; +import bisq.desktop.common.utils.ClipboardUtil; import bisq.desktop.components.overlay.Popup; import bisq.desktop.main.content.bisq_easy.open_trades.trade_state.OpenTradesUtils; import bisq.i18n.Res; @@ -116,9 +117,16 @@ private void onExportTrade() { } private void openExplorer() { + Browser.open(getBlockExplorerUrl()); + } + + private void copyExplorerLink() { + ClipboardUtil.copyToClipboard(getBlockExplorerUrl()); + } + + private String getBlockExplorerUrl() { ExplorerService.Provider provider = explorerService.getSelectedProvider().get(); - String url = provider.getBaseUrl() + provider.getTxPath() + model.getPaymentProof(); - Browser.open(url); + return provider.getBaseUrl() + provider.getTxPath() + model.getPaymentProof(); } } @@ -179,7 +187,8 @@ protected void onViewAttached() { model.getTradeDate(), model.getPrice(), model.getPriceSymbol(), txIdDescriptionAndValue); if (model.isBlockExplorerLinkVisible()) { tradeCompletedTable.showBlockExplorerLink(); - tradeCompletedTable.getBlockExplorerButton().setOnAction(e -> controller.openExplorer()); + tradeCompletedTable.getOpenTxExplorerButton().setOnAction(e -> controller.openExplorer()); + tradeCompletedTable.getCopyTxExplorerLinkButton().setOnAction(e -> controller.copyExplorerLink()); } leaveButton.setOnAction(e -> controller.onLeaveChannel()); exportButton.setOnAction(e -> controller.onExportTrade()); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/open_trades/trade_state/states/TradeCompletedTable.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/open_trades/trade_state/states/TradeCompletedTable.java index b837cfa6d6..21ddf3235c 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/open_trades/trade_state/states/TradeCompletedTable.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/open_trades/trade_state/states/TradeCompletedTable.java @@ -23,6 +23,7 @@ import bisq.desktop.common.utils.ImageUtil; import bisq.desktop.components.containers.Spacer; import bisq.desktop.components.controls.BisqIconButton; +import bisq.desktop.components.controls.BisqMenuItem; import bisq.desktop.components.controls.BisqTooltip; import bisq.desktop.main.content.components.UserProfileDisplay; import bisq.i18n.Res; @@ -39,10 +40,8 @@ public class TradeCompletedTable extends VBox { private final GridPane headerGridPane, bodyGridPane; - // @Getter - // private final BisqMenuItem copyTxIdButton; @Getter - private final Button blockExplorerButton, copyTxIdButton; + private final BisqMenuItem copyTxIdButton, copyTxExplorerLinkButton, openTxExplorerButton; public TradeCompletedTable() { Label title = new Label(Res.get("bisqEasy.tradeCompleted.title")); @@ -67,20 +66,21 @@ public TradeCompletedTable() { valueCol.setPercentWidth(75); bodyGridPane.getColumnConstraints().add(valueCol); - blockExplorerButton = BisqIconButton.createExternalLinkButton(Res.get("bisqEasy.tradeCompleted.body.txId.explorerLink"), Res.get("bisqEasy.tradeCompleted.body.txId.tooltip")); - blockExplorerButton.getStyleClass().addAll("medium-text", "text-fill-grey-dimmed"); - blockExplorerButton.getGraphic().getStyleClass().add("text-fill-grey-dimmed"); - blockExplorerButton.setVisible(false); - blockExplorerButton.setManaged(false); - - copyTxIdButton = BisqIconButton.createCopyIconButton(BisqTooltip.Style.DEFAULT, "text-fill-grey-dimmed"); + copyTxIdButton = new BisqMenuItem("copy-grey", "copy-white"); + copyTxIdButton.useIconOnly(); + copyTxIdButton.setTooltip(Res.get("bisqEasy.tradeCompleted.body.copy.txId.tooltip")); - /* blockExplorerButton = new BisqMenuItem(Res.get("bisqEasy.tradeCompleted.body.txId.explorerLink")); // TODO: Add icon for external link instead - blockExplorerButton.setTooltip(Res.get("bisqEasy.tradeCompleted.body.txId.tooltip"));*/ + copyTxExplorerLinkButton = new BisqMenuItem("link-grey", "link-white"); + copyTxExplorerLinkButton.useIconOnly(); + copyTxExplorerLinkButton.setTooltip(Res.get("bisqEasy.tradeCompleted.body.copy.explorerLink.tooltip")); + copyTxExplorerLinkButton.setVisible(false); + copyTxExplorerLinkButton.setManaged(false); - /* copyTxIdButton = new BisqMenuItem("copy-grey", "copy-white"); - copyTxIdButton.useIconOnly(); - copyTxIdButton.setTooltip(Res.get("action.copyToClipboard"));*/ + openTxExplorerButton = new BisqMenuItem("open-link-grey","open-link-white"); + openTxExplorerButton.useIconOnly(); + openTxExplorerButton.setTooltip(Res.get("bisqEasy.tradeCompleted.body.txId.tooltip")); + openTxExplorerButton.setVisible(false); + openTxExplorerButton.setManaged(false); Region line1 = getLine(); Region line2 = getLine(); @@ -200,7 +200,7 @@ public void initialize(UserProfile userProfile, Label txIdValue = new Label(txId); txIdValue.getStyleClass().addAll("medium-text", "text-fill-green"); - HBox txValueBox = new HBox(10, txIdValue, Spacer.fillHBox(), blockExplorerButton, copyTxIdButton); + HBox txValueBox = new HBox(1, txIdValue, Spacer.fillHBox(), copyTxIdButton, copyTxExplorerLinkButton, openTxExplorerButton); txValueBox.setAlignment(Pos.CENTER_LEFT); GridPane.setValignment(txIdTitle, VPos.CENTER); GridPane.setValignment(txIdValue, VPos.CENTER); @@ -213,13 +213,16 @@ public void initialize(UserProfile userProfile, } public void dispose() { - blockExplorerButton.setOnAction(null); copyTxIdButton.setOnAction(null); + copyTxExplorerLinkButton.setOnAction(null); + openTxExplorerButton.setOnAction(null); } public void showBlockExplorerLink() { - blockExplorerButton.setVisible(true); - blockExplorerButton.setManaged(true); + copyTxExplorerLinkButton.setVisible(true); + copyTxExplorerLinkButton.setManaged(true); + openTxExplorerButton.setVisible(true); + openTxExplorerButton.setManaged(true); } private Region getLine() { diff --git a/apps/desktop/desktop/src/main/resources/css/images.css b/apps/desktop/desktop/src/main/resources/css/images.css index 8e75c5d8c3..eabdcccbf7 100644 --- a/apps/desktop/desktop/src/main/resources/css/images.css +++ b/apps/desktop/desktop/src/main/resources/css/images.css @@ -254,6 +254,29 @@ -fx-image: url("/images/icons/close-mini-green.png"); } +#link-white { + -fx-image: url("/images/icons/link-white.png"); +} + +#link-grey { + -fx-image: url("/images/icons/link-grey.png"); +} + +#link-green { + -fx-image: url("/images/icons/link-green.png"); +} + +#open-link-white { + -fx-image: url("/images/icons/open-link-white.png"); +} + +#open-link-grey { + -fx-image: url("/images/icons/open-link-grey.png"); +} + +#open-link-green { + -fx-image: url("/images/icons/open-link-green.png"); +} /* ------------------------------------------------------------------------------------ */ /* Navigation */ diff --git a/apps/desktop/desktop/src/main/resources/images/icons/link-green.png b/apps/desktop/desktop/src/main/resources/images/icons/link-green.png new file mode 100644 index 0000000000..fe9b3ac33a Binary files /dev/null and b/apps/desktop/desktop/src/main/resources/images/icons/link-green.png differ diff --git a/apps/desktop/desktop/src/main/resources/images/icons/link-green@2x.png b/apps/desktop/desktop/src/main/resources/images/icons/link-green@2x.png new file mode 100644 index 0000000000..33931d3d1a Binary files /dev/null and b/apps/desktop/desktop/src/main/resources/images/icons/link-green@2x.png differ diff --git a/apps/desktop/desktop/src/main/resources/images/icons/link-grey.png b/apps/desktop/desktop/src/main/resources/images/icons/link-grey.png new file mode 100644 index 0000000000..416a0d9b06 Binary files /dev/null and b/apps/desktop/desktop/src/main/resources/images/icons/link-grey.png differ diff --git a/apps/desktop/desktop/src/main/resources/images/icons/link-grey@2x.png b/apps/desktop/desktop/src/main/resources/images/icons/link-grey@2x.png new file mode 100644 index 0000000000..46eee4a5e7 Binary files /dev/null and b/apps/desktop/desktop/src/main/resources/images/icons/link-grey@2x.png differ diff --git a/apps/desktop/desktop/src/main/resources/images/icons/link-white.png b/apps/desktop/desktop/src/main/resources/images/icons/link-white.png new file mode 100644 index 0000000000..59b71d0439 Binary files /dev/null and b/apps/desktop/desktop/src/main/resources/images/icons/link-white.png differ diff --git a/apps/desktop/desktop/src/main/resources/images/icons/link-white@2x.png b/apps/desktop/desktop/src/main/resources/images/icons/link-white@2x.png new file mode 100644 index 0000000000..5c013a6190 Binary files /dev/null and b/apps/desktop/desktop/src/main/resources/images/icons/link-white@2x.png differ diff --git a/apps/desktop/desktop/src/main/resources/images/icons/open-link-green.png b/apps/desktop/desktop/src/main/resources/images/icons/open-link-green.png new file mode 100644 index 0000000000..4ae66e5fb1 Binary files /dev/null and b/apps/desktop/desktop/src/main/resources/images/icons/open-link-green.png differ diff --git a/apps/desktop/desktop/src/main/resources/images/icons/open-link-green@2x.png b/apps/desktop/desktop/src/main/resources/images/icons/open-link-green@2x.png new file mode 100644 index 0000000000..dcc19af47d Binary files /dev/null and b/apps/desktop/desktop/src/main/resources/images/icons/open-link-green@2x.png differ diff --git a/apps/desktop/desktop/src/main/resources/images/icons/open-link-grey.png b/apps/desktop/desktop/src/main/resources/images/icons/open-link-grey.png new file mode 100644 index 0000000000..5a071be454 Binary files /dev/null and b/apps/desktop/desktop/src/main/resources/images/icons/open-link-grey.png differ diff --git a/apps/desktop/desktop/src/main/resources/images/icons/open-link-grey@2x.png b/apps/desktop/desktop/src/main/resources/images/icons/open-link-grey@2x.png new file mode 100644 index 0000000000..83c9496b85 Binary files /dev/null and b/apps/desktop/desktop/src/main/resources/images/icons/open-link-grey@2x.png differ diff --git a/apps/desktop/desktop/src/main/resources/images/icons/open-link-white.png b/apps/desktop/desktop/src/main/resources/images/icons/open-link-white.png new file mode 100644 index 0000000000..0f146effa7 Binary files /dev/null and b/apps/desktop/desktop/src/main/resources/images/icons/open-link-white.png differ diff --git a/apps/desktop/desktop/src/main/resources/images/icons/open-link-white@2x.png b/apps/desktop/desktop/src/main/resources/images/icons/open-link-white@2x.png new file mode 100644 index 0000000000..7540c5a571 Binary files /dev/null and b/apps/desktop/desktop/src/main/resources/images/icons/open-link-white@2x.png differ diff --git a/i18n/src/main/resources/bisq_easy.properties b/i18n/src/main/resources/bisq_easy.properties index cb4343a662..440ff671e0 100644 --- a/i18n/src/main/resources/bisq_easy.properties +++ b/i18n/src/main/resources/bisq_easy.properties @@ -819,6 +819,9 @@ bisqEasy.tradeState.info.buyer.phase3b.info.ln=Transfers via the Lightning Netwo Occasionally, payments may fail and need to be retried. bisqEasy.tradeState.info.buyer.phase3b.confirmButton.ln=Confirm receipt bisqEasy.tradeState.info.buyer.phase3b.tradeLogMessage.ln={0} has confirmed to have received the Bitcoin payment +bisqEasy.tradeState.info.buyer.phase3b.headline.MAIN_CHAIN=The seller has started the Bitcoin payment +bisqEasy.tradeState.info.buyer.phase3b.info.MAIN_CHAIN=As soon the Bitcoin transaction is visible in the Bitcoin network you will see the payment. \ + After 1 blockchain confirmation the payment can be considered as completed. bisqEasy.tradeState.info.buyer.phase3b.balance=Received Bitcoin bisqEasy.tradeState.info.buyer.phase3b.balance.prompt=Waiting for blockchain data... @@ -844,7 +847,8 @@ bisqEasy.tradeState.info.seller.phase3a.sendBtc=Send {0} to the buyer bisqEasy.tradeState.info.seller.phase3a.baseAmount=Amount to send bisqEasy.tradeState.info.seller.phase3a.qrCodeDisplay.openWindow=Open larger display bisqEasy.tradeState.info.seller.phase3a.qrCodeDisplay.window.title=Scan QR Code for trade ''{0}'' - +bisqEasy.tradeState.info.seller.phase3b.headline.MAIN_CHAIN=Waiting for blockchain confirmation +bisqEasy.tradeState.info.seller.phase3b.info.MAIN_CHAIN=The Bitcoin payment require at least 1 blockchain confirmation to be considered complete. bisqEasy.tradeState.info.seller.phase3b.balance=Bitcoin payment bisqEasy.tradeState.info.seller.phase3b.balance.prompt=Waiting for blockchain data... @@ -887,10 +891,6 @@ bisqEasy.tradeState.info.seller.phase3b.info.ln=Transfers via the Lightning Netw as communication will no longer be possible afterward. bisqEasy.tradeState.info.seller.phase3b.confirmButton.ln=Complete trade -bisqEasy.tradeState.info.seller.phase4.headline=Trade was successfully completed -bisqEasy.tradeState.info.seller.phase4.quoteAmount=You have received -bisqEasy.tradeState.info.seller.phase4.baseAmount=You have sold - ###################################################### # Trade Completed Table @@ -910,8 +910,9 @@ bisqEasy.tradeCompleted.body.date=Date bisqEasy.tradeCompleted.body.tradePrice=Trade price bisqEasy.tradeCompleted.body.tradeFee=Trade fee bisqEasy.tradeCompleted.body.tradeFee.value=No trade fees in Bisq Easy -bisqEasy.tradeCompleted.body.txId.tooltip=Open transaction in block explorer -bisqEasy.tradeCompleted.body.txId.explorerLink=Open block explorer +bisqEasy.tradeCompleted.body.copy.txId.tooltip=Copy transaction ID to clipboard +bisqEasy.tradeCompleted.body.copy.explorerLink.tooltip=Copy block explorer transaction link +bisqEasy.tradeCompleted.body.txId.tooltip=Open block explorer transaction ################################################################################