diff --git a/core/src/main/resources/i18n/displayStrings.properties b/core/src/main/resources/i18n/displayStrings.properties index 5917369f8a4..b468f7af790 100644 --- a/core/src/main/resources/i18n/displayStrings.properties +++ b/core/src/main/resources/i18n/displayStrings.properties @@ -2695,6 +2695,13 @@ tradeDetailsWindow.tradeState=Trade state tradeDetailsWindow.agentAddresses=Arbitrator/Mediator tradeDetailsWindow.detailData=Detail data +txDetailsWindow.headline=Transaction Details +txDetailsWindow.btc.note=You have sent BTC. +txDetailsWindow.bsq.note=You have sent BSQ funds. \ + BSQ is colored bitcoin, so the transaction will not show in a BSQ explorer until it has been confirmed in a bitcoin block. +txDetailsWindow.sentTo=Sent to +txDetailsWindow.txId=TxId + walletPasswordWindow.headline=Enter password to unlock torNetworkSettingWindow.header=Tor networks settings diff --git a/desktop/src/main/java/bisq/desktop/main/dao/wallet/send/BsqSendView.java b/desktop/src/main/java/bisq/desktop/main/dao/wallet/send/BsqSendView.java index 533064b62c1..e692f13d0f7 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/wallet/send/BsqSendView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/wallet/send/BsqSendView.java @@ -27,6 +27,7 @@ import bisq.desktop.main.funds.FundsView; import bisq.desktop.main.funds.deposit.DepositView; import bisq.desktop.main.overlays.popups.Popup; +import bisq.desktop.main.overlays.windows.TxDetailsBsq; import bisq.desktop.main.overlays.windows.WalletPasswordWindow; import bisq.desktop.util.GUIUtil; import bisq.desktop.util.Layout; @@ -45,6 +46,7 @@ import bisq.core.btc.wallet.WalletsManager; import bisq.core.dao.state.model.blockchain.TxType; import bisq.core.locale.Res; +import bisq.core.user.DontShowAgainLookup; import bisq.core.util.FormattingUtils; import bisq.core.util.coin.BsqFormatter; import bisq.core.util.coin.CoinFormatter; @@ -260,8 +262,12 @@ private void addSendBsqGroup() { bsqFormatter, btcFormatter, () -> { + receiversAddressInputTextField.setValidator(null); receiversAddressInputTextField.setText(""); + receiversAddressInputTextField.setValidator(bsqAddressValidator); + amountInputTextField.setValidator(null); amountInputTextField.setText(""); + amountInputTextField.setValidator(bsqValidator); }); } catch (BsqChangeBelowDustException e) { String msg = Res.get("popup.warning.bsqChangeBelowDustException", bsqFormatter.formatCoinWithCode(e.getOutputValue())); @@ -373,6 +379,12 @@ private void showPublishTxPopup(Coin receiverAmount, @Override public void onSuccess(Transaction transaction) { log.debug("Successfully sent tx with id {}", txWithBtcFee.getTxId().toString()); + String key = "showTransactionSentBsq"; + if (DontShowAgainLookup.showAgain(key)) { + new TxDetailsBsq(txWithBtcFee.getTxId().toString(), address, amountFormatter.formatCoinWithCode(receiverAmount)) + .dontShowAgainId(key) + .show(); + } } @Override diff --git a/desktop/src/main/java/bisq/desktop/main/funds/withdrawal/WithdrawalView.java b/desktop/src/main/java/bisq/desktop/main/funds/withdrawal/WithdrawalView.java index e67cd9903e3..aa3e984660b 100644 --- a/desktop/src/main/java/bisq/desktop/main/funds/withdrawal/WithdrawalView.java +++ b/desktop/src/main/java/bisq/desktop/main/funds/withdrawal/WithdrawalView.java @@ -25,6 +25,7 @@ import bisq.desktop.components.HyperlinkWithIcon; import bisq.desktop.components.TitledGroupBg; import bisq.desktop.main.overlays.popups.Popup; +import bisq.desktop.main.overlays.windows.TxDetails; import bisq.desktop.main.overlays.windows.WalletPasswordWindow; import bisq.desktop.util.GUIUtil; import bisq.desktop.util.Layout; @@ -39,6 +40,7 @@ import bisq.core.locale.Res; import bisq.core.trade.Trade; import bisq.core.trade.TradeManager; +import bisq.core.user.DontShowAgainLookup; import bisq.core.user.Preferences; import bisq.core.util.FormattingUtils; import bisq.core.util.ParsingUtils; @@ -383,6 +385,12 @@ private void onWithdraw() { @Override public void onSuccess(@javax.annotation.Nullable Transaction transaction) { if (transaction != null) { + String key = "showTransactionSent"; + if (DontShowAgainLookup.showAgain(key)) { + new TxDetails(transaction.getTxId().toString(), withdrawToTextField.getText(), formatter.formatCoinWithCode(sendersAmount)) + .dontShowAgainId(key) + .show(); + } log.debug("onWithdraw onSuccess tx ID:{}", transaction.getTxId().toString()); } else { log.error("onWithdraw transaction is null"); diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/windows/TxDetails.java b/desktop/src/main/java/bisq/desktop/main/overlays/windows/TxDetails.java new file mode 100644 index 00000000000..50730519019 --- /dev/null +++ b/desktop/src/main/java/bisq/desktop/main/overlays/windows/TxDetails.java @@ -0,0 +1,68 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.desktop.main.overlays.windows; + +import bisq.desktop.components.TxIdTextField; +import bisq.desktop.main.overlays.Overlay; + +import bisq.core.locale.Res; + +import javafx.scene.layout.GridPane; +import javafx.scene.layout.Region; + +import static bisq.desktop.util.FormBuilder.*; + +public class TxDetails extends Overlay { + + protected String txId, address, amount, note; + protected TxIdTextField txIdTextField; + + public TxDetails(String txId, String address, String amount) { + type = Type.Attention; + this.txId = txId; + this.address = address; + this.amount = amount; + this.note = Res.get("txDetailsWindow.btc.note"); + } + + public void show() { + rowIndex = -1; + width = 918; + if (headLine == null) + headLine = Res.get("txDetailsWindow.headline"); + createGridPane(); + gridPane.setHgap(15); + addHeadLine(); + addContent(); + addButtons(); + addDontShowAgainCheckBox(); + applyStyles(); + display(); + } + + protected void addContent() { + GridPane.setColumnSpan( + addMultilineLabel(gridPane, ++rowIndex, note, 0), 2); + Region spacer = new Region(); + spacer.setMinHeight(20); + gridPane.add(spacer, 0, ++rowIndex); + addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("shared.amount"), amount); + addConfirmationLabelTextFieldWithCopyIcon(gridPane, ++rowIndex, Res.get("txDetailsWindow.sentTo"), address); + txIdTextField = addLabelTxIdTextField(gridPane, ++rowIndex, Res.get("txDetailsWindow.txId"), txId).second; + } +} diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/windows/TxDetailsBsq.java b/desktop/src/main/java/bisq/desktop/main/overlays/windows/TxDetailsBsq.java new file mode 100644 index 00000000000..aa10072b615 --- /dev/null +++ b/desktop/src/main/java/bisq/desktop/main/overlays/windows/TxDetailsBsq.java @@ -0,0 +1,33 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.desktop.main.overlays.windows; + +import bisq.core.locale.Res; + +public class TxDetailsBsq extends TxDetails { + + public TxDetailsBsq(String txId, String address, String amount) { + super(txId, address, amount); + note = Res.get("txDetailsWindow.bsq.note"); + } + + protected void addContent() { + super.addContent(); + txIdTextField.setBsq(true); + } +}