|
|
@ -1,19 +1,24 @@ |
|
|
|
package com.sparrowwallet.sparrow.wallet; |
|
|
|
|
|
|
|
import com.google.common.eventbus.Subscribe; |
|
|
|
import com.sparrowwallet.drongo.BitcoinUnit; |
|
|
|
import com.sparrowwallet.drongo.protocol.Transaction; |
|
|
|
import com.sparrowwallet.sparrow.EventManager; |
|
|
|
import com.sparrowwallet.sparrow.control.CoinLabel; |
|
|
|
import com.sparrowwallet.sparrow.control.UtxosChart; |
|
|
|
import com.sparrowwallet.sparrow.control.UtxosTreeTable; |
|
|
|
import com.sparrowwallet.sparrow.event.BitcoinUnitChangedEvent; |
|
|
|
import com.sparrowwallet.sparrow.event.WalletEntryLabelChangedEvent; |
|
|
|
import com.sparrowwallet.sparrow.event.WalletHistoryChangedEvent; |
|
|
|
import com.sparrowwallet.sparrow.event.WalletNodesChangedEvent; |
|
|
|
import com.sparrowwallet.sparrow.event.*; |
|
|
|
import com.sparrowwallet.sparrow.io.Config; |
|
|
|
import javafx.application.Platform; |
|
|
|
import javafx.collections.ListChangeListener; |
|
|
|
import javafx.event.ActionEvent; |
|
|
|
import javafx.fxml.FXML; |
|
|
|
import javafx.fxml.Initializable; |
|
|
|
import javafx.scene.control.Button; |
|
|
|
|
|
|
|
import java.net.URL; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Locale; |
|
|
|
import java.util.ResourceBundle; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
@ -22,6 +27,9 @@ public class UtxosController extends WalletFormController implements Initializab |
|
|
|
@FXML |
|
|
|
private UtxosTreeTable utxosTable; |
|
|
|
|
|
|
|
@FXML |
|
|
|
private Button sendSelected; |
|
|
|
|
|
|
|
@FXML |
|
|
|
private UtxosChart utxosChart; |
|
|
|
|
|
|
@ -34,13 +42,53 @@ public class UtxosController extends WalletFormController implements Initializab |
|
|
|
public void initializeView() { |
|
|
|
utxosTable.initialize(getWalletForm().getWalletUtxosEntry()); |
|
|
|
utxosChart.initialize(getWalletForm().getWalletUtxosEntry()); |
|
|
|
sendSelected.setDisable(true); |
|
|
|
|
|
|
|
utxosTable.getSelectionModel().getSelectedIndices().addListener((ListChangeListener<Integer>) c -> { |
|
|
|
List<Entry> selectedEntries = utxosTable.getSelectionModel().getSelectedCells().stream().map(tp -> tp.getTreeItem().getValue()).collect(Collectors.toList()); |
|
|
|
utxosChart.select(selectedEntries); |
|
|
|
updateSendSelected(Config.get().getBitcoinUnit()); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
private void updateSendSelected(BitcoinUnit unit) { |
|
|
|
List<Entry> selectedEntries = utxosTable.getSelectionModel().getSelectedCells().stream().map(tp -> tp.getTreeItem().getValue()) |
|
|
|
.filter(entry -> ((HashIndexEntry)entry).isSpendable()) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
sendSelected.setDisable(selectedEntries.isEmpty()); |
|
|
|
long selectedTotal = selectedEntries.stream().mapToLong(Entry::getValue).sum(); |
|
|
|
if(selectedTotal > 0) { |
|
|
|
if(unit == null || unit.equals(BitcoinUnit.AUTO)) { |
|
|
|
unit = (selectedTotal >= BitcoinUnit.getAutoThreshold() ? BitcoinUnit.BTC : BitcoinUnit.SATOSHIS); |
|
|
|
} |
|
|
|
|
|
|
|
if(unit.equals(BitcoinUnit.BTC)) { |
|
|
|
sendSelected.setText("Send Selected (" + CoinLabel.getBTCFormat().format((double)selectedTotal / Transaction.SATOSHIS_PER_BITCOIN) + " BTC)"); |
|
|
|
} else { |
|
|
|
sendSelected.setText("Send Selected (" + String.format(Locale.ENGLISH, "%,d", selectedTotal) + " sats)"); |
|
|
|
} |
|
|
|
} else { |
|
|
|
sendSelected.setText("Send Selected"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public void sendSelected(ActionEvent event) { |
|
|
|
List<HashIndexEntry> utxoEntries = utxosTable.getSelectionModel().getSelectedCells().stream() |
|
|
|
.map(tp -> tp.getTreeItem().getValue()) |
|
|
|
.filter(e -> e instanceof HashIndexEntry) |
|
|
|
.map(e -> (HashIndexEntry)e) |
|
|
|
.filter(e -> e.getType().equals(HashIndexEntry.Type.OUTPUT) && e.isSpendable()) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
EventManager.get().post(new SendActionEvent(utxoEntries)); |
|
|
|
Platform.runLater(() -> EventManager.get().post(new SpendUtxoEvent(utxoEntries))); |
|
|
|
} |
|
|
|
|
|
|
|
public void clear(ActionEvent event) { |
|
|
|
utxosTable.getSelectionModel().clearSelection(); |
|
|
|
} |
|
|
|
|
|
|
|
@Subscribe |
|
|
|
public void walletNodesChanged(WalletNodesChangedEvent event) { |
|
|
|
if(event.getWallet().equals(walletForm.getWallet())) { |
|
|
@ -75,5 +123,6 @@ public class UtxosController extends WalletFormController implements Initializab |
|
|
|
public void bitcoinUnitChanged(BitcoinUnitChangedEvent event) { |
|
|
|
utxosTable.setBitcoinUnit(getWalletForm().getWallet(), event.getBitcoinUnit()); |
|
|
|
utxosChart.setBitcoinUnit(getWalletForm().getWallet(), event.getBitcoinUnit()); |
|
|
|
updateSendSelected(event.getBitcoinUnit()); |
|
|
|
} |
|
|
|
} |
|
|
|