add optional transaction count column on address table with table header context menu to show

This commit is contained in:
Craig Raw 2022-07-21 13:33:19 +02:00
parent 03e9d23fa8
commit f30da06aaf
7 changed files with 89 additions and 1 deletions

2
drongo

@ -1 +1 @@
Subproject commit 40dab5933702c5b12913337dc618a68652c445e4 Subproject commit b2f5f5ffebfc0ce9f0d992f3ac3b59965661491b

View file

@ -5,6 +5,7 @@ import com.sparrowwallet.sparrow.AppServices;
import com.sparrowwallet.sparrow.EventManager; import com.sparrowwallet.sparrow.EventManager;
import com.sparrowwallet.sparrow.event.ReceiveActionEvent; import com.sparrowwallet.sparrow.event.ReceiveActionEvent;
import com.sparrowwallet.sparrow.event.ReceiveToEvent; import com.sparrowwallet.sparrow.event.ReceiveToEvent;
import com.sparrowwallet.sparrow.event.ShowTransactionsCountEvent;
import com.sparrowwallet.sparrow.io.Config; import com.sparrowwallet.sparrow.io.Config;
import com.sparrowwallet.sparrow.wallet.Entry; import com.sparrowwallet.sparrow.wallet.Entry;
import com.sparrowwallet.sparrow.wallet.NodeEntry; import com.sparrowwallet.sparrow.wallet.NodeEntry;
@ -45,6 +46,15 @@ public class AddressTreeTable extends CoinTreeTable {
labelCol.setSortable(false); labelCol.setSortable(false);
getColumns().add(labelCol); getColumns().add(labelCol);
TreeTableColumn<Entry, Number> countCol = new TreeTableColumn<>("Transactions");
countCol.setCellValueFactory((TreeTableColumn.CellDataFeatures<Entry, Number> param) -> {
return new ReadOnlyObjectWrapper<>(param.getValue().getValue().getChildren().size());
});
countCol.setCellFactory(p -> new NumberCell());
countCol.setSortable(false);
countCol.setVisible(Config.get().isShowAddressTransactionCount());
getColumns().add(countCol);
TreeTableColumn<Entry, Number> amountCol = new TreeTableColumn<>("Value"); TreeTableColumn<Entry, Number> amountCol = new TreeTableColumn<>("Value");
amountCol.setCellValueFactory((TreeTableColumn.CellDataFeatures<Entry, Number> param) -> { amountCol.setCellValueFactory((TreeTableColumn.CellDataFeatures<Entry, Number> param) -> {
return new ReadOnlyObjectWrapper<>(param.getValue().getValue().getValue()); return new ReadOnlyObjectWrapper<>(param.getValue().getValue().getValue());
@ -53,6 +63,19 @@ public class AddressTreeTable extends CoinTreeTable {
amountCol.setSortable(false); amountCol.setSortable(false);
getColumns().add(amountCol); getColumns().add(amountCol);
ContextMenu contextMenu = new ContextMenu();
CheckMenuItem showCountItem = new CheckMenuItem("Show Transaction Count");
contextMenu.setOnShowing(event -> {
showCountItem.setSelected(Config.get().isShowAddressTransactionCount());
});
showCountItem.setOnAction(event -> {
boolean show = !Config.get().isShowAddressTransactionCount();
Config.get().setShowAddressTransactionCount(show);
EventManager.get().post(new ShowTransactionsCountEvent(show));
});
contextMenu.getItems().add(showCountItem);
getColumns().forEach(col -> col.setContextMenu(contextMenu));
setEditable(true); setEditable(true);
setColumnResizePolicy(TreeTableView.CONSTRAINED_RESIZE_POLICY); setColumnResizePolicy(TreeTableView.CONSTRAINED_RESIZE_POLICY);
@ -147,4 +170,8 @@ public class AddressTreeTable extends CoinTreeTable {
Entry rootEntry = getRoot().getValue(); Entry rootEntry = getRoot().getValue();
rootEntry.updateLabel(entry); rootEntry.updateLabel(entry);
} }
public void showTransactionsCount(boolean show) {
getColumns().stream().filter(col -> col.getText().equals("Transactions")).forEach(col -> col.setVisible(show));
}
} }

View file

@ -0,0 +1,28 @@
package com.sparrowwallet.sparrow.control;
import com.sparrowwallet.sparrow.wallet.Entry;
import javafx.scene.control.TreeTableCell;
import org.controlsfx.tools.Platform;
public class NumberCell extends TreeTableCell<Entry, Number> {
public NumberCell() {
super();
getStyleClass().add("number-cell");
if(Platform.getCurrent() == Platform.OSX) {
getStyleClass().add("number-field");
}
}
@Override
protected void updateItem(Number amount, boolean empty) {
super.updateItem(amount, empty);
if(empty || amount == null) {
setText(null);
setGraphic(null);
} else {
setText(amount.toString());
setGraphic(null);
}
}
}

View file

@ -0,0 +1,13 @@
package com.sparrowwallet.sparrow.event;
public class ShowTransactionsCountEvent {
private final boolean showCount;
public ShowTransactionsCountEvent(boolean showCount) {
this.showCount = showCount;
}
public boolean isShowCount() {
return showCount;
}
}

View file

@ -43,6 +43,7 @@ public class Config {
private boolean hideEmptyUsedAddresses = false; private boolean hideEmptyUsedAddresses = false;
private boolean showTransactionHex = true; private boolean showTransactionHex = true;
private boolean showLoadingLog = true; private boolean showLoadingLog = true;
private boolean showAddressTransactionCount = false;
private boolean preventSleep = false; private boolean preventSleep = false;
private List<File> recentWalletFiles; private List<File> recentWalletFiles;
private Integer keyDerivationPeriod; private Integer keyDerivationPeriod;
@ -278,6 +279,15 @@ public class Config {
flush(); flush();
} }
public boolean isShowAddressTransactionCount() {
return showAddressTransactionCount;
}
public void setShowAddressTransactionCount(boolean showAddressTransactionCount) {
this.showAddressTransactionCount = showAddressTransactionCount;
flush();
}
public boolean isPreventSleep() { public boolean isPreventSleep() {
return preventSleep; return preventSleep;
} }

View file

@ -125,6 +125,12 @@ public class AddressesController extends WalletFormController implements Initial
} }
} }
@Subscribe
public void showTransactionsCount(ShowTransactionsCountEvent event) {
receiveTable.showTransactionsCount(event.isShowCount());
changeTable.showTransactionsCount(event.isShowCount());
}
public void exportReceiveAddresses(ActionEvent event) { public void exportReceiveAddresses(ActionEvent event) {
exportAddresses(KeyPurpose.RECEIVE); exportAddresses(KeyPurpose.RECEIVE);
} }

View file

@ -58,6 +58,10 @@
-fx-text-fill: derive(white, -15%); -fx-text-fill: derive(white, -15%);
} }
.number-cell {
-fx-alignment: center-right;
}
.label-cell .text-field { .label-cell .text-field {
-fx-padding: 0; -fx-padding: 0;
} }