Search in sources :

Example 31 with Popup

use of bisq.desktop.main.overlays.popups.Popup in project bisq-desktop by bisq-network.

the class GUIUtil method exportAccounts.

public static void exportAccounts(ArrayList<PaymentAccount> accounts, String fileName, Preferences preferences, Stage stage, PersistenceProtoResolver persistenceProtoResolver) {
    if (!accounts.isEmpty()) {
        String directory = getDirectoryFromChooser(preferences, stage);
        if (directory != null && !directory.isEmpty()) {
            Storage<PersistableList<PaymentAccount>> paymentAccountsStorage = new Storage<>(new File(directory), persistenceProtoResolver);
            paymentAccountsStorage.initAndGetPersisted(new PaymentAccountList(accounts), fileName, 100);
            paymentAccountsStorage.queueUpForSave();
            new Popup<>().feedback(Res.get("guiUtil.accountExport.savedToPath", Paths.get(directory, fileName).toAbsolutePath())).show();
        }
    } else {
        new Popup<>().warning(Res.get("guiUtil.accountExport.noAccountSetup")).show();
    }
}
Also used : PaymentAccountList(bisq.core.payment.PaymentAccountList) Storage(bisq.common.storage.Storage) PersistableList(bisq.common.proto.persistable.PersistableList) Popup(bisq.desktop.main.overlays.popups.Popup) File(java.io.File)

Example 32 with Popup

use of bisq.desktop.main.overlays.popups.Popup in project bisq-desktop by bisq-network.

the class DepositView method initialize.

@Override
public void initialize() {
    paymentLabelString = Res.get("funds.deposit.fundBisqWallet");
    selectColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.select")));
    addressColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.address")));
    balanceColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.balanceWithCur", Res.getBaseCurrencyCode())));
    confirmationsColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.confirmations")));
    usageColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.usage")));
    // trigger creation of at least 1 savings address
    walletService.getOrCreateAddressEntry(AddressEntry.Context.AVAILABLE);
    tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
    tableView.setPlaceholder(new AutoTooltipLabel(Res.get("funds.deposit.noAddresses")));
    tableViewSelectionListener = (observableValue, oldValue, newValue) -> {
        if (newValue != null) {
            fillForm(newValue.getAddressString());
            GUIUtil.requestFocus(amountTextField);
        }
    };
    setSelectColumnCellFactory();
    setAddressColumnCellFactory();
    setBalanceColumnCellFactory();
    setUsageColumnCellFactory();
    setConfidenceColumnCellFactory();
    addressColumn.setComparator((o1, o2) -> o1.getAddressString().compareTo(o2.getAddressString()));
    balanceColumn.setComparator((o1, o2) -> o1.getBalanceAsCoin().compareTo(o2.getBalanceAsCoin()));
    confirmationsColumn.setComparator((o1, o2) -> Double.valueOf(o1.getTxConfidenceIndicator().getProgress()).compareTo(o2.getTxConfidenceIndicator().getProgress()));
    usageColumn.setComparator((a, b) -> (a.getNumTxOutputs() < b.getNumTxOutputs()) ? -1 : ((a.getNumTxOutputs() == b.getNumTxOutputs()) ? 0 : 1));
    tableView.getSortOrder().add(usageColumn);
    tableView.setItems(sortedList);
    titledGroupBg = addTitledGroupBg(gridPane, gridRow, 3, Res.get("funds.deposit.fundWallet"));
    qrCodeImageView = new ImageView();
    qrCodeImageView.getStyleClass().add("qr-code");
    Tooltip.install(qrCodeImageView, new Tooltip(Res.get("shared.openLargeQRWindow")));
    qrCodeImageView.setOnMouseClicked(e -> GUIUtil.showFeeInfoBeforeExecute(() -> UserThread.runAfter(() -> new QRCodeWindow(getBitcoinURI()).show(), 200, TimeUnit.MILLISECONDS)));
    GridPane.setRowIndex(qrCodeImageView, gridRow);
    GridPane.setColumnIndex(qrCodeImageView, 1);
    GridPane.setMargin(qrCodeImageView, new Insets(Layout.FIRST_ROW_DISTANCE, 0, 0, 0));
    gridPane.getChildren().add(qrCodeImageView);
    Tuple2<Label, AddressTextField> addressTuple = addLabelAddressTextField(gridPane, ++gridRow, Res.getWithCol("shared.address"));
    addressLabel = addressTuple.first;
    // GridPane.setValignment(addressLabel, VPos.TOP);
    // GridPane.setMargin(addressLabel, new Insets(3, 0, 0, 0));
    addressTextField = addressTuple.second;
    addressTextField.setPaymentLabel(paymentLabelString);
    Tuple2<Label, InputTextField> amountTuple = addLabelInputTextField(gridPane, ++gridRow, Res.get("funds.deposit.amount"));
    amountLabel = amountTuple.first;
    amountTextField = amountTuple.second;
    if (DevEnv.isDevMode())
        amountTextField.setText("10");
    titledGroupBg.setVisible(false);
    titledGroupBg.setManaged(false);
    qrCodeImageView.setVisible(false);
    qrCodeImageView.setManaged(false);
    addressLabel.setVisible(false);
    addressLabel.setManaged(false);
    addressTextField.setVisible(false);
    addressTextField.setManaged(false);
    amountLabel.setVisible(false);
    amountTextField.setManaged(false);
    generateNewAddressButton = addButton(gridPane, ++gridRow, Res.get("funds.deposit.generateAddress"), -20);
    GridPane.setColumnIndex(generateNewAddressButton, 0);
    GridPane.setHalignment(generateNewAddressButton, HPos.LEFT);
    generateNewAddressButton.setOnAction(event -> {
        boolean hasUnUsedAddress = observableList.stream().filter(e -> e.getNumTxOutputs() == 0).findAny().isPresent();
        if (hasUnUsedAddress) {
            new Popup<>().warning(Res.get("funds.deposit.selectUnused")).show();
        } else {
            AddressEntry newSavingsAddressEntry = walletService.getOrCreateUnusedAddressEntry(AddressEntry.Context.AVAILABLE);
            updateList();
            observableList.stream().filter(depositListItem -> depositListItem.getAddressString().equals(newSavingsAddressEntry.getAddressString())).findAny().ifPresent(depositListItem -> tableView.getSelectionModel().select(depositListItem));
        }
    });
    balanceListener = new BalanceListener() {

        @Override
        public void onBalanceChanged(Coin balance, Transaction tx) {
            updateList();
        }
    };
    GUIUtil.focusWhenAddedToScene(amountTextField);
}
Also used : Insets(javafx.geometry.Insets) BalanceListener(bisq.core.btc.listeners.BalanceListener) AddressEntry(bisq.core.btc.AddressEntry) AddressTextField(bisq.desktop.components.AddressTextField) FormBuilder.addLabelAddressTextField(bisq.desktop.util.FormBuilder.addLabelAddressTextField) InputTextField(bisq.desktop.components.InputTextField) FormBuilder.addLabelInputTextField(bisq.desktop.util.FormBuilder.addLabelInputTextField) Tooltip(javafx.scene.control.Tooltip) AutoTooltipLabel(bisq.desktop.components.AutoTooltipLabel) Label(javafx.scene.control.Label) QRCodeWindow(bisq.desktop.main.overlays.windows.QRCodeWindow) Coin(org.bitcoinj.core.Coin) Transaction(org.bitcoinj.core.Transaction) Popup(bisq.desktop.main.overlays.popups.Popup) ImageView(javafx.scene.image.ImageView) AutoTooltipLabel(bisq.desktop.components.AutoTooltipLabel)

Example 33 with Popup

use of bisq.desktop.main.overlays.popups.Popup in project bisq-desktop by bisq-network.

the class SpreadViewModel method update.

private void update(ObservableList<OfferBookListItem> offerBookListItems) {
    Map<String, List<Offer>> offersByCurrencyMap = new HashMap<>();
    for (OfferBookListItem offerBookListItem : offerBookListItems) {
        Offer offer = offerBookListItem.getOffer();
        String currencyCode = offer.getCurrencyCode();
        if (!offersByCurrencyMap.containsKey(currencyCode))
            offersByCurrencyMap.put(currencyCode, new ArrayList<>());
        offersByCurrencyMap.get(currencyCode).add(offer);
    }
    spreadItems.clear();
    Coin totalAmount = null;
    for (String currencyCode : offersByCurrencyMap.keySet()) {
        List<Offer> offers = offersByCurrencyMap.get(currencyCode);
        final boolean isFiatCurrency = CurrencyUtil.isFiatCurrency(currencyCode);
        List<Offer> buyOffers = offers.stream().filter(e -> e.getDirection().equals(OfferPayload.Direction.BUY)).sorted((o1, o2) -> {
            long a = o1.getPrice() != null ? o1.getPrice().getValue() : 0;
            long b = o2.getPrice() != null ? o2.getPrice().getValue() : 0;
            if (a != b) {
                if (isFiatCurrency) {
                    return a < b ? 1 : -1;
                } else {
                    return a < b ? -1 : 1;
                }
            }
            return 0;
        }).collect(Collectors.toList());
        List<Offer> sellOffers = offers.stream().filter(e -> e.getDirection().equals(OfferPayload.Direction.SELL)).sorted((o1, o2) -> {
            long a = o1.getPrice() != null ? o1.getPrice().getValue() : 0;
            long b = o2.getPrice() != null ? o2.getPrice().getValue() : 0;
            if (a != b) {
                if (isFiatCurrency) {
                    return a > b ? 1 : -1;
                } else {
                    return a > b ? -1 : 1;
                }
            }
            return 0;
        }).collect(Collectors.toList());
        Price spread = null;
        String percentage = "";
        Price bestSellOfferPrice = sellOffers.isEmpty() ? null : sellOffers.get(0).getPrice();
        Price bestBuyOfferPrice = buyOffers.isEmpty() ? null : buyOffers.get(0).getPrice();
        if (bestBuyOfferPrice != null && bestSellOfferPrice != null) {
            MarketPrice marketPrice = priceFeedService.getMarketPrice(currencyCode);
            // happens again
            try {
                if (isFiatCurrency)
                    spread = bestSellOfferPrice.subtract(bestBuyOfferPrice);
                else
                    spread = bestBuyOfferPrice.subtract(bestSellOfferPrice);
                if (spread != null && marketPrice != null && marketPrice.isPriceAvailable()) {
                    double marketPriceAsDouble = marketPrice.getPrice();
                    final double precision = isFiatCurrency ? Math.pow(10, Fiat.SMALLEST_UNIT_EXPONENT) : Math.pow(10, Altcoin.SMALLEST_UNIT_EXPONENT);
                    BigDecimal marketPriceAsBigDecimal = BigDecimal.valueOf(marketPriceAsDouble).multiply(BigDecimal.valueOf(precision));
                    // We multiply with 10000 because we use precision of 2 at % (100.00%)
                    double result = BigDecimal.valueOf(spread.getValue()).multiply(BigDecimal.valueOf(10000)).divide(marketPriceAsBigDecimal, RoundingMode.HALF_UP).doubleValue() / 10000;
                    percentage = formatter.formatPercentagePrice(result);
                }
            } catch (Throwable t) {
                try {
                    // Don't translate msg. It is just for rare error cases and can be removed probably later if
                    // that error never gets reported again.
                    String msg = "An error occurred at the spread calculation.\n" + "Error msg: " + t.toString() + "\n" + "Details of offer data: \n" + "bestSellOfferPrice: " + bestSellOfferPrice.getValue() + "\n" + "bestBuyOfferPrice: " + bestBuyOfferPrice.getValue() + "\n" + "sellOffer getCurrencyCode: " + sellOffers.get(0).getCurrencyCode() + "\n" + "buyOffer getCurrencyCode: " + buyOffers.get(0).getCurrencyCode() + "\n\n" + "Please copy and paste this data and send it to the developers so they can investigate the issue.";
                    new Popup<>().error(msg).show();
                    log.error(t.toString());
                    t.printStackTrace();
                } catch (Throwable t2) {
                    log.error(t2.toString());
                    t2.printStackTrace();
                }
            }
        }
        totalAmount = Coin.valueOf(offers.stream().mapToLong(offer -> offer.getAmount().getValue()).sum());
        spreadItems.add(new SpreadItem(currencyCode, buyOffers.size(), sellOffers.size(), offers.size(), spread, percentage, totalAmount));
    }
    maxPlacesForAmount.set(formatAmount(totalAmount, false).length());
}
Also used : Altcoin(bisq.core.monetary.Altcoin) GUIUtil(bisq.desktop.util.GUIUtil) Coin(org.bitcoinj.core.Coin) Inject(com.google.inject.Inject) FXCollections(javafx.collections.FXCollections) HashMap(java.util.HashMap) IntegerProperty(javafx.beans.property.IntegerProperty) BSFormatter(bisq.desktop.util.BSFormatter) ArrayList(java.util.ArrayList) BigDecimal(java.math.BigDecimal) OfferPayload(bisq.core.offer.OfferPayload) ListChangeListener(javafx.collections.ListChangeListener) SimpleIntegerProperty(javafx.beans.property.SimpleIntegerProperty) Map(java.util.Map) CurrencyUtil(bisq.core.locale.CurrencyUtil) RoundingMode(java.math.RoundingMode) Popup(bisq.desktop.main.overlays.popups.Popup) Offer(bisq.core.offer.Offer) OfferBook(bisq.desktop.main.offer.offerbook.OfferBook) Fiat(org.bitcoinj.utils.Fiat) OfferBookListItem(bisq.desktop.main.offer.offerbook.OfferBookListItem) Collectors(java.util.stream.Collectors) ActivatableViewModel(bisq.desktop.common.model.ActivatableViewModel) List(java.util.List) PriceFeedService(bisq.core.provider.price.PriceFeedService) Price(bisq.core.monetary.Price) ObservableList(javafx.collections.ObservableList) MarketPrice(bisq.core.provider.price.MarketPrice) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) BigDecimal(java.math.BigDecimal) Coin(org.bitcoinj.core.Coin) OfferBookListItem(bisq.desktop.main.offer.offerbook.OfferBookListItem) MarketPrice(bisq.core.provider.price.MarketPrice) Offer(bisq.core.offer.Offer) Price(bisq.core.monetary.Price) MarketPrice(bisq.core.provider.price.MarketPrice) ArrayList(java.util.ArrayList) List(java.util.List) ObservableList(javafx.collections.ObservableList)

Example 34 with Popup

use of bisq.desktop.main.overlays.popups.Popup in project bisq-desktop by bisq-network.

the class CreateOfferView method onShowPayFundsScreen.

private void onShowPayFundsScreen() {
    nextButton.setVisible(false);
    nextButton.setManaged(false);
    nextButton.setOnAction(null);
    cancelButton1.setVisible(false);
    cancelButton1.setManaged(false);
    cancelButton1.setOnAction(null);
    int delay = 500;
    int diff = 100;
    transitions.fadeOutAndRemove(setDepositTitledGroupBg, delay, (event) -> {
    });
    delay -= diff;
    transitions.fadeOutAndRemove(buyerSecurityDepositLabel, delay);
    transitions.fadeOutAndRemove(buyerSecurityDepositValueCurrencyBox, delay);
    model.onShowPayFundsScreen();
    editOfferElements.stream().forEach(node -> {
        node.setMouseTransparent(true);
        node.setFocusTraversable(false);
    });
    balanceTextField.setTargetAmount(model.dataModel.totalToPayAsCoinProperty().get());
    // noinspection PointlessBooleanExpression
    if (!DevEnv.isDevMode()) {
        String key = "securityDepositInfo";
        new Popup<>().backgroundInfo(Res.get("popup.info.securityDepositInfo")).actionButtonText(Res.get("shared.faq")).onAction(() -> GUIUtil.openWebPage("https://bisq.network/faq#6")).useIUnderstandButton().dontShowAgainId(key).show();
        key = "createOfferFundWalletInfo";
        String tradeAmountText = model.isSellOffer() ? Res.get("createOffer.createOfferFundWalletInfo.tradeAmount", model.getTradeAmount()) : "";
        String message = Res.get("createOffer.createOfferFundWalletInfo.msg", model.totalToPay.get(), tradeAmountText, model.getSecurityDepositInfo(), model.getMakerFee(), model.getTxFee());
        new Popup<>().headLine(Res.get("createOffer.createOfferFundWalletInfo.headline")).instruction(message).dontShowAgainId(key).show();
    }
    waitingForFundsBusyAnimation.play();
    payFundsTitledGroupBg.setVisible(true);
    totalToPayLabel.setVisible(true);
    totalToPayTextField.setVisible(true);
    addressLabel.setVisible(true);
    addressTextField.setVisible(true);
    qrCodeImageView.setVisible(true);
    balanceLabel.setVisible(true);
    balanceTextField.setVisible(true);
    cancelButton2.setVisible(true);
    totalToPayTextField.setFundsStructure(Res.get("createOffer.fundsBox.fundsStructure", model.getSecurityDepositWithCode(), model.getMakerFeePercentage(), model.getTxFeePercentage()));
    totalToPayTextField.setContentForInfoPopOver(createInfoPopover());
    final byte[] imageBytes = QRCode.from(getBitcoinURI()).withSize(98, // code has 41 elements 8 px is border with 98 we get double scale and min. border
    98).to(ImageType.PNG).stream().toByteArray();
    Image qrImage = new Image(new ByteArrayInputStream(imageBytes));
    qrCodeImageView.setImage(qrImage);
}
Also used : ByteArrayInputStream(java.io.ByteArrayInputStream) Popup(bisq.desktop.main.overlays.popups.Popup) Image(javafx.scene.image.Image)

Example 35 with Popup

use of bisq.desktop.main.overlays.popups.Popup in project bisq-desktop by bisq-network.

the class CreateOfferViewModel method createListeners.

private void createListeners() {
    amountStringListener = (ov, oldValue, newValue) -> {
        if (!ignoreAmountStringListener) {
            if (isBtcInputValid(newValue).isValid) {
                setAmountToModel();
                dataModel.calculateVolume();
                dataModel.calculateTotalToPay();
            }
            updateButtonDisableState();
        }
    };
    minAmountStringListener = (ov, oldValue, newValue) -> {
        if (isBtcInputValid(newValue).isValid)
            setMinAmountToModel();
        updateButtonDisableState();
    };
    priceStringListener = (ov, oldValue, newValue) -> {
        updateMarketPriceAvailable();
        final String currencyCode = dataModel.getTradeCurrencyCode().get();
        if (!ignorePriceStringListener) {
            if (isPriceInputValid(newValue).isValid) {
                setPriceToModel();
                dataModel.calculateVolume();
                dataModel.calculateTotalToPay();
                if (!inputIsMarketBasedPrice) {
                    if (marketPrice != null && marketPrice.isRecentExternalPriceAvailable()) {
                        double marketPriceAsDouble = marketPrice.getPrice();
                        try {
                            double priceAsDouble = btcFormatter.parseNumberStringToDouble(price.get());
                            double relation = priceAsDouble / marketPriceAsDouble;
                            final OfferPayload.Direction compareDirection = CurrencyUtil.isCryptoCurrency(currencyCode) ? OfferPayload.Direction.SELL : OfferPayload.Direction.BUY;
                            double percentage = dataModel.getDirection() == compareDirection ? 1 - relation : relation - 1;
                            percentage = MathUtils.roundDouble(percentage, 4);
                            dataModel.setMarketPriceMargin(percentage);
                            marketPriceMargin.set(btcFormatter.formatToPercent(percentage));
                            applyMakerFee();
                        } catch (NumberFormatException t) {
                            marketPriceMargin.set("");
                            new Popup<>().warning(Res.get("validation.NaN")).show();
                        }
                    } else {
                        log.debug("We don't have a market price. We use the static price instead.");
                    }
                }
            }
        }
        updateButtonDisableState();
    };
    marketPriceMarginStringListener = (ov, oldValue, newValue) -> {
        if (inputIsMarketBasedPrice) {
            try {
                if (!newValue.isEmpty() && !newValue.equals("-")) {
                    double percentage = btcFormatter.parsePercentStringToDouble(newValue);
                    if (percentage >= 1 || percentage <= -1) {
                        new Popup<>().warning(Res.get("popup.warning.tooLargePercentageValue") + "\n" + Res.get("popup.warning.examplePercentageValue")).show();
                    } else {
                        final String currencyCode = dataModel.getTradeCurrencyCode().get();
                        MarketPrice marketPrice = priceFeedService.getMarketPrice(currencyCode);
                        if (marketPrice != null && marketPrice.isRecentExternalPriceAvailable()) {
                            percentage = MathUtils.roundDouble(percentage, 4);
                            double marketPriceAsDouble = marketPrice.getPrice();
                            final boolean isCryptoCurrency = CurrencyUtil.isCryptoCurrency(currencyCode);
                            final OfferPayload.Direction compareDirection = isCryptoCurrency ? OfferPayload.Direction.SELL : OfferPayload.Direction.BUY;
                            double factor = dataModel.getDirection() == compareDirection ? 1 - percentage : 1 + percentage;
                            double targetPrice = marketPriceAsDouble * factor;
                            int precision = isCryptoCurrency ? Altcoin.SMALLEST_UNIT_EXPONENT : Fiat.SMALLEST_UNIT_EXPONENT;
                            // protect from triggering unwanted updates
                            ignorePriceStringListener = true;
                            price.set(btcFormatter.formatRoundedDoubleWithPrecision(targetPrice, precision));
                            ignorePriceStringListener = false;
                            setPriceToModel();
                            dataModel.setMarketPriceMargin(percentage);
                            dataModel.calculateVolume();
                            dataModel.calculateTotalToPay();
                            updateButtonDisableState();
                            applyMakerFee();
                        } else {
                            new Popup<>().warning(Res.get("popup.warning.noPriceFeedAvailable")).show();
                            marketPriceMargin.set("");
                        }
                    }
                }
            } catch (NumberFormatException t) {
                log.error(t.toString());
                t.printStackTrace();
                new Popup<>().warning(Res.get("validation.NaN")).show();
            } catch (Throwable t) {
                log.error(t.toString());
                t.printStackTrace();
                new Popup<>().warning(Res.get("validation.inputError", t.toString())).show();
            }
        }
    };
    useMarketBasedPriceListener = (observable, oldValue, newValue) -> {
        if (newValue)
            priceValidationResult.set(new InputValidator.ValidationResult(true));
    };
    volumeStringListener = (ov, oldValue, newValue) -> {
        if (!ignoreVolumeStringListener) {
            if (isVolumeInputValid(newValue).isValid) {
                setVolumeToModel();
                setPriceToModel();
                dataModel.calculateAmount();
                dataModel.calculateTotalToPay();
            }
            updateButtonDisableState();
        }
    };
    securityDepositStringListener = (ov, oldValue, newValue) -> {
        if (!ignoreSecurityDepositStringListener) {
            if (securityDepositValidator.validate(newValue).isValid) {
                setBuyerSecurityDepositToModel();
                dataModel.calculateTotalToPay();
            }
            updateButtonDisableState();
        }
    };
    amountAsCoinListener = (ov, oldValue, newValue) -> {
        if (newValue != null)
            amount.set(btcFormatter.formatCoin(newValue));
        else
            amount.set("");
        applyMakerFee();
    };
    minAmountAsCoinListener = (ov, oldValue, newValue) -> {
        if (newValue != null)
            minAmount.set(btcFormatter.formatCoin(newValue));
        else
            minAmount.set("");
    };
    priceListener = (ov, oldValue, newValue) -> {
        ignorePriceStringListener = true;
        if (newValue != null)
            price.set(btcFormatter.formatPrice(newValue));
        else
            price.set("");
        ignorePriceStringListener = false;
        applyMakerFee();
    };
    volumeListener = (ov, oldValue, newValue) -> {
        ignoreVolumeStringListener = true;
        if (newValue != null)
            volume.set(btcFormatter.formatVolume(newValue));
        else
            volume.set("");
        ignoreVolumeStringListener = false;
        applyMakerFee();
    };
    securityDepositAsCoinListener = (ov, oldValue, newValue) -> {
        if (newValue != null)
            buyerSecurityDeposit.set(btcFormatter.formatCoin(newValue));
        else
            buyerSecurityDeposit.set("");
    };
    isWalletFundedListener = (ov, oldValue, newValue) -> updateButtonDisableState();
    /* feeFromFundingTxListener = (ov, oldValue, newValue) -> {
            updateButtonDisableState();
        };*/
    currenciesUpdateListener = (observable, oldValue, newValue) -> {
        updateMarketPriceAvailable();
        updateButtonDisableState();
    };
}
Also used : MarketPrice(bisq.core.provider.price.MarketPrice) Popup(bisq.desktop.main.overlays.popups.Popup) OfferPayload(bisq.core.offer.OfferPayload)

Aggregations

Popup (bisq.desktop.main.overlays.popups.Popup)57 Label (javafx.scene.control.Label)22 Coin (org.bitcoinj.core.Coin)17 AutoTooltipLabel (bisq.desktop.components.AutoTooltipLabel)16 Button (javafx.scene.control.Button)16 Res (bisq.core.locale.Res)13 AutoTooltipButton (bisq.desktop.components.AutoTooltipButton)13 Insets (javafx.geometry.Insets)13 InputTextField (bisq.desktop.components.InputTextField)12 BSFormatter (bisq.desktop.util.BSFormatter)12 Transaction (org.bitcoinj.core.Transaction)12 List (java.util.List)11 UserThread (bisq.common.UserThread)10 ChangeListener (javafx.beans.value.ChangeListener)9 BusyAnimation (bisq.desktop.components.BusyAnimation)8 ObservableList (javafx.collections.ObservableList)8 HBox (javafx.scene.layout.HBox)8 Tuple2 (bisq.common.util.Tuple2)7 FxmlView (bisq.desktop.common.view.FxmlView)7 TradeCurrency (bisq.core.locale.TradeCurrency)6