diff --git a/gui/src/main/java/io/bitsquare/gui/components/InputTextField.java b/gui/src/main/java/io/bitsquare/gui/components/InputTextField.java index ea1757fd13..6ad0fa54c8 100644 --- a/gui/src/main/java/io/bitsquare/gui/components/InputTextField.java +++ b/gui/src/main/java/io/bitsquare/gui/components/InputTextField.java @@ -110,6 +110,11 @@ public class InputTextField extends TextField { // Public methods /////////////////////////////////////////////////////////////////////////////////////////// + public void resetValidation() { + setEffect(null); + hideErrorMessageDisplay(); + } + /////////////////////////////////////////////////////////////////////////////////////////// // Setters diff --git a/gui/src/main/java/io/bitsquare/gui/main/offer/offerbook/OfferBookDataModel.java b/gui/src/main/java/io/bitsquare/gui/main/offer/offerbook/OfferBookDataModel.java index 8a1bf6ef5d..5d32270887 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/offer/offerbook/OfferBookDataModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/offer/offerbook/OfferBookDataModel.java @@ -97,24 +97,17 @@ class OfferBookDataModel implements Activatable, DataModel { @Override public void activate() { - addBindings(); - addListeners(); - - // reset filter values amountAsCoin.set(null); priceAsFiat.set(null); volumeAsFiat.set(null); -/* - //TODO temp for testing - amountAsCoin.set(Coin.COIN); - priceAsFiat.set(Fiat.valueOf("EUR", 300*10000)); - // volumeAsFiat.set(Fiat.valueOf("EUR", 300));*/ + addBindings(); + addListeners(); setBankAccount(user.currentFiatAccountProperty().get()); - applyFilter(); offerBook.startPolling(); + applyFilter(); } @Override diff --git a/gui/src/main/java/io/bitsquare/gui/main/offer/offerbook/OfferBookView.java b/gui/src/main/java/io/bitsquare/gui/main/offer/offerbook/OfferBookView.java index e7800e08d7..a5362b013b 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/offer/offerbook/OfferBookView.java +++ b/gui/src/main/java/io/bitsquare/gui/main/offer/offerbook/OfferBookView.java @@ -82,6 +82,13 @@ public class OfferBookView extends ActivatableViewAndModel amountTextFieldListener; + private ChangeListener priceTextFieldListener; + private ChangeListener volumeTextFieldListener; + private ChangeListener amountTextFieldFocusedListener; + private ChangeListener priceTextFieldFocusedListener; + private ChangeListener volumeTextFieldFocusedListener; + /////////////////////////////////////////////////////////////////////////////////////////// // Constructor, lifecycle @@ -126,10 +133,22 @@ public class OfferBookView extends ActivatableViewAndModel model.amount.set(newValue); + priceTextFieldListener = (observable, oldValue, newValue) -> model.price.set(newValue); + volumeTextFieldListener = (observable, oldValue, newValue) -> model.volume.set(newValue); + + amountTextFieldFocusedListener = (ov, oldValue, newValue) -> { + if (newValue) { + amountTextField.textProperty().unbind(); + amountTextField.textProperty().addListener(amountTextFieldListener); + } + else { + amountTextField.textProperty().removeListener(amountTextFieldListener); + amountTextField.textProperty().bind(model.amount); + } + }; + priceTextFieldFocusedListener = (ov, oldValue, newValue) -> { + if (newValue) { + priceTextField.textProperty().unbind(); + priceTextField.textProperty().addListener(priceTextFieldListener); + } + else { + priceTextField.textProperty().removeListener(priceTextFieldListener); + priceTextField.textProperty().bind(model.price); + } + }; + volumeTextFieldFocusedListener = (ov, oldValue, newValue) -> { + if (newValue) { + volumeTextField.textProperty().unbind(); + volumeTextField.textProperty().addListener(volumeTextFieldListener); + } + else { + volumeTextField.textProperty().removeListener(volumeTextFieldListener); + volumeTextField.textProperty().bind(model.volume); + } + }; + } + + private void addListeners() { + amountTextField.focusedProperty().addListener(amountTextFieldFocusedListener); + priceTextField.focusedProperty().addListener(priceTextFieldFocusedListener); + volumeTextField.focusedProperty().addListener(volumeTextFieldFocusedListener); + } + + private void removeListeners() { + amountTextField.focusedProperty().removeListener(amountTextFieldFocusedListener); + priceTextField.focusedProperty().removeListener(priceTextFieldFocusedListener); + volumeTextField.focusedProperty().removeListener(volumeTextFieldFocusedListener); + + amountTextField.textProperty().removeListener(amountTextFieldListener); + priceTextField.textProperty().removeListener(priceTextFieldListener); + volumeTextField.textProperty().removeListener(volumeTextFieldListener); } private void addBindings() { - amountTextField.textProperty().bindBidirectional(model.amount); - priceTextField.textProperty().bindBidirectional(model.price); - volumeTextField.textProperty().bindBidirectional(model.volume); + // those bindings are unbinded by focus change handlers + amountTextField.textProperty().bind(model.amount); + priceTextField.textProperty().bind(model.price); + volumeTextField.textProperty().bind(model.volume); + amountBtcLabel.textProperty().bind(model.btcCode); priceFiatLabel.textProperty().bind(model.fiatCode); volumeFiatLabel.textProperty().bind(model.fiatCode); diff --git a/gui/src/main/java/io/bitsquare/gui/main/offer/offerbook/OfferBookViewModel.java b/gui/src/main/java/io/bitsquare/gui/main/offer/offerbook/OfferBookViewModel.java index 2ec4047ff6..4754afd2c8 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/offer/offerbook/OfferBookViewModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/offer/offerbook/OfferBookViewModel.java @@ -82,6 +82,10 @@ class OfferBookViewModel extends ActivatableWithDataModel im @Override protected void doActivate() { + amount.set(""); + price.set(""); + volume.set(""); + addBindings(); addListeners(); }