From b8820b3f44d70f73e7b13d9654286458581c2193 Mon Sep 17 00:00:00 2001 From: QcMrHyde Date: Tue, 13 May 2025 23:59:57 -0400 Subject: [PATCH] -Adds Joinstr to the Tool menu -Adds Joinstr main display and some controls --- .../sparrowwallet/sparrow/AppController.java | 44 ++++++++- .../sparrow/joinstr/HistoryController.java | 8 ++ .../sparrow/joinstr/JoinstrController.java | 96 +++++++++++++++++++ .../sparrow/joinstr/JoinstrDisplay.java | 9 ++ .../sparrow/joinstr/JoinstrForm.java | 34 +++++++ .../joinstr/JoinstrFormController.java | 20 ++++ .../sparrow/joinstr/MyPoolsController.java | 8 ++ .../sparrow/joinstr/NewPoolController.java | 8 ++ .../sparrow/joinstr/OtherPoolsController.java | 16 ++++ .../joinstr/control/JoinstrPoolList.java | 48 ++++++++++ .../joinstr/control/JoinstrPoolListItem.java | 35 +++++++ .../com/sparrowwallet/sparrow/app.fxml | 4 +- .../sparrow/joinstr/control/control.css | 18 ++++ .../joinstr/control/joinstrpoollist.fxml | 21 ++++ .../joinstr/control/joinstrpoollistitem.fxml | 7 ++ .../sparrow/joinstr/history.fxml | 10 ++ .../sparrowwallet/sparrow/joinstr/joinstr.css | 34 +++++++ .../sparrow/joinstr/joinstr.fxml | 63 ++++++++++++ .../sparrow/joinstr/my_pools.fxml | 10 ++ .../sparrow/joinstr/new_pool.fxml | 10 ++ .../sparrow/joinstr/other_pools.fxml | 38 ++++++++ 21 files changed, 538 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/sparrowwallet/sparrow/joinstr/HistoryController.java create mode 100644 src/main/java/com/sparrowwallet/sparrow/joinstr/JoinstrController.java create mode 100644 src/main/java/com/sparrowwallet/sparrow/joinstr/JoinstrDisplay.java create mode 100644 src/main/java/com/sparrowwallet/sparrow/joinstr/JoinstrForm.java create mode 100644 src/main/java/com/sparrowwallet/sparrow/joinstr/JoinstrFormController.java create mode 100644 src/main/java/com/sparrowwallet/sparrow/joinstr/MyPoolsController.java create mode 100644 src/main/java/com/sparrowwallet/sparrow/joinstr/NewPoolController.java create mode 100644 src/main/java/com/sparrowwallet/sparrow/joinstr/OtherPoolsController.java create mode 100644 src/main/java/com/sparrowwallet/sparrow/joinstr/control/JoinstrPoolList.java create mode 100644 src/main/java/com/sparrowwallet/sparrow/joinstr/control/JoinstrPoolListItem.java create mode 100644 src/main/resources/com/sparrowwallet/sparrow/joinstr/control/control.css create mode 100644 src/main/resources/com/sparrowwallet/sparrow/joinstr/control/joinstrpoollist.fxml create mode 100644 src/main/resources/com/sparrowwallet/sparrow/joinstr/control/joinstrpoollistitem.fxml create mode 100644 src/main/resources/com/sparrowwallet/sparrow/joinstr/history.fxml create mode 100644 src/main/resources/com/sparrowwallet/sparrow/joinstr/joinstr.css create mode 100644 src/main/resources/com/sparrowwallet/sparrow/joinstr/joinstr.fxml create mode 100644 src/main/resources/com/sparrowwallet/sparrow/joinstr/my_pools.fxml create mode 100644 src/main/resources/com/sparrowwallet/sparrow/joinstr/new_pool.fxml create mode 100644 src/main/resources/com/sparrowwallet/sparrow/joinstr/other_pools.fxml diff --git a/src/main/java/com/sparrowwallet/sparrow/AppController.java b/src/main/java/com/sparrowwallet/sparrow/AppController.java index baf5c498..112bd78b 100644 --- a/src/main/java/com/sparrowwallet/sparrow/AppController.java +++ b/src/main/java/com/sparrowwallet/sparrow/AppController.java @@ -19,6 +19,8 @@ import com.sparrowwallet.sparrow.glyphfont.FontAwesome5; import com.sparrowwallet.sparrow.io.*; import com.sparrowwallet.sparrow.io.bbqr.BBQR; import com.sparrowwallet.sparrow.io.bbqr.BBQRType; +import com.sparrowwallet.sparrow.joinstr.JoinstrController; +import com.sparrowwallet.sparrow.joinstr.JoinstrForm; import com.sparrowwallet.sparrow.net.ElectrumServer; import com.sparrowwallet.sparrow.net.ServerType; import com.sparrowwallet.sparrow.settings.SettingsGroup; @@ -49,8 +51,6 @@ import javafx.geometry.Side; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.*; -import javafx.scene.image.Image; -import javafx.scene.image.ImageView; import javafx.scene.input.*; import javafx.scene.layout.*; import javafx.scene.paint.Color; @@ -537,6 +537,46 @@ public class AppController implements Initializable { aboutStage.show(); } + public void showJoinstr(ActionEvent event) { + Stage joinstrStage = getJoinstrStage(); + joinstrStage.show(); + } + + private Stage getJoinstrStage() { + try { + FXMLLoader loader = new FXMLLoader(AppController.class.getResource("joinstr/joinstr.fxml")); + BorderPane root = loader.load(); + + if(OsType.getCurrent() == OsType.WINDOWS) { + root.setBorder(new Border(new BorderStroke(Color.DARKGRAY, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, BorderWidths.DEFAULT))); + } + + Stage stage = new Stage(StageStyle.DECORATED); + stage.setTitle("Joinstr with " + getSelectedWalletForm().getWallet().getFullName()); + stage.initOwner(tabs.getScene().getWindow()); + + JoinstrController controller = loader.getController(); + JoinstrForm joinstrForm = new JoinstrForm(getSelectedWalletForm().getStorage(), getSelectedWalletForm().getWallet()); + controller.setJoinstrForm(joinstrForm); + + Scene scene = new Scene(root); + AppServices.onEscapePressed(scene, stage::close); + stage.setScene(scene); + controller.setStage(stage); + controller.initializeView(); + setStageIcon(stage); + stage.setOnShowing(event -> { + AppServices.moveToActiveWindowScreen(stage, 600, 460); + }); + + return stage; + } catch(IOException e) { + log.error("Error loading about stage", e); + } + + return null; + } + private Stage getAboutStage() { try { FXMLLoader loader = new FXMLLoader(AppController.class.getResource("about.fxml")); diff --git a/src/main/java/com/sparrowwallet/sparrow/joinstr/HistoryController.java b/src/main/java/com/sparrowwallet/sparrow/joinstr/HistoryController.java new file mode 100644 index 00000000..e7c2037d --- /dev/null +++ b/src/main/java/com/sparrowwallet/sparrow/joinstr/HistoryController.java @@ -0,0 +1,8 @@ +package com.sparrowwallet.sparrow.joinstr; + +public class HistoryController extends JoinstrFormController { + @Override + public void initializeView() { + + } +} diff --git a/src/main/java/com/sparrowwallet/sparrow/joinstr/JoinstrController.java b/src/main/java/com/sparrowwallet/sparrow/joinstr/JoinstrController.java new file mode 100644 index 00000000..908ddbd5 --- /dev/null +++ b/src/main/java/com/sparrowwallet/sparrow/joinstr/JoinstrController.java @@ -0,0 +1,96 @@ +package com.sparrowwallet.sparrow.joinstr; + +import com.sparrowwallet.sparrow.AppServices; + +import java.io.IOException; +import java.net.URL; +import java.util.Locale; + +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Node; +import javafx.scene.control.Toggle; +import javafx.scene.control.ToggleButton; +import javafx.scene.control.ToggleGroup; +import javafx.scene.layout.StackPane; +import javafx.scene.layout.VBox; +import javafx.stage.Stage; + +public class JoinstrController extends JoinstrFormController { + + private Stage stage; + + @FXML + private StackPane joinstrPane; + + @FXML + private VBox joinstrMenuBox; + + @FXML + private ToggleGroup joinstrMenu; + + + public void initializeView() { + joinstrMenu.selectedToggleProperty().addListener((observable, oldValue, selectedToggle) -> { + if(selectedToggle == null) { + oldValue.setSelected(true); + return; + } + + JoinstrDisplay display = (JoinstrDisplay)selectedToggle.getUserData(); + + boolean existing = false; + for(Node joinstrDisplay : joinstrPane.getChildren()) { + if(joinstrDisplay.getUserData().equals(display)) { + existing = true; + joinstrDisplay.setViewOrder(0); + } else if(display != JoinstrDisplay.LOCK) { + joinstrDisplay.setViewOrder(1); + } + } + + try { + if(!existing) { + URL url = AppServices.class.getResource("joinstr/" + display.toString().toLowerCase(Locale.ROOT) + ".fxml"); + if(url == null) { + throw new IllegalStateException("Cannot find joinstr/" + display.toString().toLowerCase(Locale.ROOT) + ".fxml"); + } + + FXMLLoader displayLoader = new FXMLLoader(url); + Node joinstrDisplay = displayLoader.load(); + + joinstrDisplay.setUserData(display); + joinstrDisplay.setViewOrder(1); + + JoinstrFormController controller = displayLoader.getController(); + JoinstrForm joinstrForm = getJoinstrForm(); + controller.setJoinstrForm(joinstrForm); + + joinstrPane.getChildren().add(joinstrDisplay); + } + } catch (IOException e) { + throw new IllegalStateException("Can't find pane", e); + } + + }); + + for(Toggle toggle : joinstrMenu.getToggles()) { + ToggleButton toggleButton = (ToggleButton) toggle; + toggleButton.managedProperty().bind(toggleButton.visibleProperty()); + } + + joinstrMenuBox.managedProperty().bind(joinstrMenuBox.visibleProperty()); + joinstrMenuBox.visibleProperty().bind(getJoinstrForm().lockedProperty().not()); + + } + + public void setStage(Stage stage) { + this.stage = stage; + } + + public void close(ActionEvent event) { + stage.close(); + } + +} diff --git a/src/main/java/com/sparrowwallet/sparrow/joinstr/JoinstrDisplay.java b/src/main/java/com/sparrowwallet/sparrow/joinstr/JoinstrDisplay.java new file mode 100644 index 00000000..bf23f146 --- /dev/null +++ b/src/main/java/com/sparrowwallet/sparrow/joinstr/JoinstrDisplay.java @@ -0,0 +1,9 @@ +package com.sparrowwallet.sparrow.joinstr; + +public enum JoinstrDisplay { + NEW_POOL, + MY_POOLS, + OTHER_POOLS, + HISTORY, + LOCK +} diff --git a/src/main/java/com/sparrowwallet/sparrow/joinstr/JoinstrForm.java b/src/main/java/com/sparrowwallet/sparrow/joinstr/JoinstrForm.java new file mode 100644 index 00000000..03807dfd --- /dev/null +++ b/src/main/java/com/sparrowwallet/sparrow/joinstr/JoinstrForm.java @@ -0,0 +1,34 @@ +package com.sparrowwallet.sparrow.joinstr; + +import com.sparrowwallet.drongo.wallet.Wallet; +import com.sparrowwallet.sparrow.io.Storage; + +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.SimpleBooleanProperty; + +public class JoinstrForm { + + private final BooleanProperty lockedProperty = new SimpleBooleanProperty(false); + + private final Storage storage; + protected Wallet wallet; + + public JoinstrForm(Storage storage, Wallet currentWallet) { + this.storage = storage; + this.wallet = currentWallet; + } + + public Wallet getWallet() { + return wallet; + } + + public Storage getStorage() { + return storage; + } + + public BooleanProperty lockedProperty() { + return lockedProperty; + } + + +} diff --git a/src/main/java/com/sparrowwallet/sparrow/joinstr/JoinstrFormController.java b/src/main/java/com/sparrowwallet/sparrow/joinstr/JoinstrFormController.java new file mode 100644 index 00000000..b3e8190c --- /dev/null +++ b/src/main/java/com/sparrowwallet/sparrow/joinstr/JoinstrFormController.java @@ -0,0 +1,20 @@ +package com.sparrowwallet.sparrow.joinstr; + +import com.sparrowwallet.sparrow.BaseController; + +public abstract class JoinstrFormController extends BaseController { + + public JoinstrForm joinstrForm; + + public JoinstrForm getJoinstrForm() { + return joinstrForm; + } + + public void setJoinstrForm(JoinstrForm joinstrForm) { + this.joinstrForm = joinstrForm; + initializeView(); + } + + public abstract void initializeView(); + +} diff --git a/src/main/java/com/sparrowwallet/sparrow/joinstr/MyPoolsController.java b/src/main/java/com/sparrowwallet/sparrow/joinstr/MyPoolsController.java new file mode 100644 index 00000000..2837d9a5 --- /dev/null +++ b/src/main/java/com/sparrowwallet/sparrow/joinstr/MyPoolsController.java @@ -0,0 +1,8 @@ +package com.sparrowwallet.sparrow.joinstr; + +public class MyPoolsController extends JoinstrFormController { + @Override + public void initializeView() { + + } +} diff --git a/src/main/java/com/sparrowwallet/sparrow/joinstr/NewPoolController.java b/src/main/java/com/sparrowwallet/sparrow/joinstr/NewPoolController.java new file mode 100644 index 00000000..2ff940f3 --- /dev/null +++ b/src/main/java/com/sparrowwallet/sparrow/joinstr/NewPoolController.java @@ -0,0 +1,8 @@ +package com.sparrowwallet.sparrow.joinstr; + +public class NewPoolController extends JoinstrFormController { + @Override + public void initializeView() { + + } +} diff --git a/src/main/java/com/sparrowwallet/sparrow/joinstr/OtherPoolsController.java b/src/main/java/com/sparrowwallet/sparrow/joinstr/OtherPoolsController.java new file mode 100644 index 00000000..cbfa7c56 --- /dev/null +++ b/src/main/java/com/sparrowwallet/sparrow/joinstr/OtherPoolsController.java @@ -0,0 +1,16 @@ +package com.sparrowwallet.sparrow.joinstr; + +import com.sparrowwallet.sparrow.joinstr.control.JoinstrPoolList; + +import javafx.fxml.FXML; + +public class OtherPoolsController extends JoinstrFormController { + + @FXML + private JoinstrPoolList joinstrPoolList; + + @Override + public void initializeView() { + joinstrPoolList.fillList(); + } +} diff --git a/src/main/java/com/sparrowwallet/sparrow/joinstr/control/JoinstrPoolList.java b/src/main/java/com/sparrowwallet/sparrow/joinstr/control/JoinstrPoolList.java new file mode 100644 index 00000000..e38d33c0 --- /dev/null +++ b/src/main/java/com/sparrowwallet/sparrow/joinstr/control/JoinstrPoolList.java @@ -0,0 +1,48 @@ +package com.sparrowwallet.sparrow.joinstr.control; + +import com.sparrowwallet.sparrow.AppController; + +import java.io.IOException; + +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.layout.VBox; +import javafx.scene.layout.Pane; + +public class JoinstrPoolList extends Pane { + + @FXML + private VBox listVBox; + + public JoinstrPoolList() { + + FXMLLoader loader = new FXMLLoader(AppController.class.getResource("joinstr/control/joinstrpoollist.fxml")); + loader.setRoot(this); + loader.setController(this); + + try { + loader.load(); + + } catch (IOException e) { + throw new RuntimeException(e); + } + + } + + public void fillList() { + + JoinstrPoolListItem listItem1 = new JoinstrPoolListItem(); + listItem1.setLabel("Pool #1"); + listVBox.getChildren().add(listItem1); + + JoinstrPoolListItem listItem2 = new JoinstrPoolListItem(); + listItem2.setLabel("Pool #2"); + listVBox.getChildren().add(listItem2); + + JoinstrPoolListItem listItem3 = new JoinstrPoolListItem(); + listItem3.setLabel("Pool #3"); + listVBox.getChildren().add(listItem3); + + } + +} diff --git a/src/main/java/com/sparrowwallet/sparrow/joinstr/control/JoinstrPoolListItem.java b/src/main/java/com/sparrowwallet/sparrow/joinstr/control/JoinstrPoolListItem.java new file mode 100644 index 00000000..e817d56e --- /dev/null +++ b/src/main/java/com/sparrowwallet/sparrow/joinstr/control/JoinstrPoolListItem.java @@ -0,0 +1,35 @@ +package com.sparrowwallet.sparrow.joinstr.control; + +import com.sparrowwallet.sparrow.AppController; + +import java.io.IOException; + +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.control.Label; +import javafx.scene.layout.Pane; + +public class JoinstrPoolListItem extends Pane { + + @FXML + private Label lblTest; + + public JoinstrPoolListItem() { + + FXMLLoader loader = new FXMLLoader(AppController.class.getResource("joinstr/control/joinstrpoollistitem.fxml")); + loader.setRoot(this); + loader.setController(this); + + try { + loader.load(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + } + + public void setLabel(String txt) { + lblTest.setText(txt); + } + +} diff --git a/src/main/resources/com/sparrowwallet/sparrow/app.fxml b/src/main/resources/com/sparrowwallet/sparrow/app.fxml index c8d461c6..1267f629 100644 --- a/src/main/resources/com/sparrowwallet/sparrow/app.fxml +++ b/src/main/resources/com/sparrowwallet/sparrow/app.fxml @@ -11,7 +11,7 @@ - + @@ -148,6 +148,8 @@ + + diff --git a/src/main/resources/com/sparrowwallet/sparrow/joinstr/control/control.css b/src/main/resources/com/sparrowwallet/sparrow/joinstr/control/control.css new file mode 100644 index 00000000..695fa94b --- /dev/null +++ b/src/main/resources/com/sparrowwallet/sparrow/joinstr/control/control.css @@ -0,0 +1,18 @@ + +pool-list { +} + +pool-header { + -fx-background-color: #000000; +} + +pool-list-item { + -fx-insets:10, 10, 10, 10; + -fx-border-radius:10, 10, 10, 10; + -fx-background-color: #1D2124; +} + +pool-list-item:hover { + -fx-background-color: #164768; + -fx-border-color: #4E99D3; +} \ No newline at end of file diff --git a/src/main/resources/com/sparrowwallet/sparrow/joinstr/control/joinstrpoollist.fxml b/src/main/resources/com/sparrowwallet/sparrow/joinstr/control/joinstrpoollist.fxml new file mode 100644 index 00000000..5660b290 --- /dev/null +++ b/src/main/resources/com/sparrowwallet/sparrow/joinstr/control/joinstrpoollist.fxml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/sparrowwallet/sparrow/joinstr/control/joinstrpoollistitem.fxml b/src/main/resources/com/sparrowwallet/sparrow/joinstr/control/joinstrpoollistitem.fxml new file mode 100644 index 00000000..b9b95a48 --- /dev/null +++ b/src/main/resources/com/sparrowwallet/sparrow/joinstr/control/joinstrpoollistitem.fxml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/sparrowwallet/sparrow/joinstr/history.fxml b/src/main/resources/com/sparrowwallet/sparrow/joinstr/history.fxml new file mode 100644 index 00000000..0dba04de --- /dev/null +++ b/src/main/resources/com/sparrowwallet/sparrow/joinstr/history.fxml @@ -0,0 +1,10 @@ + + + + + + +
+ +
+
\ No newline at end of file diff --git a/src/main/resources/com/sparrowwallet/sparrow/joinstr/joinstr.css b/src/main/resources/com/sparrowwallet/sparrow/joinstr/joinstr.css new file mode 100644 index 00000000..bb3953fe --- /dev/null +++ b/src/main/resources/com/sparrowwallet/sparrow/joinstr/joinstr.css @@ -0,0 +1,34 @@ + +.spacerV50 { + -fx-padding:50, 0, 0, 0; +} + +.spacerV25 { + -fx-padding:25, 0, 0, 0; +} + +.balance-container { + -fx-padding:30, 0, 30, 0; + -fx-background-color: #164768; + -fx-text-alignment: center; +} + +.title { + -fx-padding:0, 10, 0, 10; + -fx-font-size: 2em; + -fx-font-weight: bold; +} + +.sub-title { + -fx-padding:0, 10, 0, 10; + -fx-font-size: 1.5em; +} + +.list-menu { + -fx-background-color: #3da0e3; +} + +.list-item * { + -fx-fill: #fff; + -fx-font-size: 1.5em; +} \ No newline at end of file diff --git a/src/main/resources/com/sparrowwallet/sparrow/joinstr/joinstr.fxml b/src/main/resources/com/sparrowwallet/sparrow/joinstr/joinstr.fxml new file mode 100644 index 00000000..d8f8d219 --- /dev/null +++ b/src/main/resources/com/sparrowwallet/sparrow/joinstr/joinstr.fxml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
diff --git a/src/main/resources/com/sparrowwallet/sparrow/joinstr/my_pools.fxml b/src/main/resources/com/sparrowwallet/sparrow/joinstr/my_pools.fxml new file mode 100644 index 00000000..f010a77f --- /dev/null +++ b/src/main/resources/com/sparrowwallet/sparrow/joinstr/my_pools.fxml @@ -0,0 +1,10 @@ + + + + + + +
+ +
+
\ No newline at end of file diff --git a/src/main/resources/com/sparrowwallet/sparrow/joinstr/new_pool.fxml b/src/main/resources/com/sparrowwallet/sparrow/joinstr/new_pool.fxml new file mode 100644 index 00000000..b8f19592 --- /dev/null +++ b/src/main/resources/com/sparrowwallet/sparrow/joinstr/new_pool.fxml @@ -0,0 +1,10 @@ + + + + + + +
+ +
+
\ No newline at end of file diff --git a/src/main/resources/com/sparrowwallet/sparrow/joinstr/other_pools.fxml b/src/main/resources/com/sparrowwallet/sparrow/joinstr/other_pools.fxml new file mode 100644 index 00000000..c646e8a6 --- /dev/null +++ b/src/main/resources/com/sparrowwallet/sparrow/joinstr/other_pools.fxml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file