9 changed files with 166 additions and 15 deletions
@ -1 +1 @@ |
|||
Subproject commit 08c159ebadee78af391e83d91b6a453a28acbf3e |
|||
Subproject commit 488752c142765bacd0373390faccbdb11b47487a |
@ -0,0 +1,89 @@ |
|||
package com.sparrowwallet.sparrow.control; |
|||
|
|||
import com.sparrowwallet.drongo.OutputDescriptor; |
|||
import com.sparrowwallet.drongo.policy.PolicyType; |
|||
import com.sparrowwallet.drongo.protocol.ScriptType; |
|||
import com.sparrowwallet.drongo.wallet.Keystore; |
|||
import com.sparrowwallet.drongo.wallet.Wallet; |
|||
import javafx.scene.control.ContextMenu; |
|||
import javafx.scene.control.MenuItem; |
|||
import javafx.scene.input.Clipboard; |
|||
import javafx.scene.input.ClipboardContent; |
|||
import org.fxmisc.richtext.CodeArea; |
|||
|
|||
import java.util.List; |
|||
|
|||
import static com.sparrowwallet.drongo.policy.PolicyType.MULTI; |
|||
import static com.sparrowwallet.drongo.policy.PolicyType.SINGLE; |
|||
import static com.sparrowwallet.drongo.protocol.ScriptType.MULTISIG; |
|||
|
|||
public class DescriptorArea extends CodeArea { |
|||
private Wallet wallet; |
|||
|
|||
public void setWallet(Wallet wallet) { |
|||
clear(); |
|||
this.wallet = wallet; |
|||
|
|||
DescriptorContextMenu contextMenu = new DescriptorContextMenu(wallet, this); |
|||
setContextMenu(contextMenu); |
|||
|
|||
PolicyType policyType = wallet.getPolicyType(); |
|||
ScriptType scriptType = wallet.getScriptType(); |
|||
List<Keystore> keystores = wallet.getKeystores(); |
|||
int threshold = wallet.getDefaultPolicy().getNumSignaturesRequired(); |
|||
|
|||
if(SINGLE.equals(policyType)) { |
|||
append(scriptType.getDescriptor(), "descriptor-text"); |
|||
replace(getLength(), getLength(), keystores.get(0).getScriptName(), List.of(keystores.get(0).isValid() ? "descriptor-text" : "descriptor-error", keystores.get(0).getScriptName())); |
|||
append(scriptType.getCloseDescriptor(), "descriptor-text"); |
|||
} |
|||
|
|||
if(MULTI.equals(policyType)) { |
|||
append(scriptType.getDescriptor(), "descriptor-text"); |
|||
append(MULTISIG.getDescriptor(), "descriptor-text"); |
|||
append(Integer.toString(threshold), "descriptor-text"); |
|||
|
|||
for(Keystore keystore : keystores) { |
|||
append(",", "descriptor-text"); |
|||
replace(getLength(), getLength(), keystore.getScriptName(), List.of(keystore.isValid() ? "descriptor-text" : "descriptor-error", keystore.getScriptName())); |
|||
} |
|||
|
|||
append(MULTISIG.getCloseDescriptor(), "descriptor-text"); |
|||
append(scriptType.getCloseDescriptor(), "descriptor-text"); |
|||
} |
|||
} |
|||
|
|||
public Wallet getWallet() { |
|||
return wallet; |
|||
} |
|||
|
|||
public void clear() { |
|||
super.clear(); |
|||
this.wallet = null; |
|||
setDisable(false); |
|||
setContextMenu(null); |
|||
} |
|||
|
|||
private static class DescriptorContextMenu extends ContextMenu { |
|||
public DescriptorContextMenu(Wallet wallet, DescriptorArea descriptorArea) { |
|||
MenuItem copyvalue = new MenuItem("Copy Value"); |
|||
copyvalue.setOnAction(AE -> { |
|||
hide(); |
|||
ClipboardContent content = new ClipboardContent(); |
|||
content.putString(descriptorArea.getText()); |
|||
Clipboard.getSystemClipboard().setContent(content); |
|||
}); |
|||
getItems().add(copyvalue); |
|||
|
|||
MenuItem copyOutputDescriptor = new MenuItem("Copy Output Descriptor"); |
|||
copyOutputDescriptor.setOnAction(AE -> { |
|||
hide(); |
|||
ClipboardContent content = new ClipboardContent(); |
|||
content.putString(OutputDescriptor.getOutputDescriptor(wallet).toString(true)); |
|||
Clipboard.getSystemClipboard().setContent(content); |
|||
}); |
|||
getItems().add(copyOutputDescriptor); |
|||
this.setStyle("-fx-background-color: -fx-color; -fx-font-family: System; -fx-font-size: 1em;"); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,3 @@ |
|||
.descriptor-text { -fx-fill: #000000 } |
|||
.descriptor-error { -fx-fill: #ca1243 } |
|||
|
Loading…
Reference in new issue