Craig Raw
3 years ago
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