mirror of
https://github.com/sparrowwallet/sparrow.git
synced 2024-12-25 13:16:44 +00:00
add show all wallets summary
This commit is contained in:
parent
0fed7c45ee
commit
a167f6aedb
3 changed files with 76 additions and 9 deletions
|
@ -1615,6 +1615,25 @@ public class AppController implements Initializable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void showAllWalletsSummary(ActionEvent event) {
|
||||||
|
List<List<WalletForm>> allWalletForms = new ArrayList<>();
|
||||||
|
for(Tab tab : tabs.getTabs()) {
|
||||||
|
if(tab.getUserData() instanceof WalletTabData) {
|
||||||
|
TabPane subTabs = (TabPane)tab.getContent();
|
||||||
|
allWalletForms.add(subTabs.getTabs().stream().map(subTab -> ((WalletTabData)subTab.getUserData()).getWalletForm())
|
||||||
|
.filter(walletForm -> walletForm.getWallet().isValid() && !walletForm.isLocked()).collect(Collectors.toList()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(allWalletForms.isEmpty() || allWalletForms.stream().allMatch(List::isEmpty)) {
|
||||||
|
showErrorDialog("No wallets", "There are no open and unlocked wallets to summarize.");
|
||||||
|
} else {
|
||||||
|
WalletSummaryDialog walletSummaryDialog = new WalletSummaryDialog(allWalletForms);
|
||||||
|
walletSummaryDialog.initOwner(rootStack.getScene().getWindow());
|
||||||
|
walletSummaryDialog.showAndWait();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void showWalletSummary(ActionEvent event) {
|
public void showWalletSummary(ActionEvent event) {
|
||||||
Tab selectedTab = tabs.getSelectionModel().getSelectedItem();
|
Tab selectedTab = tabs.getSelectionModel().getSelectedItem();
|
||||||
if(selectedTab != null) {
|
if(selectedTab != null) {
|
||||||
|
@ -1623,7 +1642,7 @@ public class AppController implements Initializable {
|
||||||
TabPane subTabs = (TabPane) selectedTab.getContent();
|
TabPane subTabs = (TabPane) selectedTab.getContent();
|
||||||
List<WalletForm> walletForms = subTabs.getTabs().stream().map(subTab -> ((WalletTabData)subTab.getUserData()).getWalletForm()).collect(Collectors.toList());
|
List<WalletForm> walletForms = subTabs.getTabs().stream().map(subTab -> ((WalletTabData)subTab.getUserData()).getWalletForm()).collect(Collectors.toList());
|
||||||
if(!walletForms.isEmpty()) {
|
if(!walletForms.isEmpty()) {
|
||||||
WalletSummaryDialog walletSummaryDialog = new WalletSummaryDialog(walletForms);
|
WalletSummaryDialog walletSummaryDialog = new WalletSummaryDialog(List.of(walletForms));
|
||||||
walletSummaryDialog.initOwner(rootStack.getScene().getWindow());
|
walletSummaryDialog.initOwner(rootStack.getScene().getWindow());
|
||||||
walletSummaryDialog.showAndWait();
|
walletSummaryDialog.showAndWait();
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,17 +18,21 @@ import javafx.scene.image.ImageView;
|
||||||
import javafx.scene.layout.HBox;
|
import javafx.scene.layout.HBox;
|
||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class WalletSummaryDialog extends Dialog<Void> {
|
public class WalletSummaryDialog extends Dialog<Void> {
|
||||||
public WalletSummaryDialog(List<WalletForm> walletForms) {
|
public WalletSummaryDialog(List<List<WalletForm>> summaryWalletFormsList) {
|
||||||
if(walletForms.isEmpty()) {
|
List<List<WalletForm>> walletFormsList = new ArrayList<>(summaryWalletFormsList);
|
||||||
|
walletFormsList.removeIf(List::isEmpty);
|
||||||
|
if(walletFormsList.isEmpty()) {
|
||||||
throw new IllegalArgumentException("No wallets selected to summarize");
|
throw new IllegalArgumentException("No wallets selected to summarize");
|
||||||
}
|
}
|
||||||
|
|
||||||
Wallet masterWallet = walletForms.get(0).getMasterWallet();
|
boolean allOpenWallets = walletFormsList.size() > 1;
|
||||||
|
List<Wallet> masterWallets = walletFormsList.stream().map(walletForms -> walletForms.get(0).getMasterWallet()).toList();
|
||||||
|
|
||||||
final DialogPane dialogPane = getDialogPane();
|
final DialogPane dialogPane = getDialogPane();
|
||||||
dialogPane.getStylesheets().add(AppServices.class.getResource("general.css").toExternalForm());
|
dialogPane.getStylesheets().add(AppServices.class.getResource("general.css").toExternalForm());
|
||||||
|
@ -37,7 +41,7 @@ public class WalletSummaryDialog extends Dialog<Void> {
|
||||||
dialogPane.getStylesheets().add(AppServices.class.getResource("wallet/transactions.css").toExternalForm());
|
dialogPane.getStylesheets().add(AppServices.class.getResource("wallet/transactions.css").toExternalForm());
|
||||||
|
|
||||||
AppServices.setStageIcon(dialogPane.getScene().getWindow());
|
AppServices.setStageIcon(dialogPane.getScene().getWindow());
|
||||||
dialogPane.setHeaderText("Wallet Summary for " + masterWallet.getName());
|
dialogPane.setHeaderText("Wallet Summary for " + (allOpenWallets ? "All Open Wallets" : masterWallets.get(0).getName()));
|
||||||
|
|
||||||
Image image = new Image("image/sparrow-small.png", 50, 50, false, false);
|
Image image = new Image("image/sparrow-small.png", 50, 50, false, false);
|
||||||
if(!image.isError()) {
|
if(!image.isError()) {
|
||||||
|
@ -64,7 +68,7 @@ public class WalletSummaryDialog extends Dialog<Void> {
|
||||||
});
|
});
|
||||||
balanceColumn.setCellFactory(p -> new CoinCell());
|
balanceColumn.setCellFactory(p -> new CoinCell());
|
||||||
table.getColumns().add(balanceColumn);
|
table.getColumns().add(balanceColumn);
|
||||||
table.setUnitFormat(masterWallet);
|
table.setUnitFormat(masterWallets.get(0));
|
||||||
|
|
||||||
CurrencyRate currencyRate = AppServices.getFiatCurrencyExchangeRate();
|
CurrencyRate currencyRate = AppServices.getFiatCurrencyExchangeRate();
|
||||||
if(currencyRate != null && currencyRate.isAvailable() && Config.get().getExchangeSource() != ExchangeSource.NONE) {
|
if(currencyRate != null && currencyRate.isAvailable() && Config.get().getExchangeSource() != ExchangeSource.NONE) {
|
||||||
|
@ -77,12 +81,20 @@ public class WalletSummaryDialog extends Dialog<Void> {
|
||||||
table.setCurrencyRate(currencyRate);
|
table.setCurrencyRate(currencyRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
SummaryEntry rootEntry = new SummaryEntry(walletForms);
|
Entry rootEntry = allOpenWallets ? new AllSummaryEntry(walletFormsList) : new SummaryEntry(walletFormsList.get(0));
|
||||||
TreeItem<Entry> rootItem = new TreeItem<>(rootEntry);
|
TreeItem<Entry> rootItem = new TreeItem<>(rootEntry);
|
||||||
for(Entry childEntry : rootEntry.getChildren()) {
|
for(Entry childEntry : rootEntry.getChildren()) {
|
||||||
TreeItem<Entry> childItem = new TreeItem<>(childEntry);
|
TreeItem<Entry> childItem = new TreeItem<>(childEntry);
|
||||||
rootItem.getChildren().add(childItem);
|
rootItem.getChildren().add(childItem);
|
||||||
childItem.getChildren().add(new TreeItem<>(new UnconfirmedEntry((WalletTransactionsEntry)childEntry)));
|
if(allOpenWallets) {
|
||||||
|
for(Entry walletEntry : childEntry.getChildren()) {
|
||||||
|
TreeItem<Entry> walletItem = new TreeItem<>(walletEntry);
|
||||||
|
childItem.getChildren().add(walletItem);
|
||||||
|
walletItem.getChildren().add(new TreeItem<>(new UnconfirmedEntry((WalletTransactionsEntry)walletEntry)));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
childItem.getChildren().add(new TreeItem<>(new UnconfirmedEntry((WalletTransactionsEntry)childEntry)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
table.setShowRoot(true);
|
table.setShowRoot(true);
|
||||||
|
@ -97,6 +109,14 @@ public class WalletSummaryDialog extends Dialog<Void> {
|
||||||
|
|
||||||
hBox.getChildren().add(vBox);
|
hBox.getChildren().add(vBox);
|
||||||
|
|
||||||
|
Wallet balanceWallet;
|
||||||
|
if(allOpenWallets) {
|
||||||
|
balanceWallet = new Wallet();
|
||||||
|
balanceWallet.getChildWallets().addAll(masterWallets.stream().flatMap(mws -> mws.getAllWallets().stream()).toList());
|
||||||
|
} else {
|
||||||
|
balanceWallet = masterWallets.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
NumberAxis xAxis = new NumberAxis();
|
NumberAxis xAxis = new NumberAxis();
|
||||||
xAxis.setSide(Side.BOTTOM);
|
xAxis.setSide(Side.BOTTOM);
|
||||||
xAxis.setForceZeroInRange(false);
|
xAxis.setForceZeroInRange(false);
|
||||||
|
@ -104,7 +124,7 @@ public class WalletSummaryDialog extends Dialog<Void> {
|
||||||
NumberAxis yAxis = new NumberAxis();
|
NumberAxis yAxis = new NumberAxis();
|
||||||
yAxis.setSide(Side.LEFT);
|
yAxis.setSide(Side.LEFT);
|
||||||
BalanceChart balanceChart = new BalanceChart(xAxis, yAxis);
|
BalanceChart balanceChart = new BalanceChart(xAxis, yAxis);
|
||||||
balanceChart.initialize(new WalletTransactionsEntry(masterWallet, true));
|
balanceChart.initialize(new WalletTransactionsEntry(balanceWallet, true));
|
||||||
balanceChart.setAnimated(false);
|
balanceChart.setAnimated(false);
|
||||||
balanceChart.setLegendVisible(false);
|
balanceChart.setLegendVisible(false);
|
||||||
balanceChart.setVerticalGridLinesVisible(false);
|
balanceChart.setVerticalGridLinesVisible(false);
|
||||||
|
@ -120,6 +140,32 @@ public class WalletSummaryDialog extends Dialog<Void> {
|
||||||
AppServices.moveToActiveWindowScreen(this);
|
AppServices.moveToActiveWindowScreen(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class AllSummaryEntry extends Entry {
|
||||||
|
private AllSummaryEntry(List<List<WalletForm>> walletFormsList) {
|
||||||
|
super(null, "All Wallets", walletFormsList.stream().map(SummaryEntry::new).collect(Collectors.toList()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long getValue() {
|
||||||
|
long value = 0;
|
||||||
|
for(Entry entry : getChildren()) {
|
||||||
|
value += entry.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getEntryType() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Function getWalletFunction() {
|
||||||
|
return Function.TRANSACTIONS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class SummaryEntry extends Entry {
|
public static class SummaryEntry extends Entry {
|
||||||
private SummaryEntry(List<WalletForm> walletForms) {
|
private SummaryEntry(List<WalletForm> walletForms) {
|
||||||
super(walletForms.get(0).getWallet(), walletForms.get(0).getWallet().getName(), walletForms.stream().map(WalletForm::getWalletTransactionsEntry).collect(Collectors.toList()));
|
super(walletForms.get(0).getWallet(), walletForms.get(0).getWallet().getName(), walletForms.stream().map(WalletForm::getWalletTransactionsEntry).collect(Collectors.toList()));
|
||||||
|
|
|
@ -128,6 +128,8 @@
|
||||||
<MenuItem fx:id="searchAllWallets" mnemonicParsing="false" text="Search All Wallets" accelerator="Shortcut+Shift+Alt+S" onAction="#searchAllWallets"/>
|
<MenuItem fx:id="searchAllWallets" mnemonicParsing="false" text="Search All Wallets" accelerator="Shortcut+Shift+Alt+S" onAction="#searchAllWallets"/>
|
||||||
<SeparatorMenuItem />
|
<SeparatorMenuItem />
|
||||||
<MenuItem fx:id="showWalletSummary" mnemonicParsing="false" text="Show Wallet Summary" onAction="#showWalletSummary"/>
|
<MenuItem fx:id="showWalletSummary" mnemonicParsing="false" text="Show Wallet Summary" onAction="#showWalletSummary"/>
|
||||||
|
<MenuItem fx:id="showAllWalletsSummary" mnemonicParsing="false" text="Show All Wallets Summary" onAction="#showAllWalletsSummary"/>
|
||||||
|
<SeparatorMenuItem />
|
||||||
<MenuItem fx:id="refreshWallet" mnemonicParsing="false" text="Refresh Wallet" accelerator="Shortcut+R" onAction="#refreshWallet"/>
|
<MenuItem fx:id="refreshWallet" mnemonicParsing="false" text="Refresh Wallet" accelerator="Shortcut+R" onAction="#refreshWallet"/>
|
||||||
</items>
|
</items>
|
||||||
</Menu>
|
</Menu>
|
||||||
|
|
Loading…
Reference in a new issue