/*
* This file is part of Bitsquare.
*
* Bitsquare 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.
*
* Bitsquare 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 Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/
package io.bitsquare.gui.components.paymentmethods;
import com.google.common.base.Joiner;
import io.bitsquare.common.util.Tuple3;
import io.bitsquare.gui.components.InputTextField;
import io.bitsquare.gui.util.BSFormatter;
import io.bitsquare.gui.util.validation.InputValidator;
import io.bitsquare.payment.PaymentAccount;
import io.bitsquare.payment.PaymentAccountContractData;
import io.bitsquare.payment.SpecificBanksAccountContractData;
import javafx.beans.binding.Bindings;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.GridPane;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static io.bitsquare.gui.util.FormBuilder.*;
public class SpecificBankForm extends BankForm {
private static final Logger log = LoggerFactory.getLogger(SpecificBankForm.class);
private final SpecificBanksAccountContractData specificBanksAccountContractData;
private TextField acceptedBanksTextField;
private Tooltip acceptedBanksTooltip;
public static int addFormForBuyer(GridPane gridPane, int gridRow, PaymentAccountContractData paymentAccountContractData) {
return BankForm.addFormForBuyer(gridPane, gridRow, paymentAccountContractData);
}
public SpecificBankForm(PaymentAccount paymentAccount, InputValidator inputValidator,
GridPane gridPane, int gridRow, BSFormatter formatter, Runnable closeHandler) {
super(paymentAccount, inputValidator, gridPane, gridRow, formatter, closeHandler);
this.specificBanksAccountContractData = (SpecificBanksAccountContractData) paymentAccount.contractData;
}
@Override
protected void addAcceptedBanksForAddAccount() {
Tuple3<Label, InputTextField, Button> addBankTuple = addLabelInputTextFieldButton(gridPane, ++gridRow, "Name of accepted bank:", "Add accepted bank");
InputTextField addBankInputTextField = addBankTuple.second;
Button addButton = addBankTuple.third;
addButton.setMinWidth(200);
addButton.disableProperty().bind(Bindings.createBooleanBinding(() -> addBankInputTextField.getText().isEmpty(), addBankInputTextField.textProperty()));
Tuple3<Label, TextField, Button> acceptedBanksTuple = addLabelTextFieldButton(gridPane, ++gridRow, "Accepted banks:", "Clear accepted banks");
acceptedBanksTextField = acceptedBanksTuple.second;
acceptedBanksTextField.setMouseTransparent(false);
acceptedBanksTooltip = new Tooltip();
acceptedBanksTextField.setTooltip(acceptedBanksTooltip);
Button clearButton = acceptedBanksTuple.third;
clearButton.setMinWidth(200);
clearButton.setDefaultButton(false);
clearButton.disableProperty().bind(Bindings.createBooleanBinding(() -> acceptedBanksTextField.getText().isEmpty(), acceptedBanksTextField.textProperty()));
addButton.setOnAction(e -> {
specificBanksAccountContractData.addAcceptedBank(addBankInputTextField.getText());
addBankInputTextField.setText("");
String value = Joiner.on(", ").join(specificBanksAccountContractData.getAcceptedBanks());
acceptedBanksTextField.setText(value);
acceptedBanksTooltip.setText(value);
updateAllInputsValid();
});
clearButton.setOnAction(e -> resetAcceptedBanks());
}
private void resetAcceptedBanks() {
specificBanksAccountContractData.clearAcceptedBanks();
acceptedBanksTextField.setText("");
acceptedBanksTooltip.setText("");
updateAllInputsValid();
}
@Override
protected void onCountryChanged() {
resetAcceptedBanks();
}
@Override
public void addAcceptedBanksForDisplayAccount() {
addLabelTextField(gridPane, ++gridRow, "Accepted banks:",
Joiner.on(", ").join(specificBanksAccountContractData.getAcceptedBanks())).second.setMouseTransparent(false);
}
@Override
public void updateAllInputsValid() {
super.updateAllInputsValid();
allInputsValid.set(allInputsValid.get() && inputValidator.validate(acceptedBanksTextField.getText()).isValid);
}
}