11 changed files with 262 additions and 26 deletions
@ -0,0 +1,85 @@ |
|||||
|
package com.sparrowwallet.sparrow.paynym; |
||||
|
|
||||
|
import com.google.common.eventbus.Subscribe; |
||||
|
import com.sparrowwallet.drongo.KeyPurpose; |
||||
|
import com.sparrowwallet.drongo.protocol.ScriptType; |
||||
|
import com.sparrowwallet.drongo.wallet.WalletNode; |
||||
|
import com.sparrowwallet.sparrow.control.AddressTreeTable; |
||||
|
import com.sparrowwallet.sparrow.event.WalletEntryLabelsChangedEvent; |
||||
|
import com.sparrowwallet.sparrow.event.WalletHistoryChangedEvent; |
||||
|
import com.sparrowwallet.sparrow.wallet.Entry; |
||||
|
import com.sparrowwallet.sparrow.wallet.WalletForm; |
||||
|
import javafx.collections.FXCollections; |
||||
|
import javafx.fxml.FXML; |
||||
|
import javafx.scene.control.ComboBox; |
||||
|
import javafx.util.StringConverter; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Optional; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
public class PayNymAddressesController { |
||||
|
|
||||
|
@FXML |
||||
|
private ComboBox<WalletForm> payNymWalletForms; |
||||
|
|
||||
|
@FXML |
||||
|
private AddressTreeTable receiveTable; |
||||
|
|
||||
|
@FXML |
||||
|
private AddressTreeTable sendTable; |
||||
|
|
||||
|
public void initializeView(WalletForm walletForm) { |
||||
|
payNymWalletForms.setItems(FXCollections.observableList(walletForm.getNestedWalletForms().stream().filter(nested -> nested.getWallet().isBip47()).collect(Collectors.toList()))); |
||||
|
payNymWalletForms.setConverter(new StringConverter<>() { |
||||
|
@Override |
||||
|
public String toString(WalletForm nested) { |
||||
|
return nested == null ? "" : nested.getWallet().getDisplayName(); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public WalletForm fromString(String string) { |
||||
|
return null; |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
Optional<WalletForm> optInitial = walletForm.getNestedWalletForms().stream().filter(nested -> nested.getWallet().isBip47() && nested.getWallet().getScriptType() == ScriptType.P2WPKH).findFirst(); |
||||
|
if(optInitial.isPresent()) { |
||||
|
optInitial.get().getAccountEntries().clear(); |
||||
|
receiveTable.initialize(optInitial.get().getNodeEntry(KeyPurpose.RECEIVE)); |
||||
|
sendTable.initialize(optInitial.get().getNodeEntry(KeyPurpose.SEND)); |
||||
|
payNymWalletForms.getSelectionModel().select(optInitial.get()); |
||||
|
} |
||||
|
|
||||
|
payNymWalletForms.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, selected) -> { |
||||
|
selected.getAccountEntries().clear(); |
||||
|
receiveTable.updateAll(selected.getNodeEntry(KeyPurpose.RECEIVE)); |
||||
|
sendTable.updateAll(selected.getNodeEntry(KeyPurpose.SEND)); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
@Subscribe |
||||
|
public void walletHistoryChanged(WalletHistoryChangedEvent event) { |
||||
|
if(event.getWallet().equals(payNymWalletForms.getValue().getWallet())) { |
||||
|
List<WalletNode> receiveNodes = event.getReceiveNodes(); |
||||
|
if(!receiveNodes.isEmpty()) { |
||||
|
receiveTable.updateHistory(receiveNodes); |
||||
|
} |
||||
|
|
||||
|
List<WalletNode> sendNodes = event.getChangeNodes(); |
||||
|
if(!sendNodes.isEmpty()) { |
||||
|
sendTable.updateHistory(sendNodes); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Subscribe |
||||
|
public void walletEntryLabelChanged(WalletEntryLabelsChangedEvent event) { |
||||
|
if(event.getWallet().equals(payNymWalletForms.getValue().getWallet())) { |
||||
|
for(Entry entry : event.getEntries()) { |
||||
|
receiveTable.updateLabel(entry); |
||||
|
sendTable.updateLabel(entry); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,45 @@ |
|||||
|
package com.sparrowwallet.sparrow.paynym; |
||||
|
|
||||
|
import com.sparrowwallet.sparrow.AppServices; |
||||
|
import com.sparrowwallet.sparrow.EventManager; |
||||
|
import com.sparrowwallet.sparrow.wallet.WalletForm; |
||||
|
import javafx.fxml.FXMLLoader; |
||||
|
import javafx.scene.control.ButtonBar; |
||||
|
import javafx.scene.control.ButtonType; |
||||
|
import javafx.scene.control.Dialog; |
||||
|
import javafx.scene.control.DialogPane; |
||||
|
|
||||
|
import java.io.IOException; |
||||
|
|
||||
|
public class PayNymAddressesDialog extends Dialog<Boolean> { |
||||
|
public PayNymAddressesDialog(WalletForm walletForm) { |
||||
|
final DialogPane dialogPane = getDialogPane(); |
||||
|
AppServices.setStageIcon(dialogPane.getScene().getWindow()); |
||||
|
AppServices.onEscapePressed(dialogPane.getScene(), this::close); |
||||
|
|
||||
|
try { |
||||
|
FXMLLoader payNymLoader = new FXMLLoader(AppServices.class.getResource("paynym/paynymaddresses.fxml")); |
||||
|
dialogPane.setContent(payNymLoader.load()); |
||||
|
PayNymAddressesController controller = payNymLoader.getController(); |
||||
|
controller.initializeView(walletForm); |
||||
|
|
||||
|
EventManager.get().register(controller); |
||||
|
|
||||
|
final ButtonType doneButtonType = new javafx.scene.control.ButtonType("Done", ButtonBar.ButtonData.OK_DONE); |
||||
|
dialogPane.getButtonTypes().add(doneButtonType); |
||||
|
|
||||
|
setOnCloseRequest(event -> { |
||||
|
EventManager.get().unregister(controller); |
||||
|
}); |
||||
|
|
||||
|
setResultConverter(dialogButton -> dialogButton == doneButtonType ? Boolean.TRUE : Boolean.FALSE); |
||||
|
|
||||
|
dialogPane.setPrefWidth(800); |
||||
|
dialogPane.setPrefHeight(600); |
||||
|
|
||||
|
setResizable(true); |
||||
|
} catch(IOException e) { |
||||
|
throw new RuntimeException(e); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,66 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
|
||||
|
<?import java.lang.*?> |
||||
|
<?import java.util.*?> |
||||
|
<?import javafx.scene.*?> |
||||
|
<?import javafx.scene.control.*?> |
||||
|
<?import javafx.scene.layout.*?> |
||||
|
|
||||
|
<?import javafx.geometry.Insets?> |
||||
|
<?import com.sparrowwallet.sparrow.control.AddressTreeTable?> |
||||
|
<?import org.controlsfx.glyphfont.Glyph?> |
||||
|
|
||||
|
<?import tornadofx.control.Fieldset?> |
||||
|
<?import tornadofx.control.Form?> |
||||
|
<?import tornadofx.control.Field?> |
||||
|
<?import javafx.scene.image.ImageView?> |
||||
|
<?import javafx.scene.image.Image?> |
||||
|
<StackPane stylesheets="@../wallet/addresses.css, @../wallet/wallet.css, @paynym.css, @../general.css" styleClass="paynym-pane" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.sparrowwallet.sparrow.paynym.PayNymAddressesController"> |
||||
|
<VBox> |
||||
|
<HBox styleClass="title-area"> |
||||
|
<HBox alignment="CENTER_LEFT"> |
||||
|
<Label text="PayNym Addresses" styleClass="title-label" /> |
||||
|
</HBox> |
||||
|
<Region HBox.hgrow="ALWAYS"/> |
||||
|
<ImageView AnchorPane.rightAnchor="0"> |
||||
|
<Image url="/image/paynym.png" requestedWidth="50" requestedHeight="50" smooth="false" /> |
||||
|
</ImageView> |
||||
|
</HBox> |
||||
|
<BorderPane> |
||||
|
<padding> |
||||
|
<Insets left="25" right="25" bottom="25" /> |
||||
|
</padding> |
||||
|
<center> |
||||
|
<VBox spacing="15"> |
||||
|
<Form GridPane.columnIndex="0" GridPane.rowIndex="0"> |
||||
|
<Fieldset inputGrow="SOMETIMES" text="" styleClass="header"> |
||||
|
<Field text="PayNym:"> |
||||
|
<ComboBox fx:id="payNymWalletForms" /> |
||||
|
</Field> |
||||
|
</Fieldset> |
||||
|
</Form> |
||||
|
<BorderPane GridPane.columnIndex="0" GridPane.rowIndex="1"> |
||||
|
<top> |
||||
|
<HBox alignment="CENTER_LEFT"> |
||||
|
<Label styleClass="addresses-treetable-label" text="Receive Addresses"/> |
||||
|
</HBox> |
||||
|
</top> |
||||
|
<center> |
||||
|
<AddressTreeTable fx:id="receiveTable" maxHeight="160" styleClass="bip47" /> |
||||
|
</center> |
||||
|
</BorderPane> |
||||
|
<BorderPane GridPane.columnIndex="0" GridPane.rowIndex="2"> |
||||
|
<top> |
||||
|
<HBox alignment="CENTER_LEFT"> |
||||
|
<Label styleClass="addresses-treetable-label" text="Send Addresses"/> |
||||
|
</HBox> |
||||
|
</top> |
||||
|
<center> |
||||
|
<AddressTreeTable fx:id="sendTable" maxHeight="160" styleClass="bip47" /> |
||||
|
</center> |
||||
|
</BorderPane> |
||||
|
</VBox> |
||||
|
</center> |
||||
|
</BorderPane> |
||||
|
</VBox> |
||||
|
</StackPane> |
Loading…
Reference in new issue