diff --git a/src/main/java/io/bitsquare/gui/arbitrators/profile/ArbitratorProfileView.fxml b/src/main/java/io/bitsquare/gui/arbitrators/profile/ArbitratorProfileView.fxml
index 7ade2330ef..5fa173d715 100644
--- a/src/main/java/io/bitsquare/gui/arbitrators/profile/ArbitratorProfileView.fxml
+++ b/src/main/java/io/bitsquare/gui/arbitrators/profile/ArbitratorProfileView.fxml
@@ -7,37 +7,37 @@
xmlns="http://javafx.com/javafx/8" fx:controller="io.bitsquare.gui.arbitrators.profile.ArbitratorProfileController">
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/src/main/java/io/bitsquare/gui/arbitrators/registration/ArbitratorRegistrationView.fxml b/src/main/java/io/bitsquare/gui/arbitrators/registration/ArbitratorRegistrationView.fxml
index 0ddd7ffff5..a70191dc94 100644
--- a/src/main/java/io/bitsquare/gui/arbitrators/registration/ArbitratorRegistrationView.fxml
+++ b/src/main/java/io/bitsquare/gui/arbitrators/registration/ArbitratorRegistrationView.fxml
@@ -18,11 +18,11 @@
-
+
-
+
@@ -42,12 +42,12 @@
-
+
-
+
@@ -99,7 +99,7 @@
-
+
-
+
diff --git a/src/main/java/io/bitsquare/gui/bitsquare.css b/src/main/java/io/bitsquare/gui/bitsquare.css
index 617f8bfbd1..e7870f3609 100644
--- a/src/main/java/io/bitsquare/gui/bitsquare.css
+++ b/src/main/java/io/bitsquare/gui/bitsquare.css
@@ -53,7 +53,7 @@
.text-field:readonly {
-fx-text-fill: #000000;
- -fx-background-color: #ffffff;
+ -fx-background-color: #FAFAFA;
}
#feedback-text {
diff --git a/src/main/java/io/bitsquare/gui/components/ValidatingTextField.java b/src/main/java/io/bitsquare/gui/components/ValidatingTextField.java
index 5347850a0b..7d0046e08a 100644
--- a/src/main/java/io/bitsquare/gui/components/ValidatingTextField.java
+++ b/src/main/java/io/bitsquare/gui/components/ValidatingTextField.java
@@ -107,9 +107,12 @@ public class ValidatingTextField extends TextField
private void validate(String input)
{
- NumberValidator.ValidationResult validationResult = numberValidator.validate(input);
- valid.set(validationResult.isValid);
- applyErrorMessage(validationResult);
+ if (input != null)
+ {
+ NumberValidator.ValidationResult validationResult = numberValidator.validate(input);
+ valid.set(validationResult.isValid);
+ applyErrorMessage(validationResult);
+ }
}
private void applyErrorMessage(NumberValidator.ValidationResult validationResult)
diff --git a/src/main/java/io/bitsquare/gui/components/btc/AddressTextField.java b/src/main/java/io/bitsquare/gui/components/btc/AddressTextField.java
index cf4143cdb9..238f997837 100644
--- a/src/main/java/io/bitsquare/gui/components/btc/AddressTextField.java
+++ b/src/main/java/io/bitsquare/gui/components/btc/AddressTextField.java
@@ -22,6 +22,7 @@ public class AddressTextField extends AnchorPane
public AddressTextField()
{
addressTextField = new TextField();
+ addressTextField.setFocusTraversable(false);
addressTextField.setEditable(false);
copyIcon = new Label();
diff --git a/src/main/java/io/bitsquare/gui/components/btc/BalanceTextField.java b/src/main/java/io/bitsquare/gui/components/btc/BalanceTextField.java
index e8c58a5643..f9a88c437d 100644
--- a/src/main/java/io/bitsquare/gui/components/btc/BalanceTextField.java
+++ b/src/main/java/io/bitsquare/gui/components/btc/BalanceTextField.java
@@ -33,9 +33,11 @@ public class BalanceTextField extends AnchorPane
public BalanceTextField()
{
balanceTextField = new TextField();
+ balanceTextField.setFocusTraversable(false);
balanceTextField.setEditable(false);
progressIndicator = new ConfidenceProgressIndicator();
+ progressIndicator.setFocusTraversable(false);
progressIndicator.setPrefSize(24, 24);
progressIndicator.setId("funds-confidence");
progressIndicator.setLayoutY(1);
diff --git a/src/main/java/io/bitsquare/gui/market/createOffer/CreateOfferController.java b/src/main/java/io/bitsquare/gui/market/createOffer/CreateOfferController.java
index 2f6ba67e7f..eec077eec5 100644
--- a/src/main/java/io/bitsquare/gui/market/createOffer/CreateOfferController.java
+++ b/src/main/java/io/bitsquare/gui/market/createOffer/CreateOfferController.java
@@ -27,7 +27,6 @@ import io.bitsquare.user.User;
import java.net.URL;
import java.util.Random;
import java.util.ResourceBundle;
-import javafx.beans.binding.DoubleBinding;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleStringProperty;
@@ -44,9 +43,6 @@ import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static javafx.beans.binding.Bindings.createDoubleBinding;
-import static javafx.beans.binding.Bindings.createStringBinding;
-
/**
* Represents the visible state of the view
*/
@@ -158,7 +154,7 @@ public class CreateOfferController implements Initializable, ChildController, Hi
//TODO just for dev testing
if (BitSquare.fillFormsWithDummyData)
{
- amountTextField.setText("1");
+ amountTextField.setText("1.0");
minAmountTextField.setText("0.1");
priceTextField.setText("" + (int) (499 - new Random().nextDouble() * 1000 / 100));
}
@@ -166,21 +162,40 @@ public class CreateOfferController implements Initializable, ChildController, Hi
private void setupBindings()
{
- // setup bindings
- DoubleBinding amountBinding = createDoubleBinding(() -> BitSquareFormatter.parseToDouble(viewModel.amount.get()), viewModel.amount);
- DoubleBinding priceBinding = createDoubleBinding(() -> BitSquareFormatter.parseToDouble(viewModel.price.get()), viewModel.price);
+ viewModel.amount.addListener((ov, oldValue, newValue) -> {
+ double amount = BitSquareFormatter.parseToDouble(newValue);
+ double price = BitSquareFormatter.parseToDouble(viewModel.price.get());
+ double volume = amount * price;
+ viewModel.volume.set(BitSquareFormatter.formatVolume(volume));
+ viewModel.totals.set(BitSquareFormatter.formatTotalsAsBtc(viewModel.amount.get(), collateral, FeePolicy.CREATE_OFFER_FEE.add(FeePolicy.TX_FEE)));
+ viewModel.collateral.set(BitSquareFormatter.formatCollateralAsBtc(viewModel.amount.get(), collateral));
+ });
- viewModel.volume.bind(createStringBinding(() -> BitSquareFormatter.formatVolume(amountBinding.get() * priceBinding.get()), amountBinding, priceBinding));
- viewModel.collateral.bind(createStringBinding(() -> BitSquareFormatter.formatCollateralAsBtc(viewModel.amount.get(), collateral), amountBinding));
- viewModel.totals.bind(createStringBinding(() -> BitSquareFormatter.formatTotalsAsBtc(viewModel.amount.get(), collateral, FeePolicy.CREATE_OFFER_FEE.add(FeePolicy.TX_FEE)), amountBinding, priceBinding));
+ viewModel.price.addListener((ov, oldValue, newValue) -> {
+ double price = BitSquareFormatter.parseToDouble(newValue);
+ double amount = BitSquareFormatter.parseToDouble(viewModel.amount.get());
+ double volume = amount * price;
+ viewModel.volume.set(BitSquareFormatter.formatVolume(volume));
+ });
+
+ viewModel.volume.addListener((ov, oldValue, newValue) -> {
+ double volume = BitSquareFormatter.parseToDouble(newValue);
+ double price = BitSquareFormatter.parseToDouble(viewModel.price.get());
+ if (price != 0)
+ {
+ double amount = volume / price;
+ viewModel.amount.set(BitSquareFormatter.formatVolume(amount));
+ viewModel.totals.set(BitSquareFormatter.formatTotalsAsBtc(viewModel.amount.get(), collateral, FeePolicy.CREATE_OFFER_FEE.add(FeePolicy.TX_FEE)));
+ viewModel.collateral.set(BitSquareFormatter.formatCollateralAsBtc(viewModel.amount.get(), collateral));
+ }
+ });
- // apply bindings to controls
buyLabel.textProperty().bind(viewModel.directionLabel);
amountTextField.textProperty().bindBidirectional(viewModel.amount);
priceTextField.textProperty().bindBidirectional(viewModel.price);
- minAmountTextField.textProperty().bindBidirectional(viewModel.minAmount);
+ volumeTextField.textProperty().bindBidirectional(viewModel.volume);
- volumeTextField.textProperty().bind(viewModel.volume);
+ minAmountTextField.textProperty().bindBidirectional(viewModel.minAmount);
collateralLabel.textProperty().bind(viewModel.collateralLabel);
collateralTextField.textProperty().bind(viewModel.collateral);
totalsTextField.textProperty().bind(viewModel.totals);
@@ -207,8 +222,14 @@ public class CreateOfferController implements Initializable, ChildController, Hi
BtcValidator amountValidator = new BtcValidator();
amountTextField.setNumberValidator(amountValidator);
amountTextField.setErrorPopupLayoutReference((Region) amountTextField.getParent());
+
priceTextField.setNumberValidator(new FiatValidator());
priceTextField.setErrorPopupLayoutReference((Region) amountTextField.getParent());
+
+ BtcValidator volumeValidator = new BtcValidator();
+ volumeTextField.setNumberValidator(volumeValidator);
+ volumeTextField.setErrorPopupLayoutReference((Region) volumeTextField.getParent());
+
BtcValidator minAmountValidator = new BtcValidator();
minAmountTextField.setNumberValidator(minAmountValidator);
@@ -219,6 +240,21 @@ public class CreateOfferController implements Initializable, ChildController, Hi
amountValidator,
minAmountValidator);
+ amountTextField.focusedProperty().addListener((ov, oldValue, newValue) -> {
+ // only on focus out and ignore focus loss from window
+ if (!newValue && amountTextField.getScene().getWindow().isFocused())
+ volumeTextField.reValidate();
+ });
+ volumeTextField.focusedProperty().addListener((ov, oldValue, newValue) -> {
+ // only on focus out and ignore focus loss from window
+ if (!newValue && volumeTextField.getScene().getWindow().isFocused())
+ amountTextField.reValidate();
+ });
+ priceTextField.focusedProperty().addListener((ov, oldValue, newValue) -> {
+ // only on focus out and ignore focus loss from window
+ if (!newValue && priceTextField.getScene().getWindow().isFocused())
+ volumeTextField.reValidate();
+ });
}
diff --git a/src/main/java/io/bitsquare/gui/market/createOffer/CreateOfferView.fxml b/src/main/java/io/bitsquare/gui/market/createOffer/CreateOfferView.fxml
index 08e522ef84..76f9b9bd04 100644
--- a/src/main/java/io/bitsquare/gui/market/createOffer/CreateOfferView.fxml
+++ b/src/main/java/io/bitsquare/gui/market/createOffer/CreateOfferView.fxml
@@ -21,7 +21,7 @@
-
+
@@ -29,19 +29,19 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
@@ -79,7 +79,7 @@
-
+
diff --git a/src/main/java/io/bitsquare/gui/market/trade/TakeOfferView.fxml b/src/main/java/io/bitsquare/gui/market/trade/TakeOfferView.fxml
index 21753333e7..99ff415557 100644
--- a/src/main/java/io/bitsquare/gui/market/trade/TakeOfferView.fxml
+++ b/src/main/java/io/bitsquare/gui/market/trade/TakeOfferView.fxml
@@ -22,38 +22,38 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -94,7 +94,7 @@
-
+
@@ -126,21 +126,21 @@
-
+
-
+
-
+
-
+
-
+
diff --git a/src/main/java/io/bitsquare/gui/orders/pending/PendingTradeView.fxml b/src/main/java/io/bitsquare/gui/orders/pending/PendingTradeView.fxml
index ade525b580..0e272a9c0e 100644
--- a/src/main/java/io/bitsquare/gui/orders/pending/PendingTradeView.fxml
+++ b/src/main/java/io/bitsquare/gui/orders/pending/PendingTradeView.fxml
@@ -56,7 +56,7 @@
-
+