diff --git a/src/main/java/bisq/desktop/main/dao/results/BaseResultsGridPane.java b/src/main/java/bisq/desktop/main/dao/results/BaseResultsGridPane.java
deleted file mode 100644
index aaea38ed17..0000000000
--- a/src/main/java/bisq/desktop/main/dao/results/BaseResultsGridPane.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * This file is part of Bisq.
- *
- * Bisq is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * Bisq is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Bisq. If not, see .
- */
-
-package bisq.desktop.main.dao.results;
-
-import bisq.desktop.components.AutoTooltipLabel;
-import bisq.desktop.components.TableGroupHeadline;
-import bisq.desktop.main.dao.results.model.ResultsOfCycle;
-
-import bisq.core.btc.wallet.BsqWalletService;
-import bisq.core.dao.DaoFacade;
-import bisq.core.locale.Res;
-import bisq.core.util.BsqFormatter;
-
-import javafx.scene.control.TableView;
-import javafx.scene.layout.GridPane;
-import javafx.scene.layout.Priority;
-
-import javafx.geometry.Insets;
-
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
-
-import javafx.collections.FXCollections;
-import javafx.collections.ObservableList;
-import javafx.collections.transformation.SortedList;
-
-import lombok.Getter;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public abstract class BaseResultsGridPane extends GridPane {
- @Getter
- protected final BsqWalletService bsqWalletService;
- protected final DaoFacade daoFacade;
- protected final BsqFormatter bsqFormatter;
-
- protected final ObservableList itemList = FXCollections.observableArrayList();
- private final SortedList sortedList = new SortedList<>(itemList);
- protected ResultsOfCycle resultsOfCycle;
- protected TableView tableView;
- private TableGroupHeadline headline;
-
- protected abstract String getTitle();
-
- protected abstract void fillList();
-
- protected abstract void createColumns(TableView tableView);
-
- public BaseResultsGridPane(BsqWalletService bsqWalletService, DaoFacade daoFacade,
- BsqFormatter bsqFormatter, int columnIndex) {
- this.bsqWalletService = bsqWalletService;
- this.daoFacade = daoFacade;
- this.bsqFormatter = bsqFormatter;
-
- headline = new TableGroupHeadline(getTitle());
- GridPane.setMargin(headline, new Insets(15, -10, -10, -10));
- GridPane.setColumnIndex(headline, columnIndex);
- getChildren().add(headline);
-
- tableView = new TableView<>();
- tableView.setPlaceholder(new AutoTooltipLabel(Res.get("table.placeholder.noData")));
- tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
-
- createColumns(tableView);
- GridPane.setMargin(tableView, new Insets(35, -10, 5, -10));
- GridPane.setColumnIndex(tableView, columnIndex);
- getChildren().add(tableView);
-
- GridPane.setHgrow(headline, Priority.ALWAYS);
- GridPane.setHgrow(tableView, Priority.ALWAYS);
-
- tableView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
- @Override
- public void changed(ObservableValue extends R> observable, R oldValue, R newValue) {
- onSelected(newValue);
- }
- });
- }
-
- protected abstract void onSelected(R item);
-
- public void createAllFields(ResultsOfCycle resultsOfCycle) {
- this.resultsOfCycle = resultsOfCycle;
-
- tableView.setItems(sortedList);
- sortedList.comparatorProperty().bind(tableView.comparatorProperty());
- fillList();
- }
-}
diff --git a/src/main/java/bisq/desktop/main/dao/results/BaseResultsListItem.java b/src/main/java/bisq/desktop/main/dao/results/BaseResultsListItem.java
deleted file mode 100644
index 6506dcb596..0000000000
--- a/src/main/java/bisq/desktop/main/dao/results/BaseResultsListItem.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * This file is part of Bisq.
- *
- * Bisq is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * Bisq is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Bisq. If not, see .
- */
-
-package bisq.desktop.main.dao.results;
-
-import bisq.core.dao.voting.voteresult.DecryptedVote;
-import bisq.core.dao.voting.voteresult.EvaluatedProposal;
-
-import javafx.scene.control.TableRow;
-
-public class BaseResultsListItem {
- private TableRow tableRow;
-
- public void setTableRow(TableRow tableRow) {
- this.tableRow = tableRow;
- }
-
- public void resetTableRow() {
- if (tableRow != null) {
- tableRow.setStyle(null);
- tableRow.requestLayout();
-
- }
- }
-
- public void applyVoteAndProposal(DecryptedVote decryptedVote, EvaluatedProposal evaluatedProposal) {
- String rowBgColor = decryptedVote.getVote(evaluatedProposal.getProposalTxId())
- .map(booleanVote -> booleanVote.isAccepted() ?
- "-fx-background-color: rgba(0, 255, 0, 0.4)" :
- "-fx-background-color: rgba(255, 0, 0, 0.23)")
- .orElse("-fx-background-color: rgba(182, 182, 182, 0.4)");
- tableRow.setStyle(rowBgColor);
- }
-}
diff --git a/src/main/java/bisq/desktop/main/dao/results/BaseResultsTableView.java b/src/main/java/bisq/desktop/main/dao/results/BaseResultsTableView.java
deleted file mode 100644
index 2b862f8f4c..0000000000
--- a/src/main/java/bisq/desktop/main/dao/results/BaseResultsTableView.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * This file is part of Bisq.
- *
- * Bisq is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * Bisq is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Bisq. If not, see .
- */
-
-package bisq.desktop.main.dao.results;
-
-import bisq.desktop.components.AutoTooltipLabel;
-import bisq.desktop.components.TableGroupHeadline;
-import bisq.desktop.main.dao.results.model.ResultsOfCycle;
-import bisq.desktop.util.GUIUtil;
-
-import bisq.core.btc.wallet.BsqWalletService;
-import bisq.core.dao.DaoFacade;
-import bisq.core.locale.Res;
-import bisq.core.util.BsqFormatter;
-
-import javafx.scene.control.TableView;
-import javafx.scene.layout.GridPane;
-import javafx.scene.layout.Priority;
-
-import javafx.geometry.Insets;
-
-import javafx.collections.FXCollections;
-import javafx.collections.ObservableList;
-import javafx.collections.transformation.SortedList;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public abstract class BaseResultsTableView {
- protected final GridPane gridPane;
- protected final BsqWalletService bsqWalletService;
- protected final DaoFacade daoFacade;
- protected final BsqFormatter bsqFormatter;
-
- protected int gridRow;
- protected int gridRowStartIndex;
-
-
- protected final ObservableList itemList = FXCollections.observableArrayList();
- private final SortedList sortedList = new SortedList<>(itemList);
- protected ResultsOfCycle resultsOfCycle;
- protected TableView tableView;
-
- protected abstract String getTitle();
-
- protected abstract void fillList();
-
- protected abstract void createColumns(TableView tableView);
-
- public BaseResultsTableView(GridPane gridPane, BsqWalletService bsqWalletService, DaoFacade daoFacade, BsqFormatter bsqFormatter) {
- this.gridPane = gridPane;
- this.bsqWalletService = bsqWalletService;
- this.daoFacade = daoFacade;
- this.bsqFormatter = bsqFormatter;
- }
-
- public int createAllFields(int gridRowStartIndex, ResultsOfCycle resultsOfCycle) {
- this.resultsOfCycle = resultsOfCycle;
- this.gridRowStartIndex = gridRowStartIndex;
- this.gridRow = gridRowStartIndex;
-
- removeAllFields();
- createTableView();
- fillList();
- GUIUtil.setFitToRowsForTableView(tableView, 33, 28, 80);
-
- return gridRow;
- }
-
- private void createTableView() {
- TableGroupHeadline headline = new TableGroupHeadline(getTitle());
- GridPane.setRowIndex(headline, gridRow);
- GridPane.setMargin(headline, new Insets(15, -10, -10, -10));
- GridPane.setColumnSpan(headline, 2);
- gridPane.getChildren().add(headline);
-
- tableView = new TableView<>();
- tableView.setPlaceholder(new AutoTooltipLabel(Res.get("table.placeholder.noData")));
- tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
-
- createColumns(tableView);
- GridPane.setRowIndex(tableView, gridRow);
- GridPane.setMargin(tableView, new Insets(35, -10, 5, -10));
- GridPane.setColumnSpan(tableView, 2);
- GridPane.setHgrow(tableView, Priority.SOMETIMES);
- gridPane.getChildren().add(tableView);
-
- tableView.setItems(sortedList);
- sortedList.comparatorProperty().bind(tableView.comparatorProperty());
- }
-
- private void removeAllFields() {
- GUIUtil.removeChildrenFromGridPaneRows(gridPane, gridRowStartIndex, gridRow);
- gridRow = gridRowStartIndex;
- }
-}
diff --git a/src/main/java/bisq/desktop/main/dao/results/ResultsView.fxml b/src/main/java/bisq/desktop/main/dao/results/ResultsView.fxml
deleted file mode 100644
index 6960acea52..0000000000
--- a/src/main/java/bisq/desktop/main/dao/results/ResultsView.fxml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/main/java/bisq/desktop/main/dao/results/ResultsView.java b/src/main/java/bisq/desktop/main/dao/results/ResultsView.java
deleted file mode 100644
index 4e0ac0170e..0000000000
--- a/src/main/java/bisq/desktop/main/dao/results/ResultsView.java
+++ /dev/null
@@ -1,542 +0,0 @@
-/*
- * This file is part of Bisq.
- *
- * Bisq is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * Bisq is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Bisq. If not, see .
- */
-
-package bisq.desktop.main.dao.results;
-
-
-import bisq.desktop.common.model.Activatable;
-import bisq.desktop.common.view.ActivatableViewAndModel;
-import bisq.desktop.common.view.FxmlView;
-import bisq.desktop.components.AutoTooltipLabel;
-import bisq.desktop.components.AutoTooltipTableColumn;
-import bisq.desktop.components.TableGroupHeadline;
-import bisq.desktop.components.TitledGroupBg;
-import bisq.desktop.main.dao.results.model.ResultsOfCycle;
-import bisq.desktop.main.dao.results.proposals.ProposalResultsGridPane;
-import bisq.desktop.main.dao.results.votes.VoteResultsGridPane;
-import bisq.desktop.util.FormBuilder;
-import bisq.desktop.util.GUIUtil;
-
-import bisq.core.btc.wallet.BsqWalletService;
-import bisq.core.dao.DaoFacade;
-import bisq.core.dao.state.BsqStateListener;
-import bisq.core.dao.state.BsqStateService;
-import bisq.core.dao.state.blockchain.Block;
-import bisq.core.dao.state.ext.Param;
-import bisq.core.dao.state.period.Cycle;
-import bisq.core.dao.state.period.CycleService;
-import bisq.core.dao.voting.blindvote.BlindVoteConsensus;
-import bisq.core.dao.voting.proposal.Proposal;
-import bisq.core.dao.voting.proposal.ProposalConsensus;
-import bisq.core.dao.voting.proposal.ProposalService;
-import bisq.core.dao.voting.proposal.storage.appendonly.ProposalPayload;
-import bisq.core.dao.voting.voteresult.DecryptedVote;
-import bisq.core.dao.voting.voteresult.EvaluatedProposal;
-import bisq.core.dao.voting.voteresult.VoteResultService;
-import bisq.core.locale.Res;
-import bisq.core.user.Preferences;
-import bisq.core.util.BsqFormatter;
-
-import org.bitcoinj.core.Coin;
-
-import javax.inject.Inject;
-
-import javafx.fxml.FXML;
-
-import javafx.scene.control.ScrollPane;
-import javafx.scene.control.TableCell;
-import javafx.scene.control.TableColumn;
-import javafx.scene.control.TableView;
-import javafx.scene.layout.AnchorPane;
-import javafx.scene.layout.ColumnConstraints;
-import javafx.scene.layout.GridPane;
-import javafx.scene.layout.HBox;
-import javafx.scene.layout.Priority;
-
-import javafx.geometry.HPos;
-import javafx.geometry.Insets;
-
-import javafx.beans.property.ReadOnlyObjectWrapper;
-import javafx.beans.value.ChangeListener;
-
-import javafx.collections.FXCollections;
-import javafx.collections.ObservableList;
-import javafx.collections.transformation.SortedList;
-
-import javafx.util.Callback;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.stream.Collectors;
-
-import static bisq.desktop.util.FormBuilder.addLabelTextField;
-
-@FxmlView
-public class ResultsView extends ActivatableViewAndModel implements BsqStateListener, SelectionListener {
- @FXML
- private ScrollPane scrollPane;
-
- private final DaoFacade daoFacade;
- // TODO use daoFacade once dev work completed
- private final BsqStateService bsqStateService;
- private final CycleService cycleService;
- private final VoteResultService voteResultService;
- private final ProposalService proposalService;
- private final BsqWalletService bsqWalletService;
- private final Preferences preferences;
- private final BsqFormatter bsqFormatter;
-
- private int gridRow = 0;
- private TableView tableView;
- private final ObservableList itemList = FXCollections.observableArrayList();
- private final SortedList sortedList = new SortedList<>(itemList);
- private ChangeListener selectedItemListener;
- private ProposalResultsGridPane proposalResultsGridPane;
- private VoteResultsGridPane voteResultsGridPane;
- private GridPane gridPane;
- private HBox hBox;
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // Constructor, lifecycle
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- @Inject
- private ResultsView(DaoFacade daoFacade,
- BsqStateService bsqStateService,
- CycleService cycleService,
- VoteResultService voteResultService,
- ProposalService proposalService,
- BsqWalletService bsqWalletService,
- Preferences preferences,
- BsqFormatter bsqFormatter) {
- this.daoFacade = daoFacade;
- this.bsqStateService = bsqStateService;
- this.cycleService = cycleService;
- this.voteResultService = voteResultService;
- this.proposalService = proposalService;
- this.bsqWalletService = bsqWalletService;
- this.preferences = preferences;
- this.bsqFormatter = bsqFormatter;
- }
-
- @Override
- public void initialize() {
- daoFacade.addBsqStateListener(this);
-
- createCyclesTable();
-
- hBox = new HBox();
- hBox.setSpacing(30);
- hBox.setFillHeight(true);
-
- proposalResultsGridPane = new ProposalResultsGridPane(this, bsqWalletService, daoFacade, bsqFormatter,
- bsqStateService);
- hBox.getChildren().add(proposalResultsGridPane);
-
- voteResultsGridPane = new VoteResultsGridPane(this, bsqWalletService, daoFacade, bsqStateService, preferences, bsqFormatter);
- hBox.getChildren().add(voteResultsGridPane);
-
- HBox.setHgrow(proposalResultsGridPane, Priority.ALWAYS);
- HBox.setHgrow(voteResultsGridPane, Priority.ALWAYS);
-
- selectedItemListener = (observable, oldValue, newValue) -> onResultsListItemSelected(newValue);
- }
-
- @Override
- protected void activate() {
- tableView.getSelectionModel().selectedItemProperty().addListener(selectedItemListener);
- fillCycleList();
- }
-
- @Override
- protected void deactivate() {
- tableView.getSelectionModel().selectedItemProperty().removeListener(selectedItemListener);
- }
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // SelectionListener
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- @Override
- public void onSelectedEvaluatedProposal(EvaluatedProposal evaluatedProposal) {
- voteResultsGridPane.onSelectedEvaluatedProposal(evaluatedProposal);
- }
-
- @Override
- public void onSelectedDecryptedVote(DecryptedVote decryptedVote) {
- proposalResultsGridPane.onSelectedDecryptedVote(decryptedVote);
- }
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // BsqStateListener
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- @Override
- public void onNewBlockHeight(int blockHeight) {
- fillCycleList();
- }
-
- @Override
- public void onEmptyBlockAdded(Block block) {
- }
-
- @Override
- public void onParseTxsComplete(Block block) {
- }
-
- @Override
- public void onParseBlockChainComplete() {
- }
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // UI handlers
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- private void onResultsListItemSelected(ResultsListItem item) {
- //removeDetailsViews();
- if (item != null) {
- ResultsOfCycle resultsOfCycle = item.getResultsOfCycle();
-
- GUIUtil.removeChildrenFromGridPaneRows(gridPane, 1, gridRow);
- gridRow = 1;
-
- // gridRow = votesPerProposalTableView.createAllFields(++gridRow, resultsOfCycle);
- proposalResultsGridPane.createAllFields(resultsOfCycle);
- voteResultsGridPane.createAllFields(resultsOfCycle);
-
- gridPane.getChildren().add(hBox);
-
- GridPane.setRowIndex(hBox, gridRow);
- GridPane.setMargin(hBox, new Insets(0, 0, 0, 0));
- GridPane.setColumnSpan(hBox, 2);
-
- // addParams(resultsOfCycle);
- }
- }
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // Create views
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- private void createCyclesTable() {
- gridPane = new GridPane();
-
- gridPane.setHgap(5);
- gridPane.setVgap(5);
-
- gridPane.setPadding(new Insets(15, 25, 10, 25));
-
- ColumnConstraints columnConstraints1 = new ColumnConstraints();
- columnConstraints1.setHalignment(HPos.RIGHT);
- columnConstraints1.setHgrow(Priority.SOMETIMES);
-
- columnConstraints1.setMinWidth(140);
-
- ColumnConstraints columnConstraints2 = new ColumnConstraints();
- columnConstraints2.setHgrow(Priority.ALWAYS);
- columnConstraints1.setMinWidth(300);
-
- gridPane.getColumnConstraints().addAll(columnConstraints1, columnConstraints2);
- scrollPane.setContent(gridPane);
-
- TableGroupHeadline headline = new TableGroupHeadline(Res.get("dao.results.cycles.header"));
- GridPane.setRowIndex(headline, gridRow);
- GridPane.setMargin(headline, new Insets(0, -10, -10, -10));
- GridPane.setColumnSpan(headline, 2);
- gridPane.getChildren().add(headline);
-
- tableView = new TableView<>();
- tableView.setPlaceholder(new AutoTooltipLabel(Res.get("table.placeholder.noData")));
- tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
-
- createColumns(tableView);
-
- GridPane.setRowIndex(tableView, gridRow);
- GridPane.setMargin(tableView, new Insets(20, -10, 5, -10));
- GridPane.setColumnSpan(tableView, 2);
- gridPane.getChildren().add(tableView);
-
- tableView.setItems(sortedList);
- sortedList.comparatorProperty().bind(tableView.comparatorProperty());
- }
-
- private void addParams(ResultsOfCycle resultsOfCycle) {
- //TODO
- AtomicInteger rowSpan = new AtomicInteger(2);
- TitledGroupBg header = FormBuilder.addTitledGroupBg(gridPane, ++gridRow, rowSpan.get(), Res.get("dao.results.cycle.header"), 20);
-
- int height = resultsOfCycle.getCycle().getHeightOfFirstBlock();
- gridRow--; // first item use same gridRow as header. as we use a ++ in the loop adjust by --.
- Arrays.stream(Param.values()).forEach(param -> {
- String label = null;
- long paramValue = bsqStateService.getParamValue(param, height);
- boolean isDefaultValue = param.getDefaultValue() == paramValue;
- String value = null;
- int top = (param == Param.BSQ_MAKER_FEE_IN_PERCENT) ? 40 : 0;
- switch (param) {
- case UNDEFINED:
- // ignore
- break;
-
- case BSQ_MAKER_FEE_IN_PERCENT:
- case BSQ_TAKER_FEE_IN_PERCENT:
- case BTC_MAKER_FEE_IN_PERCENT:
- case BTC_TAKER_FEE_IN_PERCENT:
- label = Res.getWithCol("dao.param." + param.name());
- value = bsqFormatter.formatToPercentWithSymbol(paramValue / 10000d);
- break;
-
- case PROPOSAL_FEE:
- label = Res.getWithCol("dao.param." + param.name());
- value = bsqFormatter.formatCoinWithCode(ProposalConsensus.getFee(bsqStateService, height));
- break;
- case BLIND_VOTE_FEE:
- label = Res.getWithCol("dao.param." + param.name());
- value = bsqFormatter.formatCoinWithCode(BlindVoteConsensus.getFee(bsqStateService, height));
- break;
-
- case QUORUM_PROPOSAL:
- case QUORUM_COMP_REQUEST:
- case QUORUM_CHANGE_PARAM:
- case QUORUM_REMOVE_ASSET:
- case QUORUM_CONFISCATION:
- label = Res.getWithCol("dao.param." + param.name());
- value = bsqFormatter.formatCoinWithCode(Coin.valueOf(paramValue));
- break;
- case THRESHOLD_PROPOSAL:
-
- case THRESHOLD_COMP_REQUEST:
- case THRESHOLD_CHANGE_PARAM:
- case THRESHOLD_REMOVE_ASSET:
- case THRESHOLD_CONFISCATION:
- label = Res.getWithCol("dao.param." + param.name());
- value = bsqFormatter.formatToPercentWithSymbol(paramValue / 10000d);
- break;
-
- case PHASE_UNDEFINED:
- // ignore
- break;
-
- case PHASE_PROPOSAL:
- case PHASE_BREAK1:
- case PHASE_BLIND_VOTE:
- case PHASE_BREAK2:
- case PHASE_VOTE_REVEAL:
- case PHASE_BREAK3:
- case PHASE_RESULT:
- case PHASE_BREAK4:
- String phase = Res.get("dao.phase." + param.name());
- label = Res.getWithCol("dao.results.cycle.duration.label", phase);
- value = Res.get("dao.results.cycle.duration.value", paramValue);
- break;
- }
- if (value != null) {
- String postFix = isDefaultValue ?
- Res.get("dao.results.cycle.value.postFix.isDefaultValue") :
- Res.get("dao.results.cycle.value.postFix.hasChanged");
- value += " " + postFix;
- addLabelTextField(gridPane, ++gridRow, label, value, top);
- rowSpan.getAndIncrement();
- }
- });
-
- GridPane.setRowSpan(header, rowSpan.get());
- }
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // Private
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- private void fillCycleList() {
- itemList.clear();
- bsqStateService.getCycles().forEach(this::addCycleListItem);
- Collections.reverse(itemList);
- GUIUtil.setFitToRowsForTableView(tableView, 24, 28, 80);
- }
-
- private void addCycleListItem(Cycle cycle) {
- List proposalsForCycle = proposalService.getAppendOnlyStoreList().stream()
- .filter(proposalPayload -> cycleService.isTxInCycle(cycle, proposalPayload.getProposal().getTxId()))
- .map(ProposalPayload::getProposal)
- .collect(Collectors.toList());
-
- List evaluatedProposalsForCycle = voteResultService.getAllEvaluatedProposals().stream()
- .filter(evaluatedProposal -> cycleService.isTxInCycle(cycle, evaluatedProposal.getProposal().getTxId()))
- .collect(Collectors.toList());
-
- List decryptedVotesForCycle = voteResultService.getAllDecryptedVotes().stream()
- .filter(decryptedVote -> cycleService.isTxInCycle(cycle, decryptedVote.getBlindVoteTxId()))
- .filter(decryptedVote -> cycleService.isTxInCycle(cycle, decryptedVote.getVoteRevealTxId()))
- .collect(Collectors.toList());
-
- long cycleStartTime = bsqStateService.getBlockAtHeight(cycle.getHeightOfFirstBlock())
- .map(e -> e.getTime() * 1000)
- .orElse(0L);
- int cycleIndex = cycleService.getCycleIndex(cycle);
- ResultsOfCycle resultsOfCycle = new ResultsOfCycle(cycle,
- cycleIndex,
- cycleStartTime,
- proposalsForCycle,
- evaluatedProposalsForCycle,
- decryptedVotesForCycle);
- ResultsListItem resultsListItem = new ResultsListItem(resultsOfCycle, bsqStateService, bsqFormatter);
- itemList.add(resultsListItem);
- }
-
- private void removeDetailsViews() {
- GUIUtil.removeChildrenFromGridPaneRows(gridPane, 1, gridRow);
- gridRow = 0;
- }
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // TableColumns
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- private void createColumns(TableView tableView) {
- TableColumn cycleColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.cycles.table.header.cycle"));
- cycleColumn.setMinWidth(160);
- cycleColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- cycleColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final ResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getCycle());
- else
- setText("");
- }
- };
- }
- });
- cycleColumn.setComparator(Comparator.comparing(ResultsListItem::getCycleStartTime));
- tableView.getColumns().add(cycleColumn);
-
- TableColumn proposalsColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.cycles.table.header.numProposals"));
- proposalsColumn.setMinWidth(90);
- proposalsColumn.setMaxWidth(90);
- proposalsColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- proposalsColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final ResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getNumProposals());
- else
- setText("");
- }
- };
- }
- });
- proposalsColumn.setComparator(Comparator.comparing(ResultsListItem::getNumProposals));
- tableView.getColumns().add(proposalsColumn);
-
- TableColumn votesColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.cycles.table.header.numVotes"));
- votesColumn.setMinWidth(70);
- votesColumn.setMaxWidth(70);
- votesColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- votesColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final ResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getNumVotesAsString());
- else
- setText("");
- }
- };
- }
- });
- votesColumn.setComparator(Comparator.comparing(ResultsListItem::getNumProposals));
- tableView.getColumns().add(votesColumn);
-
- TableColumn stakeColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.cycles.table.header.stake"));
- stakeColumn.setMinWidth(70);
- stakeColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- stakeColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final ResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getStake());
- else
- setText("");
- }
- };
- }
- });
- stakeColumn.setComparator(Comparator.comparing(ResultsListItem::getNumProposals));
- tableView.getColumns().add(stakeColumn);
-
- TableColumn issuanceColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.cycles.table.header.issuance"));
- issuanceColumn.setMinWidth(70);
- issuanceColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- issuanceColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final ResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getIssuance());
- else
- setText("");
- }
- };
- }
- });
- issuanceColumn.setComparator(Comparator.comparing(ResultsListItem::getNumProposals));
- tableView.getColumns().add(issuanceColumn);
- }
-}
diff --git a/src/main/java/bisq/desktop/main/dao/results/SelectionListener.java b/src/main/java/bisq/desktop/main/dao/results/SelectionListener.java
deleted file mode 100644
index 7a57dc21e8..0000000000
--- a/src/main/java/bisq/desktop/main/dao/results/SelectionListener.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * This file is part of Bisq.
- *
- * Bisq is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * Bisq is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Bisq. If not, see .
- */
-
-package bisq.desktop.main.dao.results;
-
-import bisq.core.dao.voting.voteresult.DecryptedVote;
-import bisq.core.dao.voting.voteresult.EvaluatedProposal;
-
-public interface SelectionListener {
-
- void onSelectedEvaluatedProposal(EvaluatedProposal evaluatedProposal);
-
- void onSelectedDecryptedVote(DecryptedVote decryptedVote);
-}
diff --git a/src/main/java/bisq/desktop/main/dao/results/combo/EvaluatedProposalWithDecryptedVotes.java b/src/main/java/bisq/desktop/main/dao/results/combo/EvaluatedProposalWithDecryptedVotes.java
deleted file mode 100644
index 1adcc63027..0000000000
--- a/src/main/java/bisq/desktop/main/dao/results/combo/EvaluatedProposalWithDecryptedVotes.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * This file is part of Bisq.
- *
- * Bisq is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * Bisq is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Bisq. If not, see .
- */
-
-package bisq.desktop.main.dao.results.combo;
-
-import bisq.core.dao.voting.voteresult.DecryptedVote;
-import bisq.core.dao.voting.voteresult.EvaluatedProposal;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import lombok.Data;
-
-@Data
-public class EvaluatedProposalWithDecryptedVotes {
- private final EvaluatedProposal evaluatedProposal;
- private Map decryptedVotesByBlindVoteTxId = new HashMap<>();
-
- public EvaluatedProposalWithDecryptedVotes(EvaluatedProposal evaluatedProposal) {
- this.evaluatedProposal = evaluatedProposal;
- }
-
- public void addDecryptedVote(DecryptedVote decryptedVote) {
- decryptedVotesByBlindVoteTxId.put(decryptedVote.getBlindVoteTxId(), decryptedVote);
- }
-}
diff --git a/src/main/java/bisq/desktop/main/dao/results/combo/VotesPerProposalListItem.java b/src/main/java/bisq/desktop/main/dao/results/combo/VotesPerProposalListItem.java
deleted file mode 100644
index 2a039c3f52..0000000000
--- a/src/main/java/bisq/desktop/main/dao/results/combo/VotesPerProposalListItem.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * This file is part of Bisq.
- *
- * Bisq is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * Bisq is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Bisq. If not, see .
- */
-
-package bisq.desktop.main.dao.results.combo;
-
-import bisq.core.dao.voting.ballot.Ballot;
-import bisq.core.dao.voting.ballot.vote.BooleanVote;
-import bisq.core.dao.voting.proposal.Proposal;
-import bisq.core.dao.voting.voteresult.DecryptedVote;
-
-import bisq.common.util.Tuple2;
-
-import de.jensd.fx.fontawesome.AwesomeIcon;
-
-import java.util.Map;
-import java.util.Optional;
-
-import lombok.Getter;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public class VotesPerProposalListItem {
- @Getter
- private final EvaluatedProposalWithDecryptedVotes evaluatedProposalWithDecryptedVotes;
- @Getter
- private final Proposal proposal;
- private final String proposalTxId;
-
- public VotesPerProposalListItem(EvaluatedProposalWithDecryptedVotes evaluatedProposalWithDecryptedVotes) {
- this.evaluatedProposalWithDecryptedVotes = evaluatedProposalWithDecryptedVotes;
- proposal = evaluatedProposalWithDecryptedVotes.getEvaluatedProposal().getProposal();
- proposalTxId = proposal.getTxId();
- }
-
- public String getProposalInfo() {
- return proposal.getName();
- }
-
- public Tuple2 getIconStyleTuple(String blindVoteTxId) {
- Optional isAccepted = Optional.empty();
- Map map = evaluatedProposalWithDecryptedVotes.getDecryptedVotesByBlindVoteTxId();
- if (map.containsKey(blindVoteTxId)) {
- DecryptedVote decryptedVote = map.get(blindVoteTxId);
- isAccepted = decryptedVote.getBallotList().stream()
- .filter(ballot -> ballot.getProposalTxId().equals(proposalTxId))
- .map(Ballot::getVote)
- .filter(vote -> vote instanceof BooleanVote)
- .map(vote -> (BooleanVote) vote)
- .map(BooleanVote::isAccepted)
- .findAny();
- }
- if (isAccepted.isPresent()) {
- if (isAccepted.get())
- return new Tuple2<>(AwesomeIcon.THUMBS_UP, "dao-accepted-icon");
- else
- return new Tuple2<>(AwesomeIcon.THUMBS_DOWN, "dao-rejected-icon");
- } else {
- return new Tuple2<>(AwesomeIcon.MINUS, "dao-ignored-icon");
- }
- }
-}
diff --git a/src/main/java/bisq/desktop/main/dao/results/combo/VotesPerProposalTableView.java b/src/main/java/bisq/desktop/main/dao/results/combo/VotesPerProposalTableView.java
deleted file mode 100644
index d53316ea3d..0000000000
--- a/src/main/java/bisq/desktop/main/dao/results/combo/VotesPerProposalTableView.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * This file is part of Bisq.
- *
- * Bisq is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * Bisq is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Bisq. If not, see .
- */
-
-package bisq.desktop.main.dao.results.combo;
-
-import bisq.desktop.components.AutoTooltipTableColumn;
-import bisq.desktop.main.dao.proposal.ProposalWindow;
-import bisq.desktop.main.dao.results.BaseResultsTableView;
-import bisq.desktop.main.dao.results.model.ResultsOfCycle;
-import bisq.desktop.util.GUIUtil;
-
-import bisq.core.btc.wallet.BsqWalletService;
-import bisq.core.dao.DaoFacade;
-import bisq.core.dao.state.BsqStateService;
-import bisq.core.dao.voting.voteresult.DecryptedVote;
-import bisq.core.dao.voting.voteresult.EvaluatedProposal;
-import bisq.core.locale.Res;
-import bisq.core.util.BsqFormatter;
-
-import bisq.common.util.Tuple2;
-
-import org.bitcoinj.core.Coin;
-
-import de.jensd.fx.fontawesome.AwesomeDude;
-import de.jensd.fx.fontawesome.AwesomeIcon;
-
-import javafx.scene.control.Hyperlink;
-import javafx.scene.control.Label;
-import javafx.scene.control.TableCell;
-import javafx.scene.control.TableColumn;
-import javafx.scene.control.TableView;
-import javafx.scene.control.Tooltip;
-import javafx.scene.layout.GridPane;
-
-import javafx.beans.property.ReadOnlyObjectWrapper;
-
-import javafx.util.Callback;
-
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.stream.Collectors;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public class VotesPerProposalTableView extends BaseResultsTableView {
-
- private final BsqStateService bsqStateService;
-
- public VotesPerProposalTableView(GridPane gridPane, BsqWalletService bsqWalletService, DaoFacade daoFacade,
- BsqStateService bsqStateService, BsqFormatter bsqFormatter) {
- super(gridPane, bsqWalletService, daoFacade, bsqFormatter);
- this.bsqStateService = bsqStateService;
- }
-
- @Override
- protected String getTitle() {
- return Res.get("dao.results.combo.header");
- }
-
- @Override
- protected void fillList() {
- //TODO move to domain
- Map map = resultsOfCycle.getEvaluatedProposals().stream()
- .collect(Collectors.toMap(EvaluatedProposal::getProposalTxId,
- EvaluatedProposalWithDecryptedVotes::new));
-
- resultsOfCycle.getDecryptedVotesForCycle()
- .forEach(decryptedVote -> {
- decryptedVote.getBallotList().stream().forEach(ballot -> {
- EvaluatedProposalWithDecryptedVotes evaluatedProposalWithDecryptedVotes = map.get(ballot.getProposalTxId());
- evaluatedProposalWithDecryptedVotes.addDecryptedVote(decryptedVote);
- });
- });
-
- itemList.setAll(map.values().stream()
- .map(VotesPerProposalListItem::new)
- .collect(Collectors.toList()));
-
- itemList.sort(Comparator.comparing(votesPerProposalListItem -> votesPerProposalListItem.getProposal().getCreationDate()));
- }
-
-
- public int createAllFields(int gridRowStartIndex, ResultsOfCycle resultsOfCycle) {
- super.createAllFields(gridRowStartIndex, resultsOfCycle);
-
- createColumnsFromData(tableView);
-
- GUIUtil.setFitToRowsForTableView(tableView, 30, 28, 80);
-
- return gridRow;
- }
-
- private void createColumnsFromData(TableView tableView) {
- TableColumn votesColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.combo.table.proposals"));
- votesColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- votesColumn.setSortable(false);
- votesColumn.setMinWidth(150);
- votesColumn.setCellFactory(
- new Callback, TableCell>() {
-
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- private Hyperlink hyperlinkWithIcon;
-
- @Override
- public void updateItem(final VotesPerProposalListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null && !empty) {
- hyperlinkWithIcon = new Hyperlink(item.getProposalInfo());
- hyperlinkWithIcon.setOnAction(event -> new ProposalWindow(bsqFormatter,
- bsqWalletService,
- item.getEvaluatedProposalWithDecryptedVotes().getEvaluatedProposal().getProposal(),
- daoFacade)
- .show());
- hyperlinkWithIcon.setTooltip(new Tooltip(Res.get("tooltip.openPopupForDetails")));
-
- setGraphic(hyperlinkWithIcon);
- } else {
- setGraphic(null);
- if (hyperlinkWithIcon != null)
- hyperlinkWithIcon.setOnAction(null);
- }
- }
- };
- }
- });
- tableView.getColumns().add(votesColumn);
-
- List list = new ArrayList<>(resultsOfCycle.getDecryptedVotesForCycle());
- list.sort(Comparator.comparing(DecryptedVote::getBlindVoteTxId));
- AtomicInteger index = new AtomicInteger();
- list.forEach(decryptedVote -> {
- index.getAndIncrement();
- String stake = bsqFormatter.formatCoinWithCode(Coin.valueOf(decryptedVote.getStake() + decryptedVote.getMerit(bsqStateService)));
- String header = "Vote " + index.get() + " (" + stake + ")";
- TableColumn column = new AutoTooltipTableColumn<>(header);
- column.setSortable(false);
- column.setMinWidth(150);
- column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- column.setCellFactory(
- new Callback, TableCell>() {
-
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- private Label icon;
-
- @Override
- public void updateItem(final VotesPerProposalListItem item, boolean empty) {
- super.updateItem(item, empty);
-
- if (item != null && !empty) {
- String blindVoteTxId = decryptedVote.getBlindVoteTxId();
- Tuple2 iconStyleTuple = item.getIconStyleTuple(blindVoteTxId);
- icon = new Label();
- AwesomeDude.setIcon(icon, iconStyleTuple.first);
- icon.getStyleClass().add(iconStyleTuple.second);
- setGraphic(icon);
- } else {
- setGraphic(null);
- }
- }
- };
- }
- });
- tableView.getColumns().add(column);
- });
- }
-
- @Override
- protected void createColumns(TableView tableView) {
- // do nothing as we create the columns dynamically
- }
-}
diff --git a/src/main/java/bisq/desktop/main/dao/results/proposals/ProposalResultsGridPane.java b/src/main/java/bisq/desktop/main/dao/results/proposals/ProposalResultsGridPane.java
deleted file mode 100644
index 58f4dcfdd7..0000000000
--- a/src/main/java/bisq/desktop/main/dao/results/proposals/ProposalResultsGridPane.java
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
- * This file is part of Bisq.
- *
- * Bisq is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * Bisq is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Bisq. If not, see .
- */
-
-package bisq.desktop.main.dao.results.proposals;
-
-import bisq.desktop.components.AutoTooltipTableColumn;
-import bisq.desktop.main.dao.results.BaseResultsGridPane;
-import bisq.desktop.main.dao.results.SelectionListener;
-
-import bisq.core.btc.wallet.BsqWalletService;
-import bisq.core.dao.DaoFacade;
-import bisq.core.dao.state.BsqStateService;
-import bisq.core.dao.voting.voteresult.DecryptedVote;
-import bisq.core.locale.Res;
-import bisq.core.util.BsqFormatter;
-
-import de.jensd.fx.fontawesome.AwesomeDude;
-import de.jensd.fx.fontawesome.AwesomeIcon;
-
-import javafx.scene.control.Button;
-import javafx.scene.control.Label;
-import javafx.scene.control.TableCell;
-import javafx.scene.control.TableColumn;
-import javafx.scene.control.TableView;
-import javafx.scene.control.Tooltip;
-
-import javafx.beans.property.ReadOnlyObjectWrapper;
-
-import javafx.util.Callback;
-
-import java.util.Comparator;
-import java.util.stream.Collectors;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public class ProposalResultsGridPane extends BaseResultsGridPane {
-
- private SelectionListener selectionListener;
- private final BsqStateService bsqStateService;
-
- public ProposalResultsGridPane(SelectionListener selectionListener,
- BsqWalletService bsqWalletService, DaoFacade daoFacade, BsqFormatter bsqFormatter,
- BsqStateService bsqStateService) {
- super(bsqWalletService, daoFacade, bsqFormatter, 0);
- this.selectionListener = selectionListener;
- this.bsqStateService = bsqStateService;
- }
-
- @Override
- protected void onSelected(ProposalResultsListItem item) {
- itemList.forEach(ProposalResultsListItem::resetTableRow);
-
- if (item != null)
- selectionListener.onSelectedEvaluatedProposal(item.getEvaluatedProposal());
- }
-
- public void onSelectedDecryptedVote(DecryptedVote decryptedVote) {
- itemList.forEach(item -> item.applyVoteAndProposal(decryptedVote, item.getEvaluatedProposal()));
- }
-
- @Override
- protected void fillList() {
- itemList.forEach(ProposalResultsListItem::resetTableRow);
-
- itemList.setAll(resultsOfCycle.getEvaluatedProposals().stream()
- .map(e -> new ProposalResultsListItem(e, bsqFormatter))
- .collect(Collectors.toList()));
-
- itemList.sort(Comparator.comparing(proposalResultsListItem -> proposalResultsListItem.getEvaluatedProposal().getProposal().getCreationDate()));
- }
-
- @Override
- protected String getTitle() {
- return Res.get("dao.results.proposals.header");
- }
-
- @Override
- protected void createColumns(TableView tableView) {
- TableColumn nameColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.proposals.table.header.proposalOwnerName"));
- nameColumn.setMinWidth(110);
- nameColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- nameColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
-
- @Override
- public void updateItem(final ProposalResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null) {
- item.setTableRow(getTableRow());
- setText(item.getProposalOwnerName());
- } else {
- setText("");
- }
- }
- };
- }
- });
- nameColumn.setComparator(Comparator.comparing(ProposalResultsListItem::getProposalOwnerName));
- tableView.getColumns().add(nameColumn);
-
-
- TableColumn issuanceColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.proposals.table.header.issuance"));
- issuanceColumn.setMinWidth(100);
- issuanceColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- issuanceColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final ProposalResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getIssuance());
- else
- setText("");
- }
- };
- }
- });
- issuanceColumn.setComparator(Comparator.comparing(ProposalResultsListItem::getThreshold));
- tableView.getColumns().add(issuanceColumn);
-
- TableColumn resultColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.proposals.table.header.result"));
- resultColumn.setMinWidth(60);
- resultColumn.setMaxWidth(60);
- resultColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- resultColumn.setCellFactory(new Callback,
- TableCell>() {
- @Override
- public TableCell call(TableColumn column) {
- return new TableCell() {
- Label icon;
-
- @Override
- public void updateItem(final ProposalResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
-
- if (item != null && !empty) {
- icon = new Label();
- AwesomeDude.setIcon(icon, item.getIcon());
- icon.getStyleClass().add(item.getColorStyleClass());
- setGraphic(icon);
- } else {
- setGraphic(null);
- if (icon != null)
- icon = null;
- }
- }
- };
- }
- });
- tableView.getColumns().add(resultColumn);
-
-
- TableColumn detailsColumn = new TableColumn<>();
- detailsColumn.setMinWidth(60);
- detailsColumn.setMaxWidth(60);
- detailsColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- detailsColumn.setCellFactory(new Callback,
- TableCell>() {
- @Override
- public TableCell call(TableColumn column) {
- return new TableCell() {
- Label icon;
- Button button;
-
- @Override
- public void updateItem(final ProposalResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
-
- if (item != null && !empty) {
- icon = new Label();
- AwesomeDude.setIcon(icon, AwesomeIcon.INFO_SIGN);
- icon.setTooltip(new Tooltip(Res.get("tooltip.openPopupForDetails")));
- icon.getStyleClass().add("info-icon");
-
- button = new Button("", icon);
- button.getStyleClass().add("info-icon-button");
- button.setOnAction(e -> {
- new VoteResultsForProposalWindow(resultsOfCycle,
- item.getEvaluatedProposal().getProposal(),
- bsqStateService,
- bsqFormatter)
- .show();
- });
- setGraphic(button);
- } else {
- setGraphic(null);
- if (icon != null)
- icon = null;
- if (button != null)
- button = null;
- }
- }
- };
- }
- });
- tableView.getColumns().add(detailsColumn);
-
-
-
-
- /* TableColumn idColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.proposals.table.header.proposalId"));
- idColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- idColumn.setMinWidth(100);
- idColumn.setCellFactory(
- new Callback, TableCell>() {
-
- @Override
- public TableCell call(TableColumn column) {
- return new TableCell() {
- private Hyperlink field;
-
- @Override
- public void updateItem(final ProposalResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
-
- // cycleDetailsWindow.show(item.getEvaluatedProposal())
- if (item != null && !empty) {
- field = new Hyperlink(item.getProposalId());
-
- //TODO setId or getStyleClass.add does not apply color...
- //field.getStyleClass().add(item.getColorStyleClass());
- //field.setId(item.getColorStyleClass());
- field.setStyle(item.getColorStyle());
- field.setOnAction(event -> new ProposalWindow(bsqFormatter,
- bsqWalletService,
- item.getEvaluatedProposal().getProposal(),
- daoFacade)
- .show());
- field.setTooltip(new Tooltip(Res.get("tooltip.openPopupForDetails")));
- setGraphic(field);
- } else {
- setGraphic(null);
- if (field != null)
- field.setOnAction(null);
- }
- }
- };
- }
- });
- idColumn.setComparator(Comparator.comparing(ProposalResultsListItem::getProposalOwnerName));
- tableView.getColumns().add(idColumn);*/
-
- /* TableColumn acceptedColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.proposals.table.header.accepted"));
- acceptedColumn.setMinWidth(80);
- acceptedColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- acceptedColumn.setCellFactory(
- new Callback, TableCell>() {
- private Hyperlink field;
-
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final ProposalResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null && !empty) {
- field = new Hyperlink(item.getAccepted());
- field.setStyle(item.getColorStyle());
- field.setOnAction(event -> new VoteResultsForProposalWindow(resultsOfCycle,
- item.getEvaluatedProposal().getProposal(),
- bsqStateService,
- bsqFormatter)
- .show());
- field.setTooltip(new Tooltip(Res.get("tooltip.openPopupForDetails")));
- setGraphic(field);
- } else {
- setGraphic(null);
-
- //TODO does get called on active items somehow...
- //if (field != null)
- // field.setOnAction(null);
- }
- }
- };
- }
- });
- acceptedColumn.setComparator(Comparator.comparing(ProposalResultsListItem::getAccepted));
- tableView.getColumns().add(acceptedColumn);
-
- TableColumn rejectedColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.proposals.table.header.rejected"));
- rejectedColumn.setMinWidth(80);
- rejectedColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- rejectedColumn.setCellFactory(
- new Callback, TableCell>() {
- private Hyperlink field;
-
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final ProposalResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null && !empty) {
- field = new Hyperlink(item.getRejected());
- field.setStyle(item.getColorStyle());
- field.setOnAction(event -> new VoteResultsForProposalWindow(resultsOfCycle,
- item.getEvaluatedProposal().getProposal(),
- bsqStateService,
- bsqFormatter)
- .show());
- field.setTooltip(new Tooltip(Res.get("tooltip.openPopupForDetails")));
- setGraphic(field);
- } else {
- setGraphic(null);
- //TODO does get called on active items somehow...
- //if (field != null)
- // field.setOnAction(null);
- }
- }
- };
- }
- });
- rejectedColumn.setComparator(Comparator.comparing(ProposalResultsListItem::getRejected));
- tableView.getColumns().add(rejectedColumn);*/
-
- /* TableColumn thresholdColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.proposals.table.header.threshold"));
- thresholdColumn.setMinWidth(100);
- thresholdColumn.setMaxWidth(100);
- thresholdColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- thresholdColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final ProposalResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getThreshold());
- else
- setText("");
- }
- };
- }
- });
- thresholdColumn.setComparator(Comparator.comparing(ProposalResultsListItem::getThreshold));
- tableView.getColumns().add(thresholdColumn);*/
-
- /* TableColumn quorumColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.proposals.table.header.quorum"));
- quorumColumn.setMinWidth(130);
- quorumColumn.setMaxWidth(130);
- quorumColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- quorumColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final ProposalResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getQuorum());
- else
- setText("");
- }
- };
- }
- });
- quorumColumn.setComparator(Comparator.comparing(ProposalResultsListItem::getThreshold));
- tableView.getColumns().add(quorumColumn);*/
- }
-}
diff --git a/src/main/java/bisq/desktop/main/dao/results/proposals/VoteResultsForProposalWindow.java b/src/main/java/bisq/desktop/main/dao/results/proposals/VoteResultsForProposalWindow.java
deleted file mode 100644
index 041c7cab4f..0000000000
--- a/src/main/java/bisq/desktop/main/dao/results/proposals/VoteResultsForProposalWindow.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * This file is part of Bisq.
- *
- * Bisq is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * Bisq is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Bisq. If not, see .
- */
-
-package bisq.desktop.main.dao.results.proposals;
-
-import bisq.desktop.components.AutoTooltipLabel;
-import bisq.desktop.components.AutoTooltipTableColumn;
-import bisq.desktop.components.TableGroupHeadline;
-import bisq.desktop.main.MainView;
-import bisq.desktop.main.dao.results.model.ResultsOfCycle;
-import bisq.desktop.main.overlays.Overlay;
-import bisq.desktop.util.FormBuilder;
-import bisq.desktop.util.GUIUtil;
-
-import bisq.core.dao.state.BsqStateService;
-import bisq.core.dao.voting.proposal.Proposal;
-import bisq.core.locale.Res;
-import bisq.core.util.BsqFormatter;
-
-import bisq.common.util.Tuple2;
-
-import de.jensd.fx.fontawesome.AwesomeDude;
-import de.jensd.fx.fontawesome.AwesomeIcon;
-
-import javafx.scene.control.Button;
-import javafx.scene.control.Label;
-import javafx.scene.control.TableCell;
-import javafx.scene.control.TableColumn;
-import javafx.scene.control.TableView;
-import javafx.scene.layout.GridPane;
-
-import javafx.geometry.HPos;
-import javafx.geometry.Insets;
-
-import javafx.beans.property.ReadOnlyObjectWrapper;
-
-import javafx.collections.FXCollections;
-import javafx.collections.ObservableList;
-import javafx.collections.transformation.SortedList;
-
-import javafx.util.Callback;
-
-import java.util.Comparator;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public class VoteResultsForProposalWindow extends Overlay {
- private Proposal proposal;
- private BsqStateService bsqStateService;
- private final BsqFormatter bsqFormatter;
-
- private TableView tableView;
- private int gridRow = 0;
- private final ObservableList itemList = FXCollections.observableArrayList();
- private final SortedList sortedList = new SortedList<>(itemList);
- protected ResultsOfCycle resultsOfCycle;
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // Public API
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- public VoteResultsForProposalWindow(ResultsOfCycle resultsOfCycle,
- Proposal proposal,
- BsqStateService bsqStateService,
- BsqFormatter bsqFormatter) {
- this.resultsOfCycle = resultsOfCycle;
- this.proposal = proposal;
- this.bsqStateService = bsqStateService;
- this.bsqFormatter = bsqFormatter;
- type = Type.Confirmation;
- }
-
- @Override
- public void show() {
- width = MainView.getRootContainer().getWidth() - 20;
-
- createGridPane();
- addContent();
- display();
- }
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // Protected
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- @Override
- protected void createGridPane() {
- super.createGridPane();
-
- gridPane.setPadding(new Insets(35, 40, 30, 40));
- gridPane.getStyleClass().add("grid-pane");
- }
-
- private void addContent() {
- TableGroupHeadline headline = new TableGroupHeadline(Res.get("dao.results.proposals.voting.detail.header"));
- GridPane.setRowIndex(headline, gridRow);
- GridPane.setMargin(headline, new Insets(0, -10, -10, -10));
- GridPane.setColumnSpan(headline, 2);
- gridPane.getChildren().add(headline);
-
- // For some weird reason the stage key handler (ESC, ENTER) does not work as soon a tableView gets added...
- tableView = new TableView<>();
- tableView.setPlaceholder(new AutoTooltipLabel(Res.get("table.placeholder.noData")));
- tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
-
- createColumns(tableView);
- GridPane.setRowIndex(tableView, gridRow);
- GridPane.setMargin(tableView, new Insets(20, -10, 5, -10));
- GridPane.setColumnSpan(tableView, 2);
- gridPane.getChildren().add(tableView);
-
- tableView.setItems(sortedList);
- sortedList.comparatorProperty().bind(tableView.comparatorProperty());
-
- fillList();
-
- GUIUtil.setFitToRowsForTableView(tableView, 24, 28, 150);
-
- // Somehow setting the margin for closeButton does not work here as expected. adding a row does give us the desired layout...
- ++rowIndex;
- Button closeButton = FormBuilder.addButton(gridPane, ++rowIndex, Res.get("shared.close"));
- GridPane.setHalignment(closeButton, HPos.RIGHT);
- closeButton.setOnAction(e -> {
- closeHandlerOptional.ifPresent(Runnable::run);
- hide();
- });
- }
-
- private void fillList() {
- itemList.clear();
-
- resultsOfCycle.getEvaluatedProposals().stream()
- .filter(evaluatedProposal -> evaluatedProposal.getProposal().equals(proposal))
- .forEach(evaluatedProposal -> {
- resultsOfCycle.getDecryptedVotesForCycle().forEach(decryptedVote -> {
- itemList.add(new VoteResultsForProposalListItem(evaluatedProposal.getProposal(), decryptedVote,
- bsqStateService, bsqFormatter));
- });
- });
-
- itemList.sort(Comparator.comparing(item -> item.getBlindVoteTxId()));
- }
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // TableColumns
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- private void createColumns(TableView tableView) {
- TableColumn blindVoteTxIdColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.votes.table.header.blindVoteTxId"));
- blindVoteTxIdColumn.setSortable(false);
- blindVoteTxIdColumn.setMinWidth(150);
- blindVoteTxIdColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- blindVoteTxIdColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final VoteResultsForProposalListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getBlindVoteTxId());
- else
- setText("");
- }
- };
- }
- });
- tableView.getColumns().add(blindVoteTxIdColumn);
-
- TableColumn voteColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.votes.table.header.vote"));
- voteColumn.setSortable(false);
- voteColumn.setMinWidth(150);
- voteColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- voteColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- private Label icon;
-
- @Override
- public void updateItem(final VoteResultsForProposalListItem item, boolean empty) {
- super.updateItem(item, empty);
-
- if (item != null && !empty) {
- Tuple2 iconStyleTuple = item.getIconStyleTuple();
- icon = new Label();
- AwesomeDude.setIcon(icon, iconStyleTuple.first);
- icon.getStyleClass().add(iconStyleTuple.second);
- setGraphic(icon);
- } else {
- setGraphic(null);
- }
- }
- };
- }
- });
- tableView.getColumns().add(voteColumn);
-
- TableColumn meritColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.votes.table.header.merit"));
- meritColumn.setSortable(false);
- meritColumn.setMinWidth(150);
- meritColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- meritColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final VoteResultsForProposalListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getMerit());
- else
- setText("");
- }
- };
- }
- });
- tableView.getColumns().add(meritColumn);
-
- TableColumn stakeColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.votes.table.header.stake"));
- stakeColumn.setSortable(false);
- stakeColumn.setMinWidth(150);
- stakeColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- stakeColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final VoteResultsForProposalListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getStake());
- else
- setText("");
- }
- };
- }
- });
- tableView.getColumns().add(stakeColumn);
- }
-}
diff --git a/src/main/java/bisq/desktop/main/dao/results/votes/VoteResultsGridPane.java b/src/main/java/bisq/desktop/main/dao/results/votes/VoteResultsGridPane.java
deleted file mode 100644
index a2564fac77..0000000000
--- a/src/main/java/bisq/desktop/main/dao/results/votes/VoteResultsGridPane.java
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
- * This file is part of Bisq.
- *
- * Bisq is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * Bisq is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Bisq. If not, see .
- */
-
-package bisq.desktop.main.dao.results.votes;
-
-import bisq.desktop.components.AutoTooltipTableColumn;
-import bisq.desktop.main.dao.results.BaseResultsGridPane;
-import bisq.desktop.main.dao.results.SelectionListener;
-import bisq.desktop.util.GUIUtil;
-
-import bisq.core.btc.wallet.BsqWalletService;
-import bisq.core.dao.DaoFacade;
-import bisq.core.dao.state.BsqStateService;
-import bisq.core.dao.voting.voteresult.DecryptedVote;
-import bisq.core.dao.voting.voteresult.EvaluatedProposal;
-import bisq.core.locale.Res;
-import bisq.core.user.Preferences;
-import bisq.core.util.BsqFormatter;
-
-import de.jensd.fx.fontawesome.AwesomeDude;
-import de.jensd.fx.fontawesome.AwesomeIcon;
-
-import javafx.scene.control.Button;
-import javafx.scene.control.Label;
-import javafx.scene.control.TableCell;
-import javafx.scene.control.TableColumn;
-import javafx.scene.control.TableView;
-import javafx.scene.control.Tooltip;
-
-import javafx.beans.property.ReadOnlyObjectWrapper;
-
-import javafx.util.Callback;
-
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.stream.Collectors;
-
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public class VoteResultsGridPane extends BaseResultsGridPane {
- private SelectionListener selectionListener;
- private final BsqStateService bsqStateService;
- private final Preferences preferences;
-
- public VoteResultsGridPane(SelectionListener selectionListener,
- BsqWalletService bsqWalletService, DaoFacade daoFacade,
- BsqStateService bsqStateService, Preferences preferences, BsqFormatter bsqFormatter) {
- super(bsqWalletService, daoFacade, bsqFormatter, 1);
- this.selectionListener = selectionListener;
-
- this.bsqStateService = bsqStateService;
- this.preferences = preferences;
- }
-
- @Override
- protected void onSelected(VoteResultsListItem item) {
- itemList.forEach(VoteResultsListItem::resetTableRow);
-
- if (item != null)
- selectionListener.onSelectedDecryptedVote(item.getDecryptedVote());
- }
-
- public void onSelectedEvaluatedProposal(EvaluatedProposal evaluatedProposal) {
- itemList.forEach(item -> item.applyVoteAndProposal(item.getDecryptedVote(), evaluatedProposal));
- }
-
- @Override
- protected void fillList() {
- itemList.forEach(VoteResultsListItem::resetTableRow);
-
- List decryptedVotesForCycle = new ArrayList<>(resultsOfCycle.getDecryptedVotesForCycle());
- decryptedVotesForCycle.sort(Comparator.comparing(DecryptedVote::getBlindVoteTxId));
- AtomicInteger index = new AtomicInteger();
- itemList.setAll(decryptedVotesForCycle.stream()
- .map(decryptedVote -> {
- int id = index.incrementAndGet();
- return new VoteResultsListItem(id, decryptedVote, bsqStateService, bsqFormatter);
- })
- .collect(Collectors.toList()));
- }
-
- @Override
- protected String getTitle() {
- return Res.get("dao.results.votes.header");
- }
-
- @Override
- protected void createColumns(TableView tableView) {
- TableColumn stakeAndMeritColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.votes.table.header.stakeAndMerit"));
- stakeAndMeritColumn.setMinWidth(90);
- stakeAndMeritColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- stakeAndMeritColumn.setCellFactory(
- new Callback, TableCell>() {
-
-
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final VoteResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null) {
- item.setTableRow(getTableRow());
- setText(item.getStakeAndMerit());
- } else {
- setText("");
- }
- }
- };
- }
- });
- stakeAndMeritColumn.setComparator(Comparator.comparing(VoteResultsListItem::getStakeAsCoin));
- tableView.getColumns().add(stakeAndMeritColumn);
-
- TableColumn stakeColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.votes.table.header.stake"));
- stakeColumn.setMinWidth(90);
- stakeColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- stakeColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final VoteResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getStake());
- else
- setText("");
- }
- };
- }
- });
- stakeColumn.setComparator(Comparator.comparing(VoteResultsListItem::getStakeAsCoin));
- tableView.getColumns().add(stakeColumn);
-
- TableColumn meritColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.votes.table.header.merit"));
- meritColumn.setMinWidth(90);
- meritColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- meritColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final VoteResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getMerit());
- else
- setText("");
- }
- };
- }
- });
- meritColumn.setComparator(Comparator.comparing(VoteResultsListItem::getMeritAsCoin));
- tableView.getColumns().add(meritColumn);
-
-
- TableColumn detailsColumn = new TableColumn<>();
- detailsColumn.setMinWidth(60);
- detailsColumn.setMaxWidth(60);
- detailsColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- detailsColumn.setCellFactory(new Callback,
- TableCell>() {
- @Override
- public TableCell call(TableColumn column) {
- return new TableCell() {
- Label icon;
- Button button;
-
- @Override
- public void updateItem(final VoteResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
-
- if (item != null && !empty) {
- icon = new Label();
- AwesomeDude.setIcon(icon, AwesomeIcon.INFO_SIGN);
- icon.setTooltip(new Tooltip(Res.get("tooltip.openPopupForDetails")));
- icon.getStyleClass().add("info-icon");
-
- button = new Button("", icon);
- button.getStyleClass().add("info-icon-button");
- button.setOnAction(e -> {
- /* new VoteResultsForProposalWindow(resultsOfCycle,
- item.getEvaluatedProposal().getProposal(),
- bsqStateService,
- bsqFormatter)
- .show();*/
- });
- setGraphic(button);
- } else {
- setGraphic(null);
- if (icon != null)
- icon = null;
- if (button != null)
- button = null;
- }
- }
- };
- }
- });
- tableView.getColumns().add(detailsColumn);
-
- /*
-
- TableColumn indexColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.votes.table.header.id"));
- indexColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- indexColumn.setMinWidth(70);
- indexColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final VoteResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getId());
- else
- setText("");
- }
- };
- }
- });
- indexColumn.setComparator(Comparator.comparing(VoteResultsListItem::getStakeAsCoin));
- tableView.getColumns().add(indexColumn);
-
- TableColumn stakeColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.votes.table.header.stake"));
- stakeColumn.setMinWidth(70);
- stakeColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- stakeColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final VoteResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getStake());
- else
- setText("");
- }
- };
- }
- });
- stakeColumn.setComparator(Comparator.comparing(VoteResultsListItem::getStakeAsCoin));
- tableView.getColumns().add(stakeColumn);
-
- TableColumn meritColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.votes.table.header.merit"));
- meritColumn.setMinWidth(70);
- meritColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- meritColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final VoteResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getMerit());
- else
- setText("");
- }
- };
- }
- });
- meritColumn.setComparator(Comparator.comparing(VoteResultsListItem::getMeritAsCoin));
- tableView.getColumns().add(meritColumn);
-
- TableColumn acceptedColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.votes.table.header.accepted"));
- acceptedColumn.setMinWidth(70);
- acceptedColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- acceptedColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final VoteResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getNumAcceptedVotes());
- else
- setText("");
- }
- };
- }
- });
- acceptedColumn.setComparator(Comparator.comparing(VoteResultsListItem::getNumAcceptedVotes));
- tableView.getColumns().add(acceptedColumn);
-
- TableColumn rejectedColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.votes.table.header.rejected"));
- rejectedColumn.setMinWidth(70);
- rejectedColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- rejectedColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- @Override
- public void updateItem(final VoteResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
- if (item != null)
- setText(item.getNumRejectedVotes());
- else
- setText("");
- }
- };
- }
- });
- rejectedColumn.setComparator(Comparator.comparing(VoteResultsListItem::getNumRejectedVotes));
- tableView.getColumns().add(rejectedColumn);
-
- TableColumn blindVoteTxIdColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.votes.table.header.blindVoteTxId"));
- blindVoteTxIdColumn.setMinWidth(120);
- blindVoteTxIdColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- blindVoteTxIdColumn.setCellFactory(
- new Callback, TableCell>() {
-
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- private HyperlinkWithIcon hyperlinkWithIcon;
-
- @Override
- public void updateItem(final VoteResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
-
- if (item != null && !empty) {
- String txId = item.getBlindVoteTxId();
- hyperlinkWithIcon = new HyperlinkWithIcon(txId, AwesomeIcon.EXTERNAL_LINK);
- hyperlinkWithIcon.setOnAction(event -> openTxInBlockExplorer(txId));
- hyperlinkWithIcon.setTooltip(new Tooltip(Res.get("tooltip.openBlockchainForTx", txId)));
- setGraphic(hyperlinkWithIcon);
- } else {
- setGraphic(null);
- if (hyperlinkWithIcon != null)
- hyperlinkWithIcon.setOnAction(null);
- }
- }
- };
- }
- });
- blindVoteTxIdColumn.setComparator(Comparator.comparing(VoteResultsListItem::getBlindVoteTxId));
- tableView.getColumns().add(blindVoteTxIdColumn);
-
- TableColumn voteRevealTxIdColumn = new AutoTooltipTableColumn<>(Res.get("dao.results.votes.table.header.voteRevealTxId"));
- voteRevealTxIdColumn.setMinWidth(120);
- voteRevealTxIdColumn.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue()));
- voteRevealTxIdColumn.setCellFactory(
- new Callback, TableCell>() {
- @Override
- public TableCell call(
- TableColumn column) {
- return new TableCell() {
- private HyperlinkWithIcon hyperlinkWithIcon;
-
- @Override
- public void updateItem(final VoteResultsListItem item, boolean empty) {
- super.updateItem(item, empty);
-
- if (item != null && !empty) {
- String txId = item.getVoteRevealTxId();
- hyperlinkWithIcon = new HyperlinkWithIcon(txId, AwesomeIcon.EXTERNAL_LINK);
- hyperlinkWithIcon.setOnAction(event -> openTxInBlockExplorer(txId));
- hyperlinkWithIcon.setTooltip(new Tooltip(Res.get("tooltip.openBlockchainForTx", txId)));
- setGraphic(hyperlinkWithIcon);
- } else {
- setGraphic(null);
- if (hyperlinkWithIcon != null)
- hyperlinkWithIcon.setOnAction(null);
- }
- }
- };
- }
- });
- voteRevealTxIdColumn.setComparator(Comparator.comparing(VoteResultsListItem::getVoteRevealTxId));
- tableView.getColumns().add(voteRevealTxIdColumn);*/
- }
-
- private void openTxInBlockExplorer(String txId) {
- if (txId != null)
- GUIUtil.openWebPage(preferences.getBsqBlockChainExplorer().txUrl + txId);
- }
-}
diff --git a/src/main/java/bisq/desktop/main/dao/results/votes/VoteResultsListItem.java b/src/main/java/bisq/desktop/main/dao/results/votes/VoteResultsListItem.java
deleted file mode 100644
index d8b1b58911..0000000000
--- a/src/main/java/bisq/desktop/main/dao/results/votes/VoteResultsListItem.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * This file is part of Bisq.
- *
- * Bisq is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * Bisq is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Bisq. If not, see .
- */
-
-package bisq.desktop.main.dao.results.votes;
-
-import bisq.desktop.main.dao.results.BaseResultsListItem;
-
-import bisq.core.dao.state.BsqStateService;
-import bisq.core.dao.voting.ballot.vote.BooleanVote;
-import bisq.core.dao.voting.ballot.vote.LongVote;
-import bisq.core.dao.voting.proposal.Proposal;
-import bisq.core.dao.voting.voteresult.DecryptedVote;
-import bisq.core.locale.Res;
-import bisq.core.util.BsqFormatter;
-
-import org.bitcoinj.core.Coin;
-
-import com.google.common.base.Joiner;
-
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import lombok.Getter;
-
-public class VoteResultsListItem extends BaseResultsListItem {
- private final BsqStateService bsqStateService;
- private final BsqFormatter bsqFormatter;
- private int id;
- @Getter
- private final DecryptedVote decryptedVote;
-
- public VoteResultsListItem(int id, DecryptedVote decryptedVote, BsqStateService bsqStateService, BsqFormatter bsqFormatter) {
- this.id = id;
- this.decryptedVote = decryptedVote;
- this.bsqStateService = bsqStateService;
- this.bsqFormatter = bsqFormatter;
- }
-
- public String getBlindVoteTxId() {
- return decryptedVote.getBlindVoteTxId();
- }
-
- public String getVoteRevealTxId() {
- return decryptedVote.getVoteRevealTxId();
- }
-
- public String getStake() {
- return bsqFormatter.formatCoinWithCode(getStakeAsCoin());
- }
-
- public String getStakeAndMerit() {
- return bsqFormatter.formatCoinWithCode(getStakeAndMeritAsCoin());
- }
-
- public Coin getStakeAndMeritAsCoin() {
- return getMeritAsCoin().add(getStakeAsCoin());
- }
-
-
- public Coin getStakeAsCoin() {
- return Coin.valueOf(decryptedVote.getStake());
- }
-
- public String getMerit() {
- return bsqFormatter.formatCoinWithCode(getMeritAsCoin());
- }
-
- public Coin getMeritAsCoin() {
- return Coin.valueOf(decryptedVote.getMerit(bsqStateService));
- }
-
- public String getNumAcceptedVotes() {
- return String.valueOf(getBooleanVoteStream()
- .filter(BooleanVote::isAccepted)
- .collect(Collectors.toList())
- .size());
- }
-
- public String getNumRejectedVotes() {
- return String.valueOf(getBooleanVoteStream()
- .filter(booleanVote -> !booleanVote.isAccepted())
- .collect(Collectors.toList())
- .size());
- }
-
- private Stream getBooleanVoteStream() {
- return decryptedVote.getBallotList().getList().stream()
- .filter(ballot -> ballot.getVote() instanceof BooleanVote)
- .map(ballot -> (BooleanVote) ballot.getVote());
- }
-
- public String getBallotList() {
- return Joiner.on(", ").join(decryptedVote.getBallotList().getList().stream()
- .map(ballot -> {
- Proposal proposal = ballot.getProposal();
- String proposalUid = proposal.getShortId();
- if (ballot.getVote() instanceof BooleanVote)
- return proposalUid + ": " + ((BooleanVote) ballot.getVote()).isAccepted();
- else if (ballot.getVote() instanceof LongVote)
- return proposalUid + ": " + ((LongVote) ballot.getVote()).getValue();
- else
- return proposalUid;
- })
- .collect(Collectors.toList()));
- }
-
- public String getId() {
- return Res.get("dao.results.votes.table.cell.id", id);
- }
-}
diff --git a/src/main/java/bisq/desktop/main/dao/voting/BaseBallotListItem.java b/src/main/java/bisq/desktop/main/dao/voting/BaseBallotListItem.java
deleted file mode 100644
index 37ec10675d..0000000000
--- a/src/main/java/bisq/desktop/main/dao/voting/BaseBallotListItem.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * This file is part of Bisq.
- *
- * Bisq is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * Bisq is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Bisq. If not, see .
- */
-
-package bisq.desktop.main.dao.voting;
-
-import bisq.desktop.main.dao.BaseProposalListItem;
-
-import bisq.core.btc.wallet.BsqWalletService;
-import bisq.core.dao.DaoFacade;
-import bisq.core.dao.state.period.DaoPhase;
-import bisq.core.dao.voting.ballot.Ballot;
-import bisq.core.dao.voting.ballot.vote.BooleanVote;
-import bisq.core.dao.voting.ballot.vote.Vote;
-import bisq.core.dao.voting.proposal.Proposal;
-import bisq.core.util.BsqFormatter;
-
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import lombok.ToString;
-import lombok.extern.slf4j.Slf4j;
-
-@ToString
-@Slf4j
-@EqualsAndHashCode(callSuper = true)
-public class BaseBallotListItem extends BaseProposalListItem {
- @Getter
- private final Ballot ballot;
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // Constructor, lifecycle
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- protected BaseBallotListItem(Ballot ballot,
- DaoFacade daoFacade,
- BsqWalletService bsqWalletService,
- BsqFormatter bsqFormatter) {
- super(daoFacade,
- bsqWalletService,
- bsqFormatter);
-
- this.ballot = ballot;
-
- init();
- }
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // Protected
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- @Override
- protected void init() {
- super.init();
- }
-
- @Override
- public void onPhaseChanged(DaoPhase.Phase phase) {
- super.onPhaseChanged(phase);
-
- final Vote vote = ballot.getVote();
- if (vote != null) {
- imageView.setVisible(true);
- if (vote instanceof BooleanVote) {
- if (((BooleanVote) vote).isAccepted()) {
- imageView.setId("accepted");
- } else {
- imageView.setId("rejected");
- }
- }/* else {
- // not impl.
- }*/
- } else {
- imageView.setVisible(false);
- }
- }
-
- @Override
- public Proposal getProposal() {
- return ballot.getProposal();
- }
-}
diff --git a/src/main/java/bisq/desktop/main/dao/voting/VotingView.fxml b/src/main/java/bisq/desktop/main/dao/voting/VotingView.fxml
deleted file mode 100644
index a5bf85f199..0000000000
--- a/src/main/java/bisq/desktop/main/dao/voting/VotingView.fxml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/main/java/bisq/desktop/main/dao/voting/VotingView.java b/src/main/java/bisq/desktop/main/dao/voting/VotingView.java
deleted file mode 100644
index 43ed3a09a7..0000000000
--- a/src/main/java/bisq/desktop/main/dao/voting/VotingView.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * This file is part of Bisq.
- *
- * Bisq is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * Bisq is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Bisq. If not, see .
- */
-
-package bisq.desktop.main.dao.voting;
-
-import bisq.desktop.Navigation;
-import bisq.desktop.common.view.ActivatableViewAndModel;
-import bisq.desktop.common.view.CachingViewLoader;
-import bisq.desktop.common.view.FxmlView;
-import bisq.desktop.common.view.View;
-import bisq.desktop.common.view.ViewLoader;
-import bisq.desktop.common.view.ViewPath;
-import bisq.desktop.components.MenuItem;
-import bisq.desktop.main.MainView;
-import bisq.desktop.main.dao.DaoView;
-import bisq.desktop.main.dao.voting.active.ActiveBallotsView;
-import bisq.desktop.main.dao.voting.closed.ClosedBallotsView;
-import bisq.desktop.main.dao.voting.dashboard.VotingDashboardView;
-
-import bisq.core.locale.Res;
-
-import javax.inject.Inject;
-
-import de.jensd.fx.fontawesome.AwesomeIcon;
-
-import javafx.fxml.FXML;
-
-import javafx.scene.control.ToggleGroup;
-import javafx.scene.layout.AnchorPane;
-import javafx.scene.layout.VBox;
-
-import java.util.Arrays;
-import java.util.List;
-
-@FxmlView
-public class VotingView extends ActivatableViewAndModel {
-
- private final ViewLoader viewLoader;
- private final Navigation navigation;
-
- private MenuItem dashboard, activeBallots, closedBallots;
- private Navigation.Listener listener;
-
- @FXML
- private VBox leftVBox;
- @FXML
- private AnchorPane content;
-
- private Class extends View> selectedViewClass;
-
- @Inject
- private VotingView(CachingViewLoader viewLoader, Navigation navigation) {
- this.viewLoader = viewLoader;
- this.navigation = navigation;
- }
-
- @Override
- public void initialize() {
- listener = viewPath -> {
- if (viewPath.size() != 4 || viewPath.indexOf(VotingView.class) != 2)
- return;
-
- selectedViewClass = viewPath.tip();
- loadView(selectedViewClass);
- };
-
- ToggleGroup toggleGroup = new ToggleGroup();
- final List> baseNavPath = Arrays.asList(MainView.class, DaoView.class, VotingView.class);
- dashboard = new MenuItem(navigation, toggleGroup, Res.get("shared.dashboard"),
- VotingDashboardView.class, AwesomeIcon.DASHBOARD, baseNavPath);
- activeBallots = new MenuItem(navigation, toggleGroup, Res.get("dao.voting.menuItem.activeBallots"),
- ActiveBallotsView.class, AwesomeIcon.LIST_UL, baseNavPath);
- closedBallots = new MenuItem(navigation, toggleGroup, Res.get("dao.voting.menuItem.closedBallots"),
- ClosedBallotsView.class, AwesomeIcon.LIST_ALT, baseNavPath);
- leftVBox.getChildren().addAll(dashboard, activeBallots, closedBallots);
- }
-
- @Override
- protected void activate() {
- dashboard.activate();
- activeBallots.activate();
- closedBallots.activate();
-
- navigation.addListener(listener);
- ViewPath viewPath = navigation.getCurrentPath();
- if (viewPath.size() == 3 && viewPath.indexOf(VotingView.class) == 2 ||
- viewPath.size() == 2 && viewPath.indexOf(DaoView.class) == 1) {
- if (selectedViewClass == null)
- selectedViewClass = ActiveBallotsView.class;
-
- loadView(selectedViewClass);
-
- } else if (viewPath.size() == 4 && viewPath.indexOf(VotingView.class) == 2) {
- selectedViewClass = viewPath.get(3);
- loadView(selectedViewClass);
- }
- }
-
- @Override
- protected void deactivate() {
- navigation.removeListener(listener);
-
- dashboard.deactivate();
- activeBallots.deactivate();
- closedBallots.deactivate();
- }
-
- private void loadView(Class extends View> viewClass) {
- View view = viewLoader.load(viewClass);
- content.getChildren().setAll(view.getRoot());
-
- if (view instanceof VotingDashboardView) dashboard.setSelected(true);
- else if (view instanceof ActiveBallotsView) activeBallots.setSelected(true);
- else if (view instanceof ClosedBallotsView) closedBallots.setSelected(true);
- }
-}
diff --git a/src/main/java/bisq/desktop/main/dao/voting/active/ActiveBallotListItem.java b/src/main/java/bisq/desktop/main/dao/voting/active/ActiveBallotListItem.java
deleted file mode 100644
index f421a62127..0000000000
--- a/src/main/java/bisq/desktop/main/dao/voting/active/ActiveBallotListItem.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * This file is part of Bisq.
- *
- * Bisq is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * Bisq is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Bisq. If not, see .
- */
-
-package bisq.desktop.main.dao.voting.active;
-
-import bisq.desktop.main.dao.voting.BaseBallotListItem;
-
-import bisq.core.btc.wallet.BsqWalletService;
-import bisq.core.dao.DaoFacade;
-import bisq.core.dao.voting.ballot.Ballot;
-import bisq.core.util.BsqFormatter;
-
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-import lombok.extern.slf4j.Slf4j;
-
-@ToString
-@Slf4j
-@EqualsAndHashCode(callSuper = true)
-class ActiveBallotListItem extends BaseBallotListItem {
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // Constructor, lifecycle
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- ActiveBallotListItem(Ballot ballot,
- DaoFacade daoFacade,
- BsqWalletService bsqWalletService,
- BsqFormatter bsqFormatter) {
- super(ballot,
- daoFacade,
- bsqWalletService,
- bsqFormatter);
- }
-}
diff --git a/src/main/java/bisq/desktop/main/dao/voting/active/ActiveBallotsView.fxml b/src/main/java/bisq/desktop/main/dao/voting/active/ActiveBallotsView.fxml
deleted file mode 100644
index e2c84c8654..0000000000
--- a/src/main/java/bisq/desktop/main/dao/voting/active/ActiveBallotsView.fxml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/main/java/bisq/desktop/main/dao/voting/active/ActiveBallotsView.java b/src/main/java/bisq/desktop/main/dao/voting/active/ActiveBallotsView.java
deleted file mode 100644
index 8377983eda..0000000000
--- a/src/main/java/bisq/desktop/main/dao/voting/active/ActiveBallotsView.java
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- * This file is part of Bisq.
- *
- * Bisq is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * Bisq is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
- * License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with Bisq. If not, see .
- */
-
-package bisq.desktop.main.dao.voting.active;
-
-import bisq.desktop.common.view.FxmlView;
-import bisq.desktop.components.BusyAnimation;
-import bisq.desktop.components.InputTextField;
-import bisq.desktop.main.dao.BaseProposalListItem;
-import bisq.desktop.main.dao.BaseProposalView;
-import bisq.desktop.main.overlays.popups.Popup;
-import bisq.desktop.util.GUIUtil;
-import bisq.desktop.util.Layout;
-import bisq.desktop.util.validation.BsqValidator;
-
-import bisq.core.btc.exceptions.TransactionVerificationException;
-import bisq.core.btc.exceptions.WalletException;
-import bisq.core.btc.wallet.BsqBalanceListener;
-import bisq.core.btc.wallet.BsqWalletService;
-import bisq.core.dao.DaoFacade;
-import bisq.core.dao.state.BsqStateListener;
-import bisq.core.dao.state.blockchain.Block;
-import bisq.core.dao.state.period.DaoPhase;
-import bisq.core.dao.voting.ballot.Ballot;
-import bisq.core.dao.voting.ballot.vote.BooleanVote;
-import bisq.core.dao.voting.proposal.Proposal;
-import bisq.core.locale.Res;
-import bisq.core.util.BSFormatter;
-import bisq.core.util.BsqFormatter;
-
-import bisq.common.util.Tuple2;
-import bisq.common.util.Tuple3;
-
-import org.bitcoinj.core.Coin;
-import org.bitcoinj.core.InsufficientMoneyException;
-import org.bitcoinj.core.Transaction;
-
-import javax.inject.Inject;
-
-import javafx.scene.control.Button;
-import javafx.scene.control.Label;
-import javafx.scene.control.TableCell;
-import javafx.scene.control.TableColumn;
-import javafx.scene.control.TableView;
-import javafx.scene.image.ImageView;
-
-import javafx.beans.property.ReadOnlyObjectWrapper;
-import javafx.beans.value.ChangeListener;
-
-import javafx.collections.ListChangeListener;
-
-import javafx.util.Callback;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-import static bisq.desktop.util.FormBuilder.add3ButtonsAfterGroup;
-import static bisq.desktop.util.FormBuilder.addButtonBusyAnimationLabelAfterGroup;
-import static bisq.desktop.util.FormBuilder.addLabelInputTextField;
-import static bisq.desktop.util.FormBuilder.addTitledGroupBg;
-
-@FxmlView
-public class ActiveBallotsView extends BaseProposalView implements BsqBalanceListener, BsqStateListener {
- private Button acceptButton, rejectButton, removeMyVoteButton, voteButton;
- private InputTextField stakeInputTextField;
- private BusyAnimation voteButtonBusyAnimation;
- private Label voteButtonInfoLabel;
- private ListChangeListener listChangeListener;
- private ChangeListener stakeListener;
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // Constructor, lifecycle
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- @Inject
- private ActiveBallotsView(DaoFacade daoFacade,
- BsqWalletService bsqWalletService,
- BsqFormatter bsqFormatter,
- BSFormatter btcFormatter) {
-
- super(daoFacade, bsqWalletService, bsqFormatter, btcFormatter);
- }
-
- @Override
- public void initialize() {
- super.initialize();
-
- createProposalsTableView();
- createVoteView();
- createEmptyProposalDisplay();
-
- stakeListener = (observable, oldValue, newValue) -> updateButtons();
- listChangeListener = c -> updateListItems();
- }
-
- @Override
- protected void activate() {
- super.activate();
-
- stakeInputTextField.textProperty().addListener(stakeListener);
- daoFacade.getValidAndConfirmedBallots().addListener(listChangeListener);
- bsqWalletService.addBsqBalanceListener(this);
-
- onUpdateBalances(bsqWalletService.getAvailableBalance(),
- bsqWalletService.getAvailableNonBsqBalance(),
- bsqWalletService.getUnverifiedBalance(),
- bsqWalletService.getLockedForVotingBalance(),
- bsqWalletService.getLockupBondsBalance(),
- bsqWalletService.getUnlockingBondsBalance());
-
- voteButton.setOnAction(e -> onVote());
-
- daoFacade.addBsqStateListener(this);
-
- updateButtons();
- }
-
-
- @Override
- protected void deactivate() {
- super.deactivate();
-
- stakeInputTextField.textProperty().removeListener(stakeListener);
- daoFacade.getValidAndConfirmedBallots().removeListener(listChangeListener);
- bsqWalletService.removeBsqBalanceListener(this);
- }
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // BsqBalanceListener
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- @Override
- public void onUpdateBalances(Coin confirmedBalance,
- Coin availableNonBsqBalance,
- Coin pendingBalance,
- Coin lockedForVotingBalance,
- Coin lockupBondsBalance,
- Coin unlockingBondsBalance) {
- stakeInputTextField.setPromptText(Res.get("dao.proposal.myVote.stake.prompt",
- bsqFormatter.formatCoinWithCode(confirmedBalance)));
- }
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // BsqStateListener
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- @Override
- public void onNewBlockHeight(int blockHeight) {
- }
-
- @Override
- public void onEmptyBlockAdded(Block block) {
- }
-
- @Override
- public void onParseTxsComplete(Block block) {
- updateButtons();
- }
-
- @Override
- public void onParseBlockChainComplete() {
- }
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////
- // Protected
- ///////////////////////////////////////////////////////////////////////////////////////////
-
- @Override
- protected void fillListItems() {
- List list = daoFacade.getValidAndConfirmedBallots();
- proposalBaseProposalListItems.setAll(list.stream()
- .map(ballot -> new ActiveBallotListItem(ballot, daoFacade, bsqWalletService, bsqFormatter))
- .collect(Collectors.toSet()));
- updateButtons();
- }
-
- @Override
- protected void createAllFieldsOnProposalDisplay(Proposal proposal) {
- super.createAllFieldsOnProposalDisplay(proposal);
-
- Tuple3