make all wallet addresses non-editable once child wallets are added

This commit is contained in:
Craig Raw
2021-08-16 13:33:05 +02:00
parent a3e4342d7d
commit b0877d94bf
4 changed files with 65 additions and 5 deletions
@@ -27,7 +27,11 @@ public class TextAreaDialog extends Dialog<String> {
this("");
}
public TextAreaDialog(@NamedArg("defaultValue") String defaultValue) {
public TextAreaDialog(String defaultValue) {
this(defaultValue, true);
}
public TextAreaDialog(@NamedArg("defaultValue") String defaultValue, @NamedArg("editable") boolean editable) {
final DialogPane dialogPane = new TextAreaDialogPane();
setDialogPane(dialogPane);
@@ -39,6 +43,7 @@ public class TextAreaDialog extends Dialog<String> {
this.textArea.setMaxWidth(Double.MAX_VALUE);
this.textArea.setWrapText(true);
this.textArea.getStyleClass().add("fixed-width");
this.textArea.setEditable(editable);
hbox.getChildren().add(textArea);
HBox.setHgrow(this.textArea, Priority.ALWAYS);
@@ -49,10 +54,13 @@ public class TextAreaDialog extends Dialog<String> {
AppServices.setStageIcon(dialogPane.getScene().getWindow());
dialogPane.getStyleClass().add("text-input-dialog");
dialogPane.getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
dialogPane.getButtonTypes().add(ButtonType.OK);
if(editable) {
dialogPane.getButtonTypes().add(ButtonType.CANCEL);
final ButtonType scanButtonType = new javafx.scene.control.ButtonType("Scan QR", ButtonBar.ButtonData.LEFT);
dialogPane.getButtonTypes().add(scanButtonType);
final ButtonType scanButtonType = new javafx.scene.control.ButtonType("Scan QR", ButtonBar.ButtonData.LEFT);
dialogPane.getButtonTypes().add(scanButtonType);
}
Platform.runLater(textArea::requestFocus);
@@ -8,6 +8,7 @@ import com.sparrowwallet.drongo.wallet.Wallet;
import com.sparrowwallet.sparrow.AppServices;
import com.sparrowwallet.sparrow.EventManager;
import com.sparrowwallet.sparrow.control.*;
import com.sparrowwallet.sparrow.event.ChildWalletAddedEvent;
import com.sparrowwallet.sparrow.event.StorageEvent;
import com.sparrowwallet.sparrow.event.TimedEvent;
import com.sparrowwallet.sparrow.glyphfont.FontAwesome5;
@@ -161,6 +162,8 @@ public class KeystoreController extends WalletFormController implements Initiali
}
scanXpubQR.setVisible(!valid);
});
setInputFieldsDisabled(!walletForm.getWallet().isMasterWallet() || !walletForm.getWallet().getChildWallets().isEmpty());
}
private void setXpubContext(ExtendedKey extendedKey) {
@@ -408,6 +411,20 @@ public class KeystoreController extends WalletFormController implements Initiali
}
}
private void setInputFieldsDisabled(boolean disabled) {
setEditable(fingerprint, !disabled);
setEditable(derivation, !disabled);
setEditable(xpub, !disabled);
importButton.setDisable(disabled);
}
@Subscribe
public void childWalletAdded(ChildWalletAddedEvent event) {
if(event.getMasterWalletId().equals(walletForm.getWalletId())) {
setInputFieldsDisabled(true);
}
}
@Subscribe
public void update(SettingsChangedEvent event) {
if(walletForm.getWallet().equals(event.getWallet()) && event.getType().equals(SettingsChangedEvent.Type.SCRIPT_TYPE)) {
@@ -53,6 +53,12 @@ public class SettingsController extends WalletFormController implements Initiali
@FXML
private Button showDescriptorQR;
@FXML
private Button editDescriptor;
@FXML
private Button showDescriptor;
@FXML
private ComboBox<ScriptType> scriptType;
@@ -190,6 +196,9 @@ public class SettingsController extends WalletFormController implements Initiali
showDescriptorQR.managedProperty().bind(showDescriptorQR.visibleProperty());
showDescriptorQR.prefHeightProperty().bind(descriptor.prefHeightProperty());
showDescriptorQR.visibleProperty().bind(scanDescriptorQR.visibleProperty().not());
editDescriptor.managedProperty().bind(editDescriptor.visibleProperty());
showDescriptor.managedProperty().bind(showDescriptor.visibleProperty());
showDescriptor.visibleProperty().bind(editDescriptor.visibleProperty().not());
revert.setOnAction(event -> {
keystoreTabs.getTabs().removeAll(keystoreTabs.getTabs());
@@ -207,6 +216,7 @@ public class SettingsController extends WalletFormController implements Initiali
});
setFieldsFromWallet(walletForm.getWallet());
setInputFieldsDisabled(!walletForm.getWallet().isMasterWallet() || !walletForm.getWallet().getChildWallets().isEmpty());
}
private void clearKeystoreTabs() {
@@ -389,6 +399,16 @@ public class SettingsController extends WalletFormController implements Initiali
}
}
public void showDescriptor(ActionEvent event) {
OutputDescriptor outputDescriptor = OutputDescriptor.getOutputDescriptor(walletForm.getWallet());
String outputDescriptorString = outputDescriptor.toString(walletForm.getWallet().isValid());
TextAreaDialog dialog = new TextAreaDialog(outputDescriptorString, false);
dialog.setTitle("Show wallet output descriptor");
dialog.getDialogPane().setHeaderText("The wallet configuration is specified in the output descriptor.\nThis wallet is no longer editable - create a new wallet to change the descriptor.");
dialog.showAndWait();
}
public void showAdvanced(ActionEvent event) {
AdvancedDialog advancedDialog = new AdvancedDialog(walletForm);
Optional<Boolean> optApply = advancedDialog.showAndWait();
@@ -422,6 +442,13 @@ public class SettingsController extends WalletFormController implements Initiali
}
}
private void setInputFieldsDisabled(boolean disabled) {
policyType.setDisable(disabled);
scriptType.setDisable(disabled);
multisigControl.setDisable(disabled);
editDescriptor.setVisible(!disabled);
}
@Override
protected String describeKeystore(Keystore keystore) {
if(!keystore.isValid()) {
@@ -484,6 +511,13 @@ public class SettingsController extends WalletFormController implements Initiali
}
}
@Subscribe
public void childWalletAdded(ChildWalletAddedEvent event) {
if(event.getMasterWalletId().equals(walletForm.getWalletId())) {
setInputFieldsDisabled(true);
}
}
private void saveWallet(boolean changePassword, boolean suggestChangePassword) {
ECKey existingPubKey = walletForm.getStorage().getEncryptionPubKey();