diff --git a/src/main/java/io/bitsquare/gui/ViewController.java b/src/main/java/io/bitsquare/gui/ViewController.java index 1ecac09ab8..abe6f07838 100644 --- a/src/main/java/io/bitsquare/gui/ViewController.java +++ b/src/main/java/io/bitsquare/gui/ViewController.java @@ -77,7 +77,7 @@ public abstract class ViewController implements Initializable { * @param parentController Controller who has created this.getClass().getSimpleName() instance (via * navigateToView/FXMLLoader). */ - public void setParentController(ViewController parentController) { + public void setParentController(Initializable parentController) { log.trace("Lifecycle: setParentController " + this.getClass().getSimpleName() + " / parent = " + parentController); this.parentController = parentController; diff --git a/src/main/java/io/bitsquare/gui/main/arbitrators/browser/ArbitratorBrowserController.java b/src/main/java/io/bitsquare/gui/main/arbitrators/browser/ArbitratorBrowserController.java index 7bbde97e15..5543f0c915 100644 --- a/src/main/java/io/bitsquare/gui/main/arbitrators/browser/ArbitratorBrowserController.java +++ b/src/main/java/io/bitsquare/gui/main/arbitrators/browser/ArbitratorBrowserController.java @@ -20,7 +20,6 @@ package io.bitsquare.gui.main.arbitrators.browser; import io.bitsquare.arbitrator.Arbitrator; import io.bitsquare.gui.CachedViewController; import io.bitsquare.gui.NavigationItem; -import io.bitsquare.gui.ViewController; import io.bitsquare.gui.main.arbitrators.profile.ArbitratorProfileController; import io.bitsquare.locale.LanguageUtil; import io.bitsquare.msg.MessageFacade; @@ -117,7 +116,7 @@ public class ArbitratorBrowserController extends CachedViewController implements /////////////////////////////////////////////////////////////////////////////////////////// @Override - public void setParentController(ViewController parentController) { + public void setParentController(Initializable parentController) { super.setParentController(parentController); } diff --git a/src/main/java/io/bitsquare/gui/main/arbitrators/profile/ArbitratorProfileController.java b/src/main/java/io/bitsquare/gui/main/arbitrators/profile/ArbitratorProfileController.java index 403da21583..cb88c8fcea 100644 --- a/src/main/java/io/bitsquare/gui/main/arbitrators/profile/ArbitratorProfileController.java +++ b/src/main/java/io/bitsquare/gui/main/arbitrators/profile/ArbitratorProfileController.java @@ -20,7 +20,6 @@ package io.bitsquare.gui.main.arbitrators.profile; import io.bitsquare.arbitrator.Arbitrator; import io.bitsquare.gui.CachedViewController; import io.bitsquare.gui.NavigationItem; -import io.bitsquare.gui.ViewController; import io.bitsquare.gui.util.BSFormatter; import io.bitsquare.persistence.Persistence; import io.bitsquare.settings.Settings; @@ -95,7 +94,7 @@ public class ArbitratorProfileController extends CachedViewController { /////////////////////////////////////////////////////////////////////////////////////////// @Override - public void setParentController(ViewController parentController) { + public void setParentController(Initializable parentController) { super.setParentController(parentController); } diff --git a/src/main/java/io/bitsquare/gui/main/arbitrators/registration/ArbitratorRegistrationController.java b/src/main/java/io/bitsquare/gui/main/arbitrators/registration/ArbitratorRegistrationController.java index 079c80809a..a1323493d1 100644 --- a/src/main/java/io/bitsquare/gui/main/arbitrators/registration/ArbitratorRegistrationController.java +++ b/src/main/java/io/bitsquare/gui/main/arbitrators/registration/ArbitratorRegistrationController.java @@ -22,7 +22,6 @@ import io.bitsquare.arbitrator.Reputation; import io.bitsquare.btc.WalletFacade; import io.bitsquare.gui.CachedViewController; import io.bitsquare.gui.NavigationItem; -import io.bitsquare.gui.ViewController; import io.bitsquare.gui.components.ConfidenceDisplay; import io.bitsquare.gui.components.confidence.ConfidenceProgressIndicator; import io.bitsquare.gui.main.arbitrators.profile.ArbitratorProfileController; @@ -220,7 +219,7 @@ public class ArbitratorRegistrationController extends CachedViewController { /////////////////////////////////////////////////////////////////////////////////////////// @Override - public void setParentController(ViewController parentController) { + public void setParentController(Initializable parentController) { super.setParentController(parentController); } diff --git a/src/main/java/io/bitsquare/gui/main/trade/BuyView.fxml b/src/main/java/io/bitsquare/gui/main/trade/BuyView.fxml index 5f95619822..21f0ac1778 100644 --- a/src/main/java/io/bitsquare/gui/main/trade/BuyView.fxml +++ b/src/main/java/io/bitsquare/gui/main/trade/BuyView.fxml @@ -19,7 +19,7 @@ - diff --git a/src/main/java/io/bitsquare/gui/main/trade/BuyController.java b/src/main/java/io/bitsquare/gui/main/trade/BuyViewCB.java similarity index 77% rename from src/main/java/io/bitsquare/gui/main/trade/BuyController.java rename to src/main/java/io/bitsquare/gui/main/trade/BuyViewCB.java index 3c07746a4c..0aed8e74e6 100644 --- a/src/main/java/io/bitsquare/gui/main/trade/BuyController.java +++ b/src/main/java/io/bitsquare/gui/main/trade/BuyViewCB.java @@ -21,17 +21,16 @@ import io.bitsquare.trade.Direction; import javax.inject.Inject; -public class BuyController extends TradeController { +public class BuyViewCB extends TradeViewCB { @Inject - public BuyController(TradePM presentationModel) { + public BuyViewCB(TradePM presentationModel) { super(presentationModel); } @Override - protected void applyDirection() { - //tabPane.getSelectionModel().select(0); - orderBookController.applyDirection(Direction.BUY); + protected void initOrderBook() { + orderBookViewCB.initOrderBook(Direction.BUY); } } diff --git a/src/main/java/io/bitsquare/gui/main/trade/SellView.fxml b/src/main/java/io/bitsquare/gui/main/trade/SellView.fxml index 61b2a99035..1fda938055 100644 --- a/src/main/java/io/bitsquare/gui/main/trade/SellView.fxml +++ b/src/main/java/io/bitsquare/gui/main/trade/SellView.fxml @@ -19,7 +19,7 @@ - diff --git a/src/main/java/io/bitsquare/gui/main/trade/SellController.java b/src/main/java/io/bitsquare/gui/main/trade/SellViewCB.java similarity index 81% rename from src/main/java/io/bitsquare/gui/main/trade/SellController.java rename to src/main/java/io/bitsquare/gui/main/trade/SellViewCB.java index 0f1e50a6af..6a0423f60a 100644 --- a/src/main/java/io/bitsquare/gui/main/trade/SellController.java +++ b/src/main/java/io/bitsquare/gui/main/trade/SellViewCB.java @@ -21,16 +21,16 @@ import io.bitsquare.trade.Direction; import javax.inject.Inject; -public class SellController extends TradeController { +public class SellViewCB extends TradeViewCB { @Inject - public SellController(TradePM presentationModel) { + public SellViewCB(TradePM presentationModel) { super(presentationModel); } @Override - protected void applyDirection() { - orderBookController.applyDirection(Direction.SELL); + protected void initOrderBook() { + orderBookViewCB.initOrderBook(Direction.SELL); } diff --git a/src/main/java/io/bitsquare/gui/main/trade/TradeController.java b/src/main/java/io/bitsquare/gui/main/trade/TradeViewCB.java similarity index 71% rename from src/main/java/io/bitsquare/gui/main/trade/TradeController.java rename to src/main/java/io/bitsquare/gui/main/trade/TradeViewCB.java index 802e80810d..08c33bc8d2 100644 --- a/src/main/java/io/bitsquare/gui/main/trade/TradeController.java +++ b/src/main/java/io/bitsquare/gui/main/trade/TradeViewCB.java @@ -21,9 +21,8 @@ import io.bitsquare.gui.CachedViewCB; import io.bitsquare.gui.NavigationItem; import io.bitsquare.gui.components.InputTextField; import io.bitsquare.gui.main.trade.createoffer.CreateOfferViewCB; -import io.bitsquare.gui.main.trade.orderbook.OrderBookController; +import io.bitsquare.gui.main.trade.orderbook.OrderBookViewCB; import io.bitsquare.gui.main.trade.takeoffer.TakeOfferController; -import io.bitsquare.trade.Direction; import io.bitsquare.util.BSFXMLLoader; import java.io.IOException; @@ -33,6 +32,7 @@ import java.net.URL; import java.util.List; import java.util.ResourceBundle; +import javafx.application.Platform; import javafx.collections.ListChangeListener; import javafx.fxml.Initializable; import javafx.scene.*; @@ -43,13 +43,12 @@ import org.slf4j.LoggerFactory; import static com.google.common.base.Preconditions.checkArgument; -public class TradeController extends CachedViewCB { - private static final Logger log = LoggerFactory.getLogger(TradeController.class); +public abstract class TradeViewCB extends CachedViewCB { + private static final Logger log = LoggerFactory.getLogger(TradeViewCB.class); - protected OrderBookController orderBookController; - protected CreateOfferViewCB createOfferCodeBehind; + protected OrderBookViewCB orderBookViewCB; + protected CreateOfferViewCB createOfferViewCB; protected TakeOfferController takeOfferController; - protected BSFXMLLoader orderBookLoader; private Node createOfferView; @@ -57,7 +56,7 @@ public class TradeController extends CachedViewCB { // Constructor /////////////////////////////////////////////////////////////////////////////////////////// - protected TradeController(TradePM presentationModel) { + protected TradeViewCB(TradePM presentationModel) { super(presentationModel); } @@ -72,33 +71,29 @@ public class TradeController extends CachedViewCB { super.initialize(url, rb); loadView(NavigationItem.ORDER_BOOK); + initOrderBook(); } @Override public void activate() { super.activate(); - applyDirection(); - - // TODO find better solution - // Textfield focus out triggers validation, use runLater as quick fix... - - //TODO update to new verison - ((TabPane) root).getSelectionModel().selectedIndexProperty().addListener((observableValue, oldValue, - newValue) -> - { - InputTextField.hideErrorMessageDisplay(); - } - ); + // We need to remove open validation error popups + // TODO Find a way to do that in the InputTextField directly, but a tab change does not trigger any event there + // Platform.runLater needed as focusout evetn is called after selectedIndexProperty changed + TabPane tabPane = (TabPane) root; + tabPane.getSelectionModel().selectedIndexProperty() + .addListener((observableValue, oldValue, newValue) -> + Platform.runLater(InputTextField::hideErrorMessageDisplay)); // We want to get informed when a tab get closed - ((TabPane) root).getTabs().addListener((ListChangeListener) change -> { + tabPane.getTabs().addListener((ListChangeListener) change -> { change.next(); List removedTabs = change.getRemoved(); if (removedTabs.size() == 1 && removedTabs.get(0).getContent().equals(createOfferView)) { - if (createOfferCodeBehind != null) { - createOfferCodeBehind.terminate(); - createOfferCodeBehind = null; + if (createOfferViewCB != null) { + createOfferViewCB.terminate(); + createOfferViewCB = null; } } }); @@ -127,47 +122,46 @@ public class TradeController extends CachedViewCB { TabPane tabPane = (TabPane) root; if (navigationItem == NavigationItem.ORDER_BOOK) { - checkArgument(orderBookLoader == null); + checkArgument(orderBookViewCB == null); // Orderbook must not be cached by GuiceFXMLLoader as we use 2 instances for sell and buy screens. - orderBookLoader = - new BSFXMLLoader(getClass().getResource(NavigationItem.ORDER_BOOK.getFxmlUrl()), false); + BSFXMLLoader orderBookLoader = + new BSFXMLLoader(getClass().getResource(navigationItem.getFxmlUrl()), false); try { final Parent view = orderBookLoader.load(); final Tab tab = new Tab("Orderbook"); tab.setClosable(false); tab.setContent(view); tabPane.getTabs().add(tab); + orderBookViewCB = orderBookLoader.getController(); + orderBookViewCB.setParent(this); + return orderBookViewCB; } catch (IOException e) { log.error(e.getMessage()); } - orderBookController = orderBookLoader.getController(); - orderBookController.setParent(this); - return orderBookController; } else if (navigationItem == NavigationItem.CREATE_OFFER) { - checkArgument(createOfferCodeBehind == null); + checkArgument(createOfferViewCB == null); // CreateOffer and TakeOffer must not be cached by GuiceFXMLLoader as we cannot use a view multiple times // in different graphs BSFXMLLoader loader = new BSFXMLLoader(getClass().getResource(navigationItem.getFxmlUrl()), false); try { createOfferView = loader.load(); - createOfferCodeBehind = loader.getController(); - createOfferCodeBehind.setParent(this); - createOfferCodeBehind.setOnClose(() -> { - orderBookController.onCreateOfferViewRemoved(); + createOfferViewCB = loader.getController(); + createOfferViewCB.setParent(this); + createOfferViewCB.setOnClose(() -> { + orderBookViewCB.enableCreateOfferButton(); return null; }); final Tab tab = new Tab("Create offer"); tab.setContent(createOfferView); tabPane.getTabs().add(tab); - tabPane.getSelectionModel().select(tabPane.getTabs().size() - 1); - return createOfferCodeBehind; + tabPane.getSelectionModel().select(tab); + return createOfferViewCB; } catch (IOException e) { log.error(e.getMessage()); } - return null; } else if (navigationItem == NavigationItem.TAKE_OFFER) { checkArgument(takeOfferController == null); @@ -178,22 +172,20 @@ public class TradeController extends CachedViewCB { try { final Parent view = loader.load(); takeOfferController = loader.getController(); - //TODO - //takeOfferController.setParentController(this); + takeOfferController.setParentController(this); final Tab tab = new Tab("Take offer"); tab.setContent(view); tabPane.getTabs().add(tab); - tabPane.getSelectionModel().select(tabPane.getTabs().size() - 1); + tabPane.getSelectionModel().select(tab); return takeOfferController; } catch (IOException e) { log.error(e.getMessage()); } - return null; } else { log.error("navigationItem not supported: " + navigationItem); - return null; } + return null; } @@ -202,7 +194,8 @@ public class TradeController extends CachedViewCB { /////////////////////////////////////////////////////////////////////////////////////////// public void onCreateOfferViewRemoved() { - orderBookController.onCreateOfferViewRemoved(); + createOfferViewCB = null; + orderBookViewCB.enableCreateOfferButton(); } public void onTakeOfferViewRemoved() { @@ -211,13 +204,10 @@ public class TradeController extends CachedViewCB { /////////////////////////////////////////////////////////////////////////////////////////// - // Protected + // Abstract methods /////////////////////////////////////////////////////////////////////////////////////////// - // Template method to be overwritten by sub class. - protected void applyDirection() { - orderBookController.applyDirection(Direction.SELL); - } + abstract protected void initOrderBook(); } diff --git a/src/main/java/io/bitsquare/gui/main/trade/orderbook/OrderBookView.fxml b/src/main/java/io/bitsquare/gui/main/trade/orderbook/OrderBookView.fxml index d55df7770a..b3ad24c499 100644 --- a/src/main/java/io/bitsquare/gui/main/trade/orderbook/OrderBookView.fxml +++ b/src/main/java/io/bitsquare/gui/main/trade/orderbook/OrderBookView.fxml @@ -21,7 +21,7 @@ - diff --git a/src/main/java/io/bitsquare/gui/main/trade/orderbook/OrderBookController.java b/src/main/java/io/bitsquare/gui/main/trade/orderbook/OrderBookViewCB.java similarity index 97% rename from src/main/java/io/bitsquare/gui/main/trade/orderbook/OrderBookController.java rename to src/main/java/io/bitsquare/gui/main/trade/orderbook/OrderBookViewCB.java index a585345005..d8b5ff47af 100644 --- a/src/main/java/io/bitsquare/gui/main/trade/orderbook/OrderBookController.java +++ b/src/main/java/io/bitsquare/gui/main/trade/orderbook/OrderBookViewCB.java @@ -82,8 +82,8 @@ import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class OrderBookController extends CachedViewCB { - private static final Logger log = LoggerFactory.getLogger(OrderBookController.class); +public class OrderBookViewCB extends CachedViewCB { + private static final Logger log = LoggerFactory.getLogger(OrderBookViewCB.class); private NavigationController navigationController; private OverlayController overlayController; @@ -114,12 +114,12 @@ public class OrderBookController extends CachedViewCB { /////////////////////////////////////////////////////////////////////////////////////////// @Inject - private OrderBookController(OrderBookPM presentationModel, - NavigationController navigationController, - OverlayController overlayController, - OrderBook orderBook, User user, - MessageFacade messageFacade, - WalletFacade walletFacade, Settings settings, Persistence persistence) { + private OrderBookViewCB(OrderBookPM presentationModel, + NavigationController navigationController, + OverlayController overlayController, + OrderBook orderBook, User user, + MessageFacade messageFacade, + WalletFacade walletFacade, Settings settings, Persistence persistence) { super(presentationModel); this.navigationController = navigationController; @@ -226,7 +226,7 @@ public class OrderBookController extends CachedViewCB { // Public methods /////////////////////////////////////////////////////////////////////////////////////////// - public void applyDirection(Direction direction) { + public void initOrderBook(Direction direction) { init(); orderBookTable.getSelectionModel().clearSelection(); price.setText(""); @@ -542,7 +542,7 @@ public class OrderBookController extends CachedViewCB { volume.setText(BSFormatter.formatFiat(Fiat.valueOf("EUR", (long) (a * p)))); } - public void onCreateOfferViewRemoved() { + public void enableCreateOfferButton() { createOfferButton.setDisable(false); } diff --git a/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferController.java b/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferController.java index e2c36a7d4f..fc4067f487 100644 --- a/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferController.java +++ b/src/main/java/io/bitsquare/gui/main/trade/takeoffer/TakeOfferController.java @@ -23,7 +23,7 @@ import io.bitsquare.btc.WalletFacade; import io.bitsquare.gui.CachedViewController; import io.bitsquare.gui.components.Popups; import io.bitsquare.gui.components.ValidatedTextField; -import io.bitsquare.gui.main.trade.TradeController; +import io.bitsquare.gui.main.trade.TradeViewCB; import io.bitsquare.gui.util.BSFormatter; import io.bitsquare.gui.util.BitSquareValidator; import io.bitsquare.trade.Offer; @@ -95,7 +95,7 @@ public class TakeOfferController extends CachedViewController { @Override public void deactivate() { super.deactivate(); - ((TradeController) parentController).onTakeOfferViewRemoved(); + ((TradeViewCB) parentController).onTakeOfferViewRemoved(); } @Override