diff --git a/src/main/java/com/sparrowwallet/sparrow/transaction/IndexedTransactionForm.java b/src/main/java/com/sparrowwallet/sparrow/transaction/IndexedTransactionForm.java index db40c93a..a898933c 100644 --- a/src/main/java/com/sparrowwallet/sparrow/transaction/IndexedTransactionForm.java +++ b/src/main/java/com/sparrowwallet/sparrow/transaction/IndexedTransactionForm.java @@ -1,5 +1,7 @@ package com.sparrowwallet.sparrow.transaction; +import com.sparrowwallet.drongo.address.Address; + public abstract class IndexedTransactionForm extends TransactionForm { private int index; @@ -15,4 +17,6 @@ public abstract class IndexedTransactionForm extends TransactionForm { public void setIndex(int index) { this.index = index; } + + public abstract Address getAddress(); } diff --git a/src/main/java/com/sparrowwallet/sparrow/transaction/InputForm.java b/src/main/java/com/sparrowwallet/sparrow/transaction/InputForm.java index 504a84c7..5d963069 100644 --- a/src/main/java/com/sparrowwallet/sparrow/transaction/InputForm.java +++ b/src/main/java/com/sparrowwallet/sparrow/transaction/InputForm.java @@ -1,5 +1,6 @@ package com.sparrowwallet.sparrow.transaction; +import com.sparrowwallet.drongo.address.Address; import com.sparrowwallet.drongo.protocol.TransactionInput; import com.sparrowwallet.drongo.protocol.TransactionOutPoint; import com.sparrowwallet.drongo.protocol.TransactionOutput; @@ -57,6 +58,20 @@ public class InputForm extends IndexedTransactionForm { return getWallet() != null && getWallet().isWalletTxo(txInput); } + @Override + public Address getAddress() { + TransactionInput txInput = getTransactionInput(); + if(txInput != null && !txInput.isCoinBase() && getInputTransactions() != null) { + BlockTransaction blockTransaction = getInputTransactions().get(txInput.getOutpoint().getHash()); + if(blockTransaction != null) { + TransactionOutput output = blockTransaction.getTransaction().getOutputs().get((int)txInput.getOutpoint().getIndex()); + return output.getScript().getToAddress(); + } + } + + return null; + } + @Override public Node getContents() throws IOException { FXMLLoader loader = new FXMLLoader(getClass().getResource("input.fxml")); diff --git a/src/main/java/com/sparrowwallet/sparrow/transaction/OutputForm.java b/src/main/java/com/sparrowwallet/sparrow/transaction/OutputForm.java index f58c2065..ed0d3b9a 100644 --- a/src/main/java/com/sparrowwallet/sparrow/transaction/OutputForm.java +++ b/src/main/java/com/sparrowwallet/sparrow/transaction/OutputForm.java @@ -45,6 +45,15 @@ public class OutputForm extends IndexedTransactionForm { return getWallet() != null; } + @Override + public Address getAddress() { + if(getTransactionOutput() != null) { + return getTransactionOutput().getScript().getToAddress(); + } + + return null; + } + @Override public Node getContents() throws IOException { FXMLLoader loader = new FXMLLoader(getClass().getResource("output.fxml")); @@ -61,7 +70,7 @@ public class OutputForm extends IndexedTransactionForm { } public String toString() { - Address address = getTransactionOutput().getScript().getToAddress(); + Address address = getAddress(); return address != null ? address.toString() : "Output #" + getIndex(); } diff --git a/src/main/java/com/sparrowwallet/sparrow/transaction/PageForm.java b/src/main/java/com/sparrowwallet/sparrow/transaction/PageForm.java index ea851203..37ff3806 100644 --- a/src/main/java/com/sparrowwallet/sparrow/transaction/PageForm.java +++ b/src/main/java/com/sparrowwallet/sparrow/transaction/PageForm.java @@ -1,5 +1,6 @@ package com.sparrowwallet.sparrow.transaction; +import com.sparrowwallet.drongo.address.Address; import com.sparrowwallet.sparrow.net.ElectrumServer; import javafx.scene.Node; @@ -29,6 +30,11 @@ public class PageForm extends IndexedTransactionForm { return view; } + @Override + public Address getAddress() { + return null; + } + public int getPageStart() { return pageStart; } diff --git a/src/main/java/com/sparrowwallet/sparrow/transaction/TransactionController.java b/src/main/java/com/sparrowwallet/sparrow/transaction/TransactionController.java index 1ed206d7..bc0e2bc9 100644 --- a/src/main/java/com/sparrowwallet/sparrow/transaction/TransactionController.java +++ b/src/main/java/com/sparrowwallet/sparrow/transaction/TransactionController.java @@ -1,6 +1,7 @@ package com.sparrowwallet.sparrow.transaction; import com.google.common.eventbus.Subscribe; +import com.sparrowwallet.drongo.address.Address; import com.sparrowwallet.drongo.protocol.*; import com.sparrowwallet.drongo.psbt.PSBT; import com.sparrowwallet.drongo.psbt.PSBTInput; @@ -9,7 +10,6 @@ import com.sparrowwallet.drongo.wallet.*; import com.sparrowwallet.sparrow.AppServices; import com.sparrowwallet.sparrow.EventManager; import com.sparrowwallet.sparrow.TransactionTabData; -import com.sparrowwallet.sparrow.control.TextUtils; import com.sparrowwallet.sparrow.control.TransactionHexArea; import com.sparrowwallet.sparrow.event.*; import com.sparrowwallet.sparrow.io.Config; @@ -166,12 +166,16 @@ public class TransactionController implements Initializable { if(form != null) { Label label = form.getLabel(); - label.maxWidthProperty().bind(txTreeWidthProperty.subtract(70)); + label.maxWidthProperty().bind(txTreeWidthProperty.subtract(62)); setGraphic(label); - double width = TextUtils.computeTextWidth(label.getFont(), label.getText(), 0.0D); - if(width > label.getMaxWidth()) { - Tooltip tooltip = new Tooltip(label.getText()); + Address address = null; + if(form instanceof IndexedTransactionForm indexedForm) { + address = indexedForm.getAddress(); + } + + if(address != null) { + Tooltip tooltip = new Tooltip(label.getText() + (label.getText().equals(address.toString()) ? "" : "\n" + address)); tooltip.setMaxWidth(transactionMasterDetail.getWidth()); tooltip.setWrapText(true); label.setTooltip(tooltip);