1
0
Fork 0
mirror of https://github.com/ACINQ/eclair.git synced 2025-03-27 02:37:06 +01:00

gui: add payment request to send/receive dialogs

This commit is contained in:
sstone 2016-08-22 16:58:30 +02:00
parent 6ba11d37a4
commit c7145d6dbc
5 changed files with 69 additions and 37 deletions

View file

@ -1,8 +1,9 @@
package fr.acinq.eclair.gui
import javafx.event.{ActionEvent, EventHandler}
import javafx.geometry.{Insets, Pos}
import javafx.scene.Scene
import javafx.scene.control.{Label, TextField}
import javafx.scene.{Node, Scene}
import javafx.scene.control.{Button, Label, TextArea, TextField}
import javafx.scene.layout.GridPane
import javafx.stage.{Modality, Stage, StageStyle}
@ -13,12 +14,12 @@ class DialogReceive(primaryStage: Stage, handlers: Handlers) extends Stage() {
initModality(Modality.WINDOW_MODAL)
initStyle(StageStyle.UTILITY)
initOwner(primaryStage)
setWidth(400)
setHeight(60)
setWidth(900)
setHeight(300)
// center on parent
setX(primaryStage.getX() + primaryStage.getWidth() / 2 - getWidth() / 2)
setY(primaryStage.getY() + primaryStage.getHeight() / 2 - getHeight() / 2)
setTitle("Receive")
setTitle("Receive Payment")
setResizable(false)
val grid = new GridPane()
@ -27,14 +28,39 @@ class DialogReceive(primaryStage: Stage, handlers: Handlers) extends Stage() {
grid.setVgap(10)
grid.setPadding(new Insets(20, 5, 20, 5))
val labelH = new Label("H")
grid.add(labelH, 0, 0)
val labelAmountMsat = new Label("amount (msat)")
grid.add(labelAmountMsat, 0, 0)
val textFieldH = new TextField()
textFieldH.setEditable(false)
grid.add(textFieldH, 1, 0)
val textFieldAmountMsat = new TextField()
grid.add(textFieldAmountMsat, 1, 0)
handlers.getH(textFieldH)
val labelPaymentRequest = new Label("Payment Request")
grid.add(labelPaymentRequest, 0, 1)
val textAreaPaymentRequest = new TextArea()
textAreaPaymentRequest.setWrapText(true)
textAreaPaymentRequest.setPrefRowCount(2)
textAreaPaymentRequest.setPrefColumnCount(40)
textAreaPaymentRequest.setEditable(false)
grid.add(textAreaPaymentRequest, 1, 1)
val btn = new Button("Generate")
btn.setOnAction(new EventHandler[ActionEvent] {
override def handle(event: ActionEvent): Unit = {
handlers.getPaymentRequest(textFieldAmountMsat.getText.toLong, textAreaPaymentRequest)
}
})
grid.add(btn, 1, 2)
// val labelH = new Label("H")
// grid.add(labelH, 0, 0)
//
// val textFieldH = new TextField()
// textFieldH.setEditable(false)
// grid.add(textFieldH, 1, 0)
//
//
//
// handlers.getH(textFieldH)
val scene = new Scene(grid)
setScene(scene)

View file

@ -3,7 +3,7 @@ package fr.acinq.eclair.gui
import javafx.event.{ActionEvent, EventHandler}
import javafx.geometry.{Insets, Pos}
import javafx.scene.{Node, Scene}
import javafx.scene.control.{Button, Label, TextField}
import javafx.scene.control.{Button, Label, TextArea, TextField}
import javafx.scene.layout.GridPane
import javafx.stage.{Modality, Stage, StageStyle}
@ -14,12 +14,12 @@ class DialogSend(primaryStage: Stage, handlers: Handlers) extends Stage() {
initModality(Modality.WINDOW_MODAL)
initStyle(StageStyle.UTILITY)
initOwner(primaryStage)
setWidth(300)
setWidth(800)
setHeight(300)
// center on parent
setX(primaryStage.getX() + primaryStage.getWidth() / 2 - getWidth() / 2)
setY(primaryStage.getY() + primaryStage.getHeight() / 2 - getHeight() / 2)
setTitle("Send")
setTitle("Pay")
setResizable(false)
val grid = new GridPane()
@ -28,34 +28,28 @@ class DialogSend(primaryStage: Stage, handlers: Handlers) extends Stage() {
grid.setVgap(10)
grid.setPadding(new Insets(25, 25, 25, 25))
val labelNodeId = new Label("NodeId")
grid.add(labelNodeId, 0, 0)
val textFieldNodeId = new TextField()
grid.add(textFieldNodeId, 1, 0)
//
val labelPaymentRequest = new Label("PaymentRequest")
grid.add(labelPaymentRequest, 0, 0)
val labelH = new Label("H")
grid.add(labelH, 0, 1)
val textFieldH = new TextField()
grid.add(textFieldH, 1, 1)
val labelAmountMsat = new Label("amount (msat)")
grid.add(labelAmountMsat, 0, 2)
val textFieldAmountMsat = new TextField()
grid.add(textFieldAmountMsat, 1, 2)
val textAreaPaymentRequest = new TextArea()
textAreaPaymentRequest.setPrefColumnCount(40)
textAreaPaymentRequest.setPrefRowCount(2)
textAreaPaymentRequest.setWrapText(true)
grid.add(textAreaPaymentRequest, 1, 0)
val btn = new Button("Send")
btn.setOnAction(new EventHandler[ActionEvent] {
override def handle(event: ActionEvent): Unit = {
handlers.send(textFieldNodeId.getText, textFieldH.getText, textFieldAmountMsat.getText)
val Array(nodeId, amount, hash) = textAreaPaymentRequest.getText.split(":")
handlers.send(nodeId, hash, amount)
event.getSource.asInstanceOf[Node].getScene.getWindow.hide()
}
})
// click on enter
btn.defaultButtonProperty().bind(btn.focusedProperty())
grid.add(btn, 1, 3)
grid.add(btn, 1, 1)
val scene = new Scene(grid)
setScene(scene)

View file

@ -18,6 +18,7 @@ class DialogSplash(primaryStage: Stage) extends Stage() {
setResizable(false)
val image = new Image("/eclair01.png", true)
primaryStage.getIcons().add(image)
val view = new ImageView(image)
val pane = new StackPane()

View file

@ -2,7 +2,7 @@ package fr.acinq.eclair.gui
import javafx.application.Platform
import javafx.scene.control.TextField
import javafx.scene.control.{TextArea, TextField}
import fr.acinq.bitcoin.BinaryData
import fr.acinq.eclair.io.Client
@ -44,4 +44,15 @@ class Handlers(setup: Setup) extends Logging {
}
}
def getPaymentRequest(amountMsat: Long, textField: TextArea): Unit = {
import akka.pattern.ask
(paymentHandler ? 'genh).mapTo[BinaryData].map { h =>
Platform.runLater(new Runnable() {
override def run(): Unit = {
textField.setText(s"${Globals.Node.id}:$amountMsat:${h.toString()}")
}
})
}
}
}

View file

@ -30,13 +30,13 @@ class MainWindow extends Application {
val root = new BorderPane()
val menuBar = new MenuBar()
val menuFile = new Menu("File")
val menuChannels = new Menu("Channels")
val itemConnect = new MenuItem("Open channel")
val itemSend = new MenuItem("Send")
val itemReceive = new MenuItem("Receive")
val itemSend = new MenuItem("Pay")
val itemReceive = new MenuItem("Receive payment")
menuFile.getItems.addAll(itemConnect, new SeparatorMenuItem(), itemSend, itemReceive)
menuBar.getMenus().addAll(menuFile)
menuChannels.getItems.addAll(itemConnect, new SeparatorMenuItem(), itemSend, itemReceive)
menuBar.getMenus().addAll(menuChannels)
root.setTop(menuBar)
val tabChannels = new Tab("Channels")