Search in sources :

Example 1 with Tuple4

use of io.bitsquare.common.util.Tuple4 in project bitsquare by bitsquare.

the class FormBuilder method addLabelInputTextFieldLabelInputTextField.

///////////////////////////////////////////////////////////////////////////////////////////
// Label  + InputTextField + Label  + InputTextField
///////////////////////////////////////////////////////////////////////////////////////////
public static Tuple4<Label, InputTextField, Label, InputTextField> addLabelInputTextFieldLabelInputTextField(GridPane gridPane, int rowIndex, String title1, String title2) {
    Label label1 = addLabel(gridPane, rowIndex, title1, 0);
    InputTextField inputTextField1 = new InputTextField();
    Label label2 = new Label(title2);
    HBox.setMargin(label2, new Insets(5, 0, 0, 0));
    InputTextField inputTextField2 = new InputTextField();
    HBox hBox = new HBox();
    hBox.setSpacing(10);
    hBox.getChildren().addAll(inputTextField1, label2, inputTextField2);
    GridPane.setRowIndex(hBox, rowIndex);
    GridPane.setColumnIndex(hBox, 1);
    gridPane.getChildren().add(hBox);
    return new Tuple4<>(label1, inputTextField1, label2, inputTextField2);
}
Also used : Tuple4(io.bitsquare.common.util.Tuple4) Insets(javafx.geometry.Insets)

Example 2 with Tuple4

use of io.bitsquare.common.util.Tuple4 in project bitsquare by bitsquare.

the class OfferBookChartView method getOfferTable.

private Tuple4<TableView<OfferListItem>, VBox, Button, Label> getOfferTable(Offer.Direction direction) {
    TableView<OfferListItem> tableView = new TableView<>();
    tableView.setMinHeight(109);
    tableView.setPrefHeight(121);
    //530
    tableView.setMinWidth(480);
    // price
    TableColumn<OfferListItem, OfferListItem> priceColumn = new TableColumn<>();
    priceColumn.textProperty().bind(priceColumnLabel);
    //130
    priceColumn.setMinWidth(115);
    //130
    priceColumn.setMaxWidth(115);
    priceColumn.setSortable(false);
    priceColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
    priceColumn.setCellFactory(new Callback<TableColumn<OfferListItem, OfferListItem>, TableCell<OfferListItem, OfferListItem>>() {

        @Override
        public TableCell<OfferListItem, OfferListItem> call(TableColumn<OfferListItem, OfferListItem> column) {
            return new TableCell<OfferListItem, OfferListItem>() {

                private Offer offer;

                ChangeListener<Number> listener = new ChangeListener<Number>() {

                    @Override
                    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
                        if (offer != null && offer.getPrice() != null) {
                            setText(formatter.formatPrice(offer.getPrice()));
                            model.priceFeedService.currenciesUpdateFlagProperty().removeListener(listener);
                        }
                    }
                };

                @Override
                public void updateItem(final OfferListItem offerListItem, boolean empty) {
                    super.updateItem(offerListItem, empty);
                    if (offerListItem != null && !empty) {
                        if (offerListItem.offer.getPrice() == null) {
                            this.offer = offerListItem.offer;
                            model.priceFeedService.currenciesUpdateFlagProperty().addListener(listener);
                            setText("N/A");
                        } else {
                            setText(formatter.formatPrice(offerListItem.offer.getPrice()));
                        }
                    } else {
                        if (listener != null)
                            model.priceFeedService.currenciesUpdateFlagProperty().removeListener(listener);
                        this.offer = null;
                        setText("");
                    }
                }
            };
        }
    });
    // volume
    TableColumn<OfferListItem, OfferListItem> volumeColumn = new TableColumn<>();
    //125
    volumeColumn.setMinWidth(115);
    volumeColumn.setSortable(false);
    volumeColumn.textProperty().bind(volumeColumnLabel);
    volumeColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
    volumeColumn.setCellFactory(new Callback<TableColumn<OfferListItem, OfferListItem>, TableCell<OfferListItem, OfferListItem>>() {

        @Override
        public TableCell<OfferListItem, OfferListItem> call(TableColumn<OfferListItem, OfferListItem> column) {
            return new TableCell<OfferListItem, OfferListItem>() {

                private Offer offer;

                ChangeListener<Number> listener = new ChangeListener<Number>() {

                    @Override
                    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
                        if (offer != null && offer.getPrice() != null) {
                            setText(formatter.formatVolume(offer.getOfferVolume()));
                            model.priceFeedService.currenciesUpdateFlagProperty().removeListener(listener);
                        }
                    }
                };

                @Override
                public void updateItem(final OfferListItem offerListItem, boolean empty) {
                    super.updateItem(offerListItem, empty);
                    if (offerListItem != null && !empty) {
                        this.offer = offerListItem.offer;
                        if (offer.getPrice() == null) {
                            this.offer = offerListItem.offer;
                            model.priceFeedService.currenciesUpdateFlagProperty().addListener(listener);
                            setText("N/A");
                        } else {
                            setText(formatter.formatVolume(offer.getOfferVolume()));
                        }
                    } else {
                        if (listener != null)
                            model.priceFeedService.currenciesUpdateFlagProperty().removeListener(listener);
                        this.offer = null;
                        setText("");
                    }
                }
            };
        }
    });
    // amount
    TableColumn<OfferListItem, OfferListItem> amountColumn = new TableColumn<>("Amount in BTC");
    //125
    amountColumn.setMinWidth(115);
    amountColumn.setSortable(false);
    amountColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
    amountColumn.setCellFactory(new Callback<TableColumn<OfferListItem, OfferListItem>, TableCell<OfferListItem, OfferListItem>>() {

        @Override
        public TableCell<OfferListItem, OfferListItem> call(TableColumn<OfferListItem, OfferListItem> column) {
            return new TableCell<OfferListItem, OfferListItem>() {

                @Override
                public void updateItem(final OfferListItem offerListItem, boolean empty) {
                    super.updateItem(offerListItem, empty);
                    if (offerListItem != null && !empty)
                        setText(formatter.formatCoin(offerListItem.offer.getAmount()));
                    else
                        setText("");
                }
            };
        }
    });
    // accumulated
    TableColumn<OfferListItem, OfferListItem> accumulatedColumn = new TableColumn<>("Sum in BTC");
    //130
    accumulatedColumn.setMinWidth(100);
    accumulatedColumn.setSortable(false);
    accumulatedColumn.setCellValueFactory((offer) -> new ReadOnlyObjectWrapper<>(offer.getValue()));
    accumulatedColumn.setCellFactory(new Callback<TableColumn<OfferListItem, OfferListItem>, TableCell<OfferListItem, OfferListItem>>() {

        @Override
        public TableCell<OfferListItem, OfferListItem> call(TableColumn<OfferListItem, OfferListItem> column) {
            return new TableCell<OfferListItem, OfferListItem>() {

                @Override
                public void updateItem(final OfferListItem offerListItem, boolean empty) {
                    super.updateItem(offerListItem, empty);
                    if (offerListItem != null && !empty)
                        setText(formatter.formatRoundedDoubleWithPrecision(offerListItem.accumulated, 4));
                    else
                        setText("");
                }
            };
        }
    });
    if (direction == Offer.Direction.BUY) {
        tableView.getColumns().add(accumulatedColumn);
        tableView.getColumns().add(volumeColumn);
        tableView.getColumns().add(amountColumn);
        tableView.getColumns().add(priceColumn);
    } else {
        tableView.getColumns().add(priceColumn);
        tableView.getColumns().add(amountColumn);
        tableView.getColumns().add(volumeColumn);
        tableView.getColumns().add(accumulatedColumn);
    }
    tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
    Label placeholder = new Label("Currently there are no offers available");
    placeholder.setWrapText(true);
    tableView.setPlaceholder(placeholder);
    Label titleLabel = new Label();
    titleLabel.setStyle("-fx-font-weight: bold; -fx-font-size: 16; -fx-alignment: center");
    UserThread.execute(() -> titleLabel.prefWidthProperty().bind(tableView.widthProperty()));
    boolean isSellOffer = direction == Offer.Direction.SELL;
    Button button = new Button();
    ImageView iconView = new ImageView();
    iconView.setId(isSellOffer ? "image-buy-white" : "image-sell-white");
    button.setGraphic(iconView);
    button.setGraphicTextGap(10);
    button.setText(isSellOffer ? "I want to buy bitcoin" : "I want to sell bitcoin");
    button.setMinHeight(40);
    button.setId(isSellOffer ? "buy-button-big" : "sell-button-big");
    button.setOnAction(e -> {
        if (isSellOffer) {
            model.preferences.setBuyScreenCurrencyCode(model.getCurrencyCode());
            navigation.navigateTo(MainView.class, BuyOfferView.class);
        } else {
            model.preferences.setSellScreenCurrencyCode(model.getCurrencyCode());
            navigation.navigateTo(MainView.class, SellOfferView.class);
        }
    });
    VBox vBox = new VBox();
    vBox.setSpacing(10);
    vBox.setFillWidth(true);
    vBox.setMinHeight(190);
    vBox.getChildren().addAll(titleLabel, tableView, button);
    button.prefWidthProperty().bind(vBox.widthProperty());
    return new Tuple4<>(tableView, vBox, button, titleLabel);
}
Also used : ObservableValue(javafx.beans.value.ObservableValue) Tuple4(io.bitsquare.common.util.Tuple4) Offer(io.bitsquare.trade.offer.Offer) ListChangeListener(javafx.collections.ListChangeListener) ChangeListener(javafx.beans.value.ChangeListener) ImageView(javafx.scene.image.ImageView) VBox(javafx.scene.layout.VBox)

Example 3 with Tuple4

use of io.bitsquare.common.util.Tuple4 in project bitsquare by bitsquare.

the class TransactionsView method showStatisticsPopup.

private void showStatisticsPopup() {
    Map<Long, List<Coin>> map = new HashMap<>();
    Map<String, Tuple4<Date, Integer, Integer, Integer>> dataByDayMap = new HashMap<>();
    observableList.stream().forEach(item -> {
        Coin amountAsCoin = item.getAmountAsCoin();
        List<Coin> amounts;
        long key = amountAsCoin.getValue();
        if (!map.containsKey(key)) {
            amounts = new ArrayList<>();
            map.put(key, amounts);
        } else {
            amounts = map.get(key);
        }
        amounts.add(amountAsCoin);
        DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.US);
        String day = dateFormatter.format(item.getDate());
        if (!dataByDayMap.containsKey(day)) {
            int numOffers = 0;
            int numTrades = 0;
            if (amountAsCoin.compareTo(FeePolicy.getCreateOfferFee().subtract(FeePolicy.getFixedTxFeeForTrades())) == 0)
                numOffers++;
            else if (amountAsCoin.compareTo(FeePolicy.getTakeOfferFee().subtract(FeePolicy.getFixedTxFeeForTrades())) == 0)
                numTrades++;
            dataByDayMap.put(day, new Tuple4<>(item.getDate(), 1, numOffers, numTrades));
        } else {
            Tuple4<Date, Integer, Integer, Integer> tuple = dataByDayMap.get(day);
            int prev = tuple.second;
            int numOffers = tuple.third;
            int numTrades = tuple.forth;
            if (amountAsCoin.compareTo(FeePolicy.getCreateOfferFee().subtract(FeePolicy.getFixedTxFeeForTrades())) == 0)
                numOffers++;
            else if (amountAsCoin.compareTo(FeePolicy.getTakeOfferFee().subtract(FeePolicy.getFixedTxFeeForTrades())) == 0)
                numTrades++;
            dataByDayMap.put(day, new Tuple4<>(tuple.first, ++prev, numOffers, numTrades));
        }
    });
    StringBuilder stringBuilder = new StringBuilder();
    map.entrySet().stream().forEach(e -> {
        stringBuilder.append("No. of transactions for amount ").append(formatter.formatCoinWithCode(Coin.valueOf(e.getKey()))).append(": ").append(e.getValue().size()).append("\n");
    });
    List<Tuple4<String, Date, Integer, Tuple2<Integer, Integer>>> sortedDataByDayList = dataByDayMap.entrySet().stream().map(e -> {
        Tuple4<Date, Integer, Integer, Integer> data = e.getValue();
        return new Tuple4<>(e.getKey(), data.first, data.second, new Tuple2<>(data.third, data.forth));
    }).collect(Collectors.toList());
    sortedDataByDayList.sort((o1, o2) -> o2.second.compareTo(o1.second));
    StringBuilder transactionsByDayStringBuilder = new StringBuilder();
    StringBuilder offersStringBuilder = new StringBuilder();
    StringBuilder tradesStringBuilder = new StringBuilder();
    StringBuilder allStringBuilder = new StringBuilder();
    allStringBuilder.append("Date").append(";").append("Offers").append(";").append("Trades").append("\n");
    sortedDataByDayList.stream().forEach(tuple4 -> {
        offersStringBuilder.append(tuple4.forth.first).append(",");
        tradesStringBuilder.append(tuple4.forth.second).append(",");
        allStringBuilder.append(tuple4.first).append(";").append(tuple4.forth.first).append(";").append(tuple4.forth.second).append("\n");
        transactionsByDayStringBuilder.append("\n").append(tuple4.first).append(": ").append(tuple4.third).append(" (Offers: ").append(tuple4.forth.first).append(" / Trades: ").append(tuple4.forth.second).append(")");
    });
    String message = stringBuilder.toString() + "\nNo. of transactions by day:" + transactionsByDayStringBuilder.toString();
    new Popup().headLine("Statistical info").information(message).actionButtonText("Copy").onAction(() -> Utilities.copyToClipboard(message + "\n\nCSV (Offers):\n" + offersStringBuilder.toString() + "\n\nCSV (Trades):\n" + tradesStringBuilder.toString() + "\n\nCSV (all):\n" + allStringBuilder.toString())).show();
}
Also used : EventHandler(javafx.event.EventHandler) OpenOffer(io.bitsquare.trade.offer.OpenOffer) Scene(javafx.scene.Scene) Popup(io.bitsquare.gui.main.overlays.popups.Popup) java.util(java.util) javafx.scene.control(javafx.scene.control) AddressWithIconAndDirection(io.bitsquare.gui.components.AddressWithIconAndDirection) FXCollections(javafx.collections.FXCollections) DisputeManager(io.bitsquare.arbitration.DisputeManager) Trade(io.bitsquare.trade.Trade) CSVEntryConverter(com.googlecode.jcsv.writer.CSVEntryConverter) Tuple2(io.bitsquare.common.util.Tuple2) ActivatableView(io.bitsquare.gui.common.view.ActivatableView) VBox(javafx.scene.layout.VBox) Tradable(io.bitsquare.trade.Tradable) GUIUtil(io.bitsquare.gui.util.GUIUtil) KeyCombination(javafx.scene.input.KeyCombination) Inject(javax.inject.Inject) TradeManager(io.bitsquare.trade.TradeManager) FailedTradesManager(io.bitsquare.trade.failed.FailedTradesManager) ReadOnlyObjectWrapper(javafx.beans.property.ReadOnlyObjectWrapper) WalletService(io.bitsquare.btc.WalletService) TradeDetailsWindow(io.bitsquare.gui.main.overlays.windows.TradeDetailsWindow) FeePolicy(io.bitsquare.btc.FeePolicy) Callback(javafx.util.Callback) Nullable(javax.annotation.Nullable) DateFormat(java.text.DateFormat) BSFormatter(io.bitsquare.gui.util.BSFormatter) SortedList(javafx.collections.transformation.SortedList) KeyCode(javafx.scene.input.KeyCode) Utilities(io.bitsquare.common.util.Utilities) OfferDetailsWindow(io.bitsquare.gui.main.overlays.windows.OfferDetailsWindow) ClosedTradableManager(io.bitsquare.trade.closed.ClosedTradableManager) KeyEvent(javafx.scene.input.KeyEvent) Collectors(java.util.stream.Collectors) org.bitcoinj.core(org.bitcoinj.core) FXML(javafx.fxml.FXML) KeyCodeCombination(javafx.scene.input.KeyCodeCombination) Preferences(io.bitsquare.user.Preferences) HyperlinkWithIcon(io.bitsquare.gui.components.HyperlinkWithIcon) Script(org.bitcoinj.script.Script) Stream(java.util.stream.Stream) Stage(javafx.stage.Stage) Tuple4(io.bitsquare.common.util.Tuple4) OpenOfferManager(io.bitsquare.trade.offer.OpenOfferManager) ObservableList(javafx.collections.ObservableList) AwesomeIcon(de.jensd.fx.fontawesome.AwesomeIcon) FxmlView(io.bitsquare.gui.common.view.FxmlView) Tuple4(io.bitsquare.common.util.Tuple4) Tuple2(io.bitsquare.common.util.Tuple2) DateFormat(java.text.DateFormat) Popup(io.bitsquare.gui.main.overlays.popups.Popup) SortedList(javafx.collections.transformation.SortedList) ObservableList(javafx.collections.ObservableList)

Example 4 with Tuple4

use of io.bitsquare.common.util.Tuple4 in project bitsquare by bitsquare.

the class FormBuilder method addLabelTextFieldLabelTextField.

///////////////////////////////////////////////////////////////////////////////////////////
// Label  + TextField + Label  + TextField
///////////////////////////////////////////////////////////////////////////////////////////
public static Tuple4<Label, TextField, Label, TextField> addLabelTextFieldLabelTextField(GridPane gridPane, int rowIndex, String title1, String title2) {
    Label label1 = addLabel(gridPane, rowIndex, title1, 0);
    TextField textField1 = new TextField();
    textField1.setEditable(false);
    textField1.setMouseTransparent(true);
    textField1.setFocusTraversable(false);
    Label label2 = new Label(title2);
    HBox.setMargin(label2, new Insets(5, 0, 0, 0));
    TextField textField2 = new TextField();
    textField2.setEditable(false);
    textField2.setMouseTransparent(true);
    textField2.setFocusTraversable(false);
    HBox hBox = new HBox();
    hBox.setSpacing(10);
    hBox.getChildren().addAll(textField1, label2, textField2);
    GridPane.setRowIndex(hBox, rowIndex);
    GridPane.setColumnIndex(hBox, 1);
    gridPane.getChildren().add(hBox);
    return new Tuple4<>(label1, textField1, label2, textField2);
}
Also used : Tuple4(io.bitsquare.common.util.Tuple4) Insets(javafx.geometry.Insets)

Aggregations

Tuple4 (io.bitsquare.common.util.Tuple4)4 VBox (javafx.scene.layout.VBox)2 CSVEntryConverter (com.googlecode.jcsv.writer.CSVEntryConverter)1 AwesomeIcon (de.jensd.fx.fontawesome.AwesomeIcon)1 DisputeManager (io.bitsquare.arbitration.DisputeManager)1 FeePolicy (io.bitsquare.btc.FeePolicy)1 WalletService (io.bitsquare.btc.WalletService)1 Tuple2 (io.bitsquare.common.util.Tuple2)1 Utilities (io.bitsquare.common.util.Utilities)1 ActivatableView (io.bitsquare.gui.common.view.ActivatableView)1 FxmlView (io.bitsquare.gui.common.view.FxmlView)1 AddressWithIconAndDirection (io.bitsquare.gui.components.AddressWithIconAndDirection)1 HyperlinkWithIcon (io.bitsquare.gui.components.HyperlinkWithIcon)1 Popup (io.bitsquare.gui.main.overlays.popups.Popup)1 OfferDetailsWindow (io.bitsquare.gui.main.overlays.windows.OfferDetailsWindow)1 TradeDetailsWindow (io.bitsquare.gui.main.overlays.windows.TradeDetailsWindow)1 BSFormatter (io.bitsquare.gui.util.BSFormatter)1 GUIUtil (io.bitsquare.gui.util.GUIUtil)1 Tradable (io.bitsquare.trade.Tradable)1 Trade (io.bitsquare.trade.Trade)1