mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-03-15 10:26:37 -04:00
Refactor trade UIs to new pattern, more changes
This commit is contained in:
parent
81129b8203
commit
f20fe3a22b
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
|
||||
<?import javafx.scene.control.*?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
<TabPane fx:id="root" fx:controller="io.bitsquare.gui.main.trade.BuyController"
|
||||
<TabPane fx:id="root" fx:controller="io.bitsquare.gui.main.trade.BuyViewCB"
|
||||
AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"
|
||||
AnchorPane.topAnchor="0.0"
|
||||
xmlns:fx="http://javafx.com/fxml"/>
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,7 @@
|
||||
|
||||
<?import javafx.scene.control.*?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
<TabPane fx:id="root" fx:controller="io.bitsquare.gui.main.trade.SellController"
|
||||
<TabPane fx:id="root" fx:controller="io.bitsquare.gui.main.trade.SellViewCB"
|
||||
AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"
|
||||
AnchorPane.topAnchor="0.0"
|
||||
xmlns:fx="http://javafx.com/fxml"/>
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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<TradePM> {
|
||||
private static final Logger log = LoggerFactory.getLogger(TradeController.class);
|
||||
public abstract class TradeViewCB extends CachedViewCB<TradePM> {
|
||||
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<TradePM> {
|
||||
// Constructor
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
protected TradeController(TradePM presentationModel) {
|
||||
protected TradeViewCB(TradePM presentationModel) {
|
||||
super(presentationModel);
|
||||
}
|
||||
|
||||
@ -72,33 +71,29 @@ public class TradeController extends CachedViewCB<TradePM> {
|
||||
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<Tab>) change -> {
|
||||
tabPane.getTabs().addListener((ListChangeListener<Tab>) change -> {
|
||||
change.next();
|
||||
List<? extends Tab> 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<TradePM> {
|
||||
|
||||
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<TradePM> {
|
||||
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<TradePM> {
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public void onCreateOfferViewRemoved() {
|
||||
orderBookController.onCreateOfferViewRemoved();
|
||||
createOfferViewCB = null;
|
||||
orderBookViewCB.enableCreateOfferButton();
|
||||
}
|
||||
|
||||
public void onTakeOfferViewRemoved() {
|
||||
@ -211,13 +204,10 @@ public class TradeController extends CachedViewCB<TradePM> {
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Protected
|
||||
// Abstract methods
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Template method to be overwritten by sub class.
|
||||
protected void applyDirection() {
|
||||
orderBookController.applyDirection(Direction.SELL);
|
||||
}
|
||||
abstract protected void initOrderBook();
|
||||
|
||||
|
||||
}
|
@ -21,7 +21,7 @@
|
||||
<?import javafx.scene.control.*?>
|
||||
<?import javafx.scene.control.cell.*?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
<AnchorPane fx:id="root" fx:controller="io.bitsquare.gui.main.trade.orderbook.OrderBookController"
|
||||
<AnchorPane fx:id="root" fx:controller="io.bitsquare.gui.main.trade.orderbook.OrderBookViewCB"
|
||||
AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"
|
||||
AnchorPane.topAnchor="0.0"
|
||||
xmlns:fx="http://javafx.com/fxml">
|
||||
|
@ -82,8 +82,8 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class OrderBookController extends CachedViewCB<OrderBookPM> {
|
||||
private static final Logger log = LoggerFactory.getLogger(OrderBookController.class);
|
||||
public class OrderBookViewCB extends CachedViewCB<OrderBookPM> {
|
||||
private static final Logger log = LoggerFactory.getLogger(OrderBookViewCB.class);
|
||||
|
||||
private NavigationController navigationController;
|
||||
private OverlayController overlayController;
|
||||
@ -114,12 +114,12 @@ public class OrderBookController extends CachedViewCB<OrderBookPM> {
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@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<OrderBookPM> {
|
||||
// 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<OrderBookPM> {
|
||||
volume.setText(BSFormatter.formatFiat(Fiat.valueOf("EUR", (long) (a * p))));
|
||||
}
|
||||
|
||||
public void onCreateOfferViewRemoved() {
|
||||
public void enableCreateOfferButton() {
|
||||
createOfferButton.setDisable(false);
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user