Add enable/diable all toggle button to open offers

Add search field to openoffer and failed trades
Improve search
This commit is contained in:
chimp1984 2020-12-11 00:21:47 -05:00
parent d3b68bf9e6
commit 4d8a327567
No known key found for this signature in database
GPG key ID: 9801B4EC591F90E3
8 changed files with 322 additions and 65 deletions

View file

@ -335,6 +335,10 @@ public final class PaymentMethod implements PersistablePayload, Comparable<Payme
return id.compareTo(other.id);
}
public String getDisplayString() {
return Res.get(id);
}
public boolean isAsset() {
return this.equals(BLOCK_CHAINS_INSTANT) || this.equals(BLOCK_CHAINS);
}

View file

@ -221,6 +221,8 @@ shared.delayedPayoutTxReceiverAddress=Delayed payout transaction sent to
shared.unconfirmedTransactionsLimitReached=You have too many unconfirmed transactions at the moment. Please try again later.
shared.numItemsLabel=Number of entries: {0}
shared.filter=Filter
shared.enabled=Enabled
####################################################################
# UI views

View file

@ -36,7 +36,7 @@
<HBox fx:id="searchBox">
<AutoTooltipLabel fx:id="filterLabel"/>
<InputTextField fx:id="filterTextField" minWidth="300"/>
<InputTextField fx:id="filterTextField" minWidth="500"/>
<Pane fx:id="searchBoxSpacer"/>
</HBox>

View file

@ -27,7 +27,6 @@ import bisq.desktop.components.InputTextField;
import bisq.desktop.components.PeerInfoIcon;
import bisq.desktop.main.overlays.windows.OfferDetailsWindow;
import bisq.desktop.main.overlays.windows.TradeDetailsWindow;
import bisq.desktop.util.DisplayUtils;
import bisq.desktop.util.GUIUtil;
import bisq.core.alert.PrivateNotificationManager;
@ -236,11 +235,10 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
filterTextFieldListener = (observable, oldValue, newValue) -> applyFilteredListPredicate(filterTextField.getText());
searchBox.setSpacing(5);
HBox.setHgrow(searchBoxSpacer, Priority.ALWAYS);
exportButton.updateText(Res.get("shared.exportCSV"));
HBox.setMargin(exportButton, new Insets(0, 10, 0, 0));
HBox.setHgrow(footerSpacer, Priority.ALWAYS);
numItems.setPadding(new Insets(-5, 0, 0, 10));
HBox.setHgrow(footerSpacer, Priority.ALWAYS);
HBox.setMargin(exportButton, new Insets(0, 10, 0, 0));
exportButton.updateText(Res.get("shared.exportCSV"));
}
@ -327,31 +325,82 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
if (filterString.isEmpty())
return true;
Offer offer = item.getTradable().getOffer();
boolean matchesId = offer.getId().contains(filterString);
boolean matchesOfferDate = DisplayUtils.formatDate(offer.getDate()).contains(filterString);
boolean isMakerOnion = offer.getMakerNodeAddress().getFullAddress().contains(filterString);
Tradable tradable = item.getTradable();
Offer offer = tradable.getOffer();
if (offer.getId().contains(filterString)) {
return true;
}
if (model.getDate(item).contains(filterString)) {
return true;
}
if (model.getMarketLabel(item).contains(filterString)) {
return true;
}
if (model.getPrice(item).contains(filterString)) {
return true;
}
if (model.getPriceDeviation(item).contains(filterString)) {
return true;
}
if (item.getTradable() instanceof Trade) {
if (model.getVolume(item).contains(filterString)) {
return true;
}
if (model.getAmount(item).contains(filterString)) {
return true;
}
if (model.getTradeFee(item).contains(filterString)) {
return true;
}
if (model.getTxFee(item).contains(filterString)) {
return true;
}
if (model.getBuyerSecurityDeposit(item).contains(filterString)) {
return true;
}
if (model.getSellerSecurityDeposit(item).contains(filterString)) {
return true;
}
if (model.getState(item).contains(filterString)) {
return true;
}
if (model.getDirectionLabel(item).contains(filterString)) {
return true;
}
if (offer.getPaymentMethod().getDisplayString().contains(filterString)) {
return true;
}
if (offer.getOfferFeePaymentTxId().contains(filterString)) {
return true;
}
if (tradable instanceof Trade) {
Trade trade = (Trade) tradable;
if (trade.getTakerFeeTxId() != null && trade.getTakerFeeTxId().contains(filterString)) {
return true;
}
if (trade.getDepositTxId() != null && trade.getDepositTxId().contains(filterString)) {
return true;
}
if (trade.getPayoutTxId() != null && trade.getPayoutTxId().contains(filterString)) {
return true;
}
Contract contract = trade.getContract();
boolean isBuyerOnion = false;
boolean isSellerOnion = false;
boolean matchesBuyersPaymentAccountData = false;
boolean matchesSellersPaymentAccountData = false;
Trade trade = (Trade) item.getTradable();
boolean matchesTradeDate = DisplayUtils.formatDate(trade.getTakeOfferDate()).contains(filterString);
Contract contract = trade.getContract();
if (contract != null) {
isBuyerOnion = contract.getBuyerNodeAddress().getFullAddress().contains(filterString);
isSellerOnion = contract.getSellerNodeAddress().getFullAddress().contains(filterString);
matchesBuyersPaymentAccountData = contract.getBuyerPaymentAccountPayload().getPaymentDetails().contains(filterString);
matchesSellersPaymentAccountData = contract.getSellerPaymentAccountPayload().getPaymentDetails().contains(filterString);
}
return matchesId || matchesOfferDate || isMakerOnion ||
matchesTradeDate || isBuyerOnion || isSellerOnion ||
return isBuyerOnion || isSellerOnion ||
matchesBuyersPaymentAccountData || matchesSellersPaymentAccountData;
} else {
return matchesId || matchesOfferDate || isMakerOnion;
return false;
}
});
}

View file

@ -18,10 +18,13 @@
-->
<?import bisq.desktop.components.AutoTooltipButton?>
<?import bisq.desktop.components.AutoTooltipLabel?>
<?import bisq.desktop.components.InputTextField?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.Region?>
<?import javafx.scene.layout.VBox?>
<?import javafx.geometry.Insets?>
@ -30,7 +33,11 @@
<padding>
<Insets bottom="15.0" left="15.0" right="15.0" top="15.0"/>
</padding>
<HBox fx:id="searchBox">
<AutoTooltipLabel fx:id="filterLabel"/>
<InputTextField fx:id="filterTextField" minWidth="500"/>
<Pane fx:id="searchBoxSpacer"/>
</HBox>
<TableView fx:id="tableView" VBox.vgrow="ALWAYS">
<columns>
<TableColumn fx:id="tradeIdColumn" minWidth="120" maxWidth="120"/>
@ -46,7 +53,7 @@
</TableView>
<HBox spacing="10">
<Label fx:id="numItems"/>
<Region fx:id="spacer"/>
<Region fx:id="footerSpacer"/>
<AutoTooltipButton fx:id="exportButton"/>
</HBox>
</VBox>

View file

@ -22,12 +22,15 @@ import bisq.desktop.common.view.FxmlView;
import bisq.desktop.components.AutoTooltipButton;
import bisq.desktop.components.AutoTooltipLabel;
import bisq.desktop.components.HyperlinkWithIcon;
import bisq.desktop.components.InputTextField;
import bisq.desktop.main.overlays.popups.Popup;
import bisq.desktop.main.overlays.windows.TradeDetailsWindow;
import bisq.desktop.util.FormBuilder;
import bisq.desktop.util.GUIUtil;
import bisq.core.locale.Res;
import bisq.core.offer.Offer;
import bisq.core.trade.Contract;
import bisq.core.trade.Trade;
import bisq.common.config.Config;
@ -55,6 +58,7 @@ import javafx.scene.control.Tooltip;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;
@ -62,10 +66,12 @@ import javafx.scene.layout.VBox;
import javafx.geometry.Insets;
import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.beans.value.ChangeListener;
import javafx.event.EventHandler;
import javafx.collections.ObservableList;
import javafx.collections.transformation.FilteredList;
import javafx.collections.transformation.SortedList;
import javafx.util.Callback;
@ -81,15 +87,25 @@ public class FailedTradesView extends ActivatableViewAndModel<VBox, FailedTrades
TableColumn<FailedTradesListItem, FailedTradesListItem> priceColumn, amountColumn, volumeColumn,
marketColumn, directionColumn, dateColumn, tradeIdColumn, stateColumn, removeTradeColumn;
@FXML
HBox searchBox;
@FXML
AutoTooltipLabel filterLabel;
@FXML
InputTextField filterTextField;
@FXML
Pane searchBoxSpacer;
@FXML
Label numItems;
@FXML
Region spacer;
Region footerSpacer;
@FXML
AutoTooltipButton exportButton;
private final TradeDetailsWindow tradeDetailsWindow;
private SortedList<FailedTradesListItem> sortedList;
private FilteredList<FailedTradesListItem> filteredList;
private EventHandler<KeyEvent> keyEventEventHandler;
private ChangeListener<String> filterTextFieldListener;
private Scene scene;
private final boolean allowFaultyDelayedTxs;
@ -157,44 +173,27 @@ public class FailedTradesView extends ActivatableViewAndModel<VBox, FailedTrades
}
};
HBox.setHgrow(spacer, Priority.ALWAYS);
filterLabel.setText(Res.get("shared.filter"));
HBox.setMargin(filterLabel, new Insets(5, 0, 0, 10));
filterTextFieldListener = (observable, oldValue, newValue) -> applyFilteredListPredicate(filterTextField.getText());
searchBox.setSpacing(5);
HBox.setHgrow(searchBoxSpacer, Priority.ALWAYS);
numItems.setPadding(new Insets(-5, 0, 0, 10));
HBox.setHgrow(footerSpacer, Priority.ALWAYS);
HBox.setMargin(exportButton, new Insets(0, 10, 0, 0));
exportButton.updateText(Res.get("shared.exportCSV"));
}
private void onUnfail() {
Trade trade = sortedList.get(tableView.getSelectionModel().getFocusedIndex()).getTrade();
model.dataModel.unfailTrade(trade);
}
private String checkUnfail() {
Trade trade = sortedList.get(tableView.getSelectionModel().getFocusedIndex()).getTrade();
return model.dataModel.checkUnfail(trade);
}
private String checkTxs() {
Trade trade = sortedList.get(tableView.getSelectionModel().getFocusedIndex()).getTrade();
log.info("Initiated unfail of trade {}", trade.getId());
if (trade.getDepositTx() == null) {
log.info("Check unfail found no depositTx for trade {}", trade.getId());
return Res.get("portfolio.failed.depositTxNull");
}
if (trade.getDelayedPayoutTxBytes() == null) {
log.info("Check unfail found no delayedPayoutTxBytes for trade {}", trade.getId());
if (!allowFaultyDelayedTxs) {
return Res.get("portfolio.failed.delayedPayoutTxNull");
}
}
return "";
}
@Override
protected void activate() {
scene = root.getScene();
if (scene != null) {
scene.addEventHandler(KeyEvent.KEY_RELEASED, keyEventEventHandler);
}
sortedList = new SortedList<>(model.getList());
filteredList = new FilteredList<>(model.getList());
sortedList = new SortedList<>(filteredList);
sortedList.comparatorProperty().bind(tableView.comparatorProperty());
tableView.setItems(sortedList);
@ -228,6 +227,9 @@ public class FailedTradesView extends ActivatableViewAndModel<VBox, FailedTrades
sortedList,
(Stage) root.getScene().getWindow());
});
filterTextField.textProperty().addListener(filterTextFieldListener);
applyFilteredListPredicate(filterTextField.getText());
}
@Override
@ -235,7 +237,98 @@ public class FailedTradesView extends ActivatableViewAndModel<VBox, FailedTrades
if (scene != null) {
scene.removeEventHandler(KeyEvent.KEY_RELEASED, keyEventEventHandler);
}
sortedList.comparatorProperty().unbind();
exportButton.setOnAction(null);
filterTextField.textProperty().removeListener(filterTextFieldListener);
}
private void applyFilteredListPredicate(String filterString) {
filteredList.setPredicate(item -> {
if (filterString.isEmpty())
return true;
Offer offer = item.getTrade().getOffer();
if (offer.getId().contains(filterString)) {
return true;
}
if (model.getDate(item).contains(filterString)) {
return true;
}
if (model.getMarketLabel(item).contains(filterString)) {
return true;
}
if (model.getPrice(item).contains(filterString)) {
return true;
}
if (model.getVolume(item).contains(filterString)) {
return true;
}
if (model.getAmount(item).contains(filterString)) {
return true;
}
if (model.getDirectionLabel(item).contains(filterString)) {
return true;
}
if (offer.getOfferFeePaymentTxId().contains(filterString)) {
return true;
}
Trade trade = item.getTrade();
if (trade.getTakerFeeTxId() != null && trade.getTakerFeeTxId().contains(filterString)) {
return true;
}
if (trade.getDepositTxId() != null && trade.getDepositTxId().contains(filterString)) {
return true;
}
if (trade.getPayoutTxId() != null && trade.getPayoutTxId().contains(filterString)) {
return true;
}
Contract contract = trade.getContract();
boolean isBuyerOnion = false;
boolean isSellerOnion = false;
boolean matchesBuyersPaymentAccountData = false;
boolean matchesSellersPaymentAccountData = false;
if (contract != null) {
isBuyerOnion = contract.getBuyerNodeAddress().getFullAddress().contains(filterString);
isSellerOnion = contract.getSellerNodeAddress().getFullAddress().contains(filterString);
matchesBuyersPaymentAccountData = contract.getBuyerPaymentAccountPayload().getPaymentDetails().contains(filterString);
matchesSellersPaymentAccountData = contract.getSellerPaymentAccountPayload().getPaymentDetails().contains(filterString);
}
return isBuyerOnion || isSellerOnion ||
matchesBuyersPaymentAccountData || matchesSellersPaymentAccountData;
});
}
private void onUnfail() {
Trade trade = sortedList.get(tableView.getSelectionModel().getFocusedIndex()).getTrade();
model.dataModel.unfailTrade(trade);
}
private String checkUnfail() {
Trade trade = sortedList.get(tableView.getSelectionModel().getFocusedIndex()).getTrade();
return model.dataModel.checkUnfail(trade);
}
private String checkTxs() {
Trade trade = sortedList.get(tableView.getSelectionModel().getFocusedIndex()).getTrade();
log.info("Initiated unfail of trade {}", trade.getId());
if (trade.getDepositTx() == null) {
log.info("Check unfail found no depositTx for trade {}", trade.getId());
return Res.get("portfolio.failed.depositTxNull");
}
if (trade.getDelayedPayoutTxBytes() == null) {
log.info("Check unfail found no delayedPayoutTxBytes for trade {}", trade.getId());
if (!allowFaultyDelayedTxs) {
return Res.get("portfolio.failed.delayedPayoutTxNull");
}
}
return "";
}
private void onRevertTrade(Trade trade) {

View file

@ -18,10 +18,14 @@
-->
<?import bisq.desktop.components.AutoTooltipButton?>
<?import bisq.desktop.components.AutoTooltipLabel?>
<?import bisq.desktop.components.AutoTooltipSlideToggleButton?>
<?import bisq.desktop.components.InputTextField?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.Region?>
<?import javafx.scene.layout.VBox?>
<?import javafx.geometry.Insets?>
@ -30,7 +34,12 @@
<padding>
<Insets bottom="15.0" left="15.0" right="15.0" top="15.0"/>
</padding>
<HBox fx:id="searchBox">
<AutoTooltipLabel fx:id="filterLabel"/>
<InputTextField fx:id="filterTextField" minWidth="500"/>
<Pane fx:id="searchBoxSpacer"/>
<AutoTooltipSlideToggleButton fx:id="selectToggleButton"/>
</HBox>
<TableView fx:id="tableView" VBox.vgrow="ALWAYS">
<columns>
<TableColumn fx:id="offerIdColumn" minWidth="110" maxWidth="120"/>
@ -49,7 +58,7 @@
</TableView>
<HBox spacing="10">
<Label fx:id="numItems"/>
<Region fx:id="spacer"/>
<Region fx:id="footerSpacer"/>
<AutoTooltipButton fx:id="exportButton"/>
</HBox>
</VBox>

View file

@ -21,10 +21,11 @@ import bisq.desktop.Navigation;
import bisq.desktop.common.view.ActivatableViewAndModel;
import bisq.desktop.common.view.FxmlView;
import bisq.desktop.components.AutoTooltipButton;
import bisq.desktop.components.AutoTooltipCheckBox;
import bisq.desktop.components.AutoTooltipLabel;
import bisq.desktop.components.AutoTooltipSlideToggleButton;
import bisq.desktop.components.AutoTooltipTableColumn;
import bisq.desktop.components.HyperlinkWithIcon;
import bisq.desktop.components.InputTextField;
import bisq.desktop.main.MainView;
import bisq.desktop.main.funds.FundsView;
import bisq.desktop.main.funds.withdrawal.WithdrawalView;
@ -34,6 +35,7 @@ import bisq.desktop.main.portfolio.PortfolioView;
import bisq.desktop.util.GUIUtil;
import bisq.core.locale.Res;
import bisq.core.offer.Offer;
import bisq.core.offer.OpenOffer;
import bisq.core.user.DontShowAgainLookup;
@ -50,7 +52,6 @@ import javafx.stage.Stage;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
@ -58,6 +59,7 @@ import javafx.scene.control.TableView;
import javafx.scene.control.Tooltip;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;
@ -65,8 +67,10 @@ import javafx.scene.layout.VBox;
import javafx.geometry.Insets;
import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.beans.value.ChangeListener;
import javafx.collections.ObservableList;
import javafx.collections.transformation.FilteredList;
import javafx.collections.transformation.SortedList;
import javafx.util.Callback;
@ -87,15 +91,27 @@ public class OpenOffersView extends ActivatableViewAndModel<VBox, OpenOffersView
marketColumn, directionColumn, dateColumn, offerIdColumn, deactivateItemColumn,
removeItemColumn, editItemColumn, paymentMethodColumn;
@FXML
HBox searchBox;
@FXML
AutoTooltipLabel filterLabel;
@FXML
InputTextField filterTextField;
@FXML
Pane searchBoxSpacer;
@FXML
Label numItems;
@FXML
Region spacer;
Region footerSpacer;
@FXML
AutoTooltipButton exportButton;
@FXML
AutoTooltipSlideToggleButton selectToggleButton;
private final Navigation navigation;
private final OfferDetailsWindow offerDetailsWindow;
private SortedList<OpenOfferListItem> sortedList;
private FilteredList<OpenOfferListItem> filteredList;
private ChangeListener<String> filterTextFieldListener;
private PortfolioView.OpenOfferActionHandler openOfferActionHandler;
@Inject
@ -117,7 +133,7 @@ public class OpenOffersView extends ActivatableViewAndModel<VBox, OpenOffersView
directionColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.offerType")));
dateColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.dateTime")));
offerIdColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.offerId")));
deactivateItemColumn.setGraphic(new AutoTooltipLabel("Enabled"));
deactivateItemColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.enabled")));
editItemColumn.setGraphic(new AutoTooltipLabel(""));
removeItemColumn.setGraphic(new AutoTooltipLabel(""));
@ -152,17 +168,39 @@ public class OpenOffersView extends ActivatableViewAndModel<VBox, OpenOffersView
dateColumn.setSortType(TableColumn.SortType.DESCENDING);
tableView.getSortOrder().add(dateColumn);
HBox.setHgrow(spacer, Priority.ALWAYS);
filterLabel.setText(Res.get("shared.filter"));
HBox.setMargin(filterLabel, new Insets(5, 0, 0, 10));
filterTextFieldListener = (observable, oldValue, newValue) -> applyFilteredListPredicate(filterTextField.getText());
searchBox.setSpacing(5);
HBox.setHgrow(searchBoxSpacer, Priority.ALWAYS);
selectToggleButton.setPadding(new Insets(0, 60, -20, 0));
selectToggleButton.setText(Res.get("shared.enabled"));
numItems.setPadding(new Insets(-5, 0, 0, 10));
HBox.setHgrow(footerSpacer, Priority.ALWAYS);
HBox.setMargin(exportButton, new Insets(0, 10, 0, 0));
exportButton.updateText(Res.get("shared.exportCSV"));
}
@Override
protected void activate() {
sortedList = new SortedList<>(model.getList());
filteredList = new FilteredList<>(model.getList());
sortedList = new SortedList<>(filteredList);
sortedList.comparatorProperty().bind(tableView.comparatorProperty());
tableView.setItems(sortedList);
updateSelectToggleButtonState();
selectToggleButton.setOnAction(event -> {
if (selectToggleButton.isSelected()) {
sortedList.forEach(openOfferListItem -> onActivateOpenOffer(openOfferListItem.getOpenOffer()));
} else {
sortedList.forEach(openOfferListItem -> onDeactivateOpenOffer(openOfferListItem.getOpenOffer()));
}
tableView.refresh();
});
numItems.setText(Res.get("shared.numItemsLabel", sortedList.size()));
exportButton.setOnAction(event -> {
ObservableList<TableColumn<OpenOfferListItem, ?>> tableColumns = tableView.getColumns();
@ -205,11 +243,68 @@ public class OpenOffersView extends ActivatableViewAndModel<VBox, OpenOffersView
sortedList,
(Stage) root.getScene().getWindow());
});
filterTextField.textProperty().addListener(filterTextFieldListener);
applyFilteredListPredicate(filterTextField.getText());
}
private void updateSelectToggleButtonState() {
long numDeactivated = sortedList.stream()
.filter(openOfferListItem -> openOfferListItem.getOpenOffer().isDeactivated())
.count();
if (numDeactivated == sortedList.size()) {
selectToggleButton.setSelected(false);
} else if (numDeactivated == 0) {
selectToggleButton.setSelected(true);
}
}
@Override
protected void deactivate() {
sortedList.comparatorProperty().unbind();
exportButton.setOnAction(null);
filterTextField.textProperty().removeListener(filterTextFieldListener);
}
private void applyFilteredListPredicate(String filterString) {
filteredList.setPredicate(item -> {
if (filterString.isEmpty())
return true;
Offer offer = item.getOpenOffer().getOffer();
if (offer.getId().contains(filterString)) {
return true;
}
if (model.getDate(item).contains(filterString)) {
return true;
}
if (model.getMarketLabel(item).contains(filterString)) {
return true;
}
if (model.getPrice(item).contains(filterString)) {
return true;
}
if (model.getPriceDeviation(item).contains(filterString)) {
return true;
}
if (model.getPaymentMethod(item).contains(filterString)) {
return true;
}
if (model.getVolume(item).contains(filterString)) {
return true;
}
if (model.getAmount(item).contains(filterString)) {
return true;
}
if (model.getDirectionLabel(item).contains(filterString)) {
return true;
}
if (offer.getOfferFeePaymentTxId().contains(filterString)) {
return true;
}
return false;
});
}
private void onDeactivateOpenOffer(OpenOffer openOffer) {
@ -220,6 +315,7 @@ public class OpenOffersView extends ActivatableViewAndModel<VBox, OpenOffersView
log.error(message);
new Popup().warning(Res.get("offerbook.deactivateOffer.failed", message)).show();
});
updateSelectToggleButtonState();
}
}
@ -231,6 +327,7 @@ public class OpenOffersView extends ActivatableViewAndModel<VBox, OpenOffersView
log.error(message);
new Popup().warning(Res.get("offerbook.activateOffer.failed", message)).show();
});
updateSelectToggleButtonState();
}
}
@ -517,14 +614,10 @@ public class OpenOffersView extends ActivatableViewAndModel<VBox, OpenOffersView
public TableCell<OpenOfferListItem, OpenOfferListItem> call(TableColumn<OpenOfferListItem, OpenOfferListItem> column) {
return new TableCell<>() {
final ImageView iconView = new ImageView();
CheckBox checkBox;
AutoTooltipSlideToggleButton checkBox;
private void updateState(@NotNull OpenOffer openOffer) {
if (openOffer.isDeactivated()) {
checkBox.setSelected(false);
} else {
checkBox.setSelected(true);
}
checkBox.setSelected(!openOffer.isDeactivated());
}
@Override
@ -533,7 +626,7 @@ public class OpenOffersView extends ActivatableViewAndModel<VBox, OpenOffersView
if (item != null && !empty) {
if (checkBox == null) {
checkBox = new AutoTooltipCheckBox();
checkBox = new AutoTooltipSlideToggleButton();
checkBox.setGraphic(iconView);
}
checkBox.setOnAction(event -> {
@ -597,10 +690,10 @@ public class OpenOffersView extends ActivatableViewAndModel<VBox, OpenOffersView
private void setEditColumnCellFactory() {
editItemColumn.setCellValueFactory((offerListItem) -> new ReadOnlyObjectWrapper<>(offerListItem.getValue()));
editItemColumn.setCellFactory(
new Callback<TableColumn<OpenOfferListItem, OpenOfferListItem>, TableCell<OpenOfferListItem, OpenOfferListItem>>() {
new Callback<>() {
@Override
public TableCell<OpenOfferListItem, OpenOfferListItem> call(TableColumn<OpenOfferListItem, OpenOfferListItem> column) {
return new TableCell<OpenOfferListItem, OpenOfferListItem>() {
return new TableCell<>() {
Button button;
@Override