mirror of
https://github.com/sparrowwallet/sparrow.git
synced 2024-12-24 12:46:45 +00:00
make all wallet addresses non-editable once child wallets are added
This commit is contained in:
parent
a3e4342d7d
commit
b0877d94bf
4 changed files with 65 additions and 5 deletions
|
@ -27,7 +27,11 @@ public class TextAreaDialog extends Dialog<String> {
|
||||||
this("");
|
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();
|
final DialogPane dialogPane = new TextAreaDialogPane();
|
||||||
setDialogPane(dialogPane);
|
setDialogPane(dialogPane);
|
||||||
|
|
||||||
|
@ -39,6 +43,7 @@ public class TextAreaDialog extends Dialog<String> {
|
||||||
this.textArea.setMaxWidth(Double.MAX_VALUE);
|
this.textArea.setMaxWidth(Double.MAX_VALUE);
|
||||||
this.textArea.setWrapText(true);
|
this.textArea.setWrapText(true);
|
||||||
this.textArea.getStyleClass().add("fixed-width");
|
this.textArea.getStyleClass().add("fixed-width");
|
||||||
|
this.textArea.setEditable(editable);
|
||||||
hbox.getChildren().add(textArea);
|
hbox.getChildren().add(textArea);
|
||||||
HBox.setHgrow(this.textArea, Priority.ALWAYS);
|
HBox.setHgrow(this.textArea, Priority.ALWAYS);
|
||||||
|
|
||||||
|
@ -49,10 +54,13 @@ public class TextAreaDialog extends Dialog<String> {
|
||||||
AppServices.setStageIcon(dialogPane.getScene().getWindow());
|
AppServices.setStageIcon(dialogPane.getScene().getWindow());
|
||||||
|
|
||||||
dialogPane.getStyleClass().add("text-input-dialog");
|
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);
|
final ButtonType scanButtonType = new javafx.scene.control.ButtonType("Scan QR", ButtonBar.ButtonData.LEFT);
|
||||||
dialogPane.getButtonTypes().add(scanButtonType);
|
dialogPane.getButtonTypes().add(scanButtonType);
|
||||||
|
}
|
||||||
|
|
||||||
Platform.runLater(textArea::requestFocus);
|
Platform.runLater(textArea::requestFocus);
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ import com.sparrowwallet.drongo.wallet.Wallet;
|
||||||
import com.sparrowwallet.sparrow.AppServices;
|
import com.sparrowwallet.sparrow.AppServices;
|
||||||
import com.sparrowwallet.sparrow.EventManager;
|
import com.sparrowwallet.sparrow.EventManager;
|
||||||
import com.sparrowwallet.sparrow.control.*;
|
import com.sparrowwallet.sparrow.control.*;
|
||||||
|
import com.sparrowwallet.sparrow.event.ChildWalletAddedEvent;
|
||||||
import com.sparrowwallet.sparrow.event.StorageEvent;
|
import com.sparrowwallet.sparrow.event.StorageEvent;
|
||||||
import com.sparrowwallet.sparrow.event.TimedEvent;
|
import com.sparrowwallet.sparrow.event.TimedEvent;
|
||||||
import com.sparrowwallet.sparrow.glyphfont.FontAwesome5;
|
import com.sparrowwallet.sparrow.glyphfont.FontAwesome5;
|
||||||
|
@ -161,6 +162,8 @@ public class KeystoreController extends WalletFormController implements Initiali
|
||||||
}
|
}
|
||||||
scanXpubQR.setVisible(!valid);
|
scanXpubQR.setVisible(!valid);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
setInputFieldsDisabled(!walletForm.getWallet().isMasterWallet() || !walletForm.getWallet().getChildWallets().isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setXpubContext(ExtendedKey extendedKey) {
|
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
|
@Subscribe
|
||||||
public void update(SettingsChangedEvent event) {
|
public void update(SettingsChangedEvent event) {
|
||||||
if(walletForm.getWallet().equals(event.getWallet()) && event.getType().equals(SettingsChangedEvent.Type.SCRIPT_TYPE)) {
|
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
|
@FXML
|
||||||
private Button showDescriptorQR;
|
private Button showDescriptorQR;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Button editDescriptor;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Button showDescriptor;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private ComboBox<ScriptType> scriptType;
|
private ComboBox<ScriptType> scriptType;
|
||||||
|
|
||||||
|
@ -190,6 +196,9 @@ public class SettingsController extends WalletFormController implements Initiali
|
||||||
showDescriptorQR.managedProperty().bind(showDescriptorQR.visibleProperty());
|
showDescriptorQR.managedProperty().bind(showDescriptorQR.visibleProperty());
|
||||||
showDescriptorQR.prefHeightProperty().bind(descriptor.prefHeightProperty());
|
showDescriptorQR.prefHeightProperty().bind(descriptor.prefHeightProperty());
|
||||||
showDescriptorQR.visibleProperty().bind(scanDescriptorQR.visibleProperty().not());
|
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 -> {
|
revert.setOnAction(event -> {
|
||||||
keystoreTabs.getTabs().removeAll(keystoreTabs.getTabs());
|
keystoreTabs.getTabs().removeAll(keystoreTabs.getTabs());
|
||||||
|
@ -207,6 +216,7 @@ public class SettingsController extends WalletFormController implements Initiali
|
||||||
});
|
});
|
||||||
|
|
||||||
setFieldsFromWallet(walletForm.getWallet());
|
setFieldsFromWallet(walletForm.getWallet());
|
||||||
|
setInputFieldsDisabled(!walletForm.getWallet().isMasterWallet() || !walletForm.getWallet().getChildWallets().isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void clearKeystoreTabs() {
|
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) {
|
public void showAdvanced(ActionEvent event) {
|
||||||
AdvancedDialog advancedDialog = new AdvancedDialog(walletForm);
|
AdvancedDialog advancedDialog = new AdvancedDialog(walletForm);
|
||||||
Optional<Boolean> optApply = advancedDialog.showAndWait();
|
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
|
@Override
|
||||||
protected String describeKeystore(Keystore keystore) {
|
protected String describeKeystore(Keystore keystore) {
|
||||||
if(!keystore.isValid()) {
|
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) {
|
private void saveWallet(boolean changePassword, boolean suggestChangePassword) {
|
||||||
ECKey existingPubKey = walletForm.getStorage().getEncryptionPubKey();
|
ECKey existingPubKey = walletForm.getStorage().getEncryptionPubKey();
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,8 @@
|
||||||
<Tooltip text="Show as QR code" />
|
<Tooltip text="Show as QR code" />
|
||||||
</tooltip>
|
</tooltip>
|
||||||
</Button>
|
</Button>
|
||||||
<Button text="Edit..." onAction="#editDescriptor" />
|
<Button fx:id="editDescriptor" text="Edit..." onAction="#editDescriptor" />
|
||||||
|
<Button fx:id="showDescriptor" text="Show..." onAction="#showDescriptor" />
|
||||||
</Field>
|
</Field>
|
||||||
</Fieldset>
|
</Fieldset>
|
||||||
</Form>
|
</Form>
|
||||||
|
|
Loading…
Reference in a new issue