mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-04-18 14:55:53 -04:00
Refactor ViewLoader
This commit is contained in:
parent
d120dcad06
commit
318bfc5fb0
@ -40,6 +40,8 @@ import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
import viewfx.view.View;
|
||||
|
||||
import javafx.application.Application;
|
||||
import javafx.scene.*;
|
||||
import javafx.scene.image.*;
|
||||
@ -94,9 +96,9 @@ public class BitsquareApp extends Application {
|
||||
// load the main view and create the main scene
|
||||
|
||||
ViewLoader viewLoader = injector.getInstance(ViewLoader.class);
|
||||
ViewLoader.Item loaded = viewLoader.load(Navigation.Item.MAIN.getFxmlUrl(), false);
|
||||
View view = viewLoader.load(Navigation.Item.MAIN.getFxmlUrl(), false);
|
||||
|
||||
Scene scene = new Scene((Parent) loaded.view, 1000, 600);
|
||||
Scene scene = new Scene((Parent) view.getRoot(), 1000, 600);
|
||||
scene.getStylesheets().setAll(
|
||||
"/io/bitsquare/gui/bitsquare.css",
|
||||
"/io/bitsquare/gui/images.css");
|
||||
|
@ -17,11 +17,8 @@
|
||||
|
||||
package io.bitsquare.gui;
|
||||
|
||||
import io.bitsquare.BitsquareException;
|
||||
import io.bitsquare.locale.BSResources;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import java.net.URL;
|
||||
|
||||
import java.util.HashMap;
|
||||
@ -29,10 +26,10 @@ import java.util.Map;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import viewfx.view.View;
|
||||
|
||||
import javafx.fxml.FXMLLoader;
|
||||
import javafx.fxml.Initializable;
|
||||
import javafx.fxml.JavaFXBuilderFactory;
|
||||
import javafx.scene.*;
|
||||
import javafx.util.BuilderFactory;
|
||||
|
||||
/**
|
||||
@ -41,7 +38,7 @@ import javafx.util.BuilderFactory;
|
||||
*/
|
||||
public class ViewLoader {
|
||||
|
||||
private final Map<URL, Item> cache = new HashMap<>();
|
||||
private final Map<URL, View> cache = new HashMap<>();
|
||||
private final BuilderFactory builderFactory = new JavaFXBuilderFactory();
|
||||
private final GuiceControllerFactory controllerFactory;
|
||||
|
||||
@ -50,35 +47,18 @@ public class ViewLoader {
|
||||
this.controllerFactory = controllerFactory;
|
||||
}
|
||||
|
||||
public Item load(URL url) {
|
||||
public View load(URL url) {
|
||||
return load(url, true);
|
||||
}
|
||||
|
||||
public Item load(URL url, boolean useCaching) {
|
||||
Item item;
|
||||
|
||||
if (useCaching && cache.containsKey(url)) {
|
||||
public View load(URL url, boolean useCaching) {
|
||||
if (useCaching && cache.containsKey(url))
|
||||
return cache.get(url);
|
||||
}
|
||||
|
||||
FXMLLoader loader = new FXMLLoader(url, BSResources.getResourceBundle(), builderFactory, controllerFactory);
|
||||
try {
|
||||
item = new Item(loader.load(), loader.getController());
|
||||
cache.put(url, item);
|
||||
return item;
|
||||
} catch (IOException e) {
|
||||
throw new BitsquareException(e, "Failed to load view at %s", url);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Item {
|
||||
public final Node view;
|
||||
public final Initializable controller;
|
||||
|
||||
Item(Node view, Initializable controller) {
|
||||
this.view = view;
|
||||
this.controller = controller;
|
||||
}
|
||||
View view = loader.getController();
|
||||
cache.put(url, view);
|
||||
return view;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -29,6 +29,7 @@ import io.bitsquare.gui.util.Transitions;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import viewfx.view.View;
|
||||
import viewfx.view.support.ActivatableView;
|
||||
|
||||
import javafx.application.Platform;
|
||||
@ -125,8 +126,8 @@ public class MainView extends ActivatableView<StackPane, MainViewModel> {
|
||||
if (navItems == null || navItems.length != 2 || navItems[0] != Navigation.Item.MAIN)
|
||||
return;
|
||||
|
||||
ViewLoader.Item loaded = viewLoader.load(navItems[1].getFxmlUrl());
|
||||
contentContainer.getChildren().setAll(loaded.view);
|
||||
View view = viewLoader.load(navItems[1].getFxmlUrl());
|
||||
contentContainer.getChildren().setAll(view.getRoot());
|
||||
|
||||
navButtons.getToggles().stream()
|
||||
.filter(toggle -> toggle instanceof ToggleButton)
|
||||
|
@ -22,6 +22,7 @@ import io.bitsquare.gui.ViewLoader;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import viewfx.view.View;
|
||||
import viewfx.view.support.ActivatableView;
|
||||
|
||||
import javafx.beans.value.ChangeListener;
|
||||
@ -95,7 +96,7 @@ public class AccountView extends ActivatableView<TabPane, AccountViewModel> {
|
||||
|
||||
|
||||
private void loadView(Navigation.Item navigationItem) {
|
||||
ViewLoader.Item loaded = viewLoader.load(navigationItem.getFxmlUrl());
|
||||
View view = viewLoader.load(navigationItem.getFxmlUrl());
|
||||
final Tab tab;
|
||||
switch (navigationItem) {
|
||||
case ACCOUNT_SETTINGS:
|
||||
@ -118,7 +119,7 @@ public class AccountView extends ActivatableView<TabPane, AccountViewModel> {
|
||||
// for IRC demo we deactivate the arbitratorSettingsTab
|
||||
arbitratorSettingsTab.setDisable(true);
|
||||
|
||||
tab.setContent(loaded.view);
|
||||
tab.setContent(view.getRoot());
|
||||
root.getSelectionModel().select(tab);
|
||||
}
|
||||
}
|
||||
|
@ -23,6 +23,7 @@ import io.bitsquare.gui.main.account.arbitrator.registration.ArbitratorRegistrat
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import viewfx.view.View;
|
||||
import viewfx.view.support.AbstractView;
|
||||
|
||||
import javafx.fxml.FXML;
|
||||
@ -47,8 +48,8 @@ class ArbitratorSettingsView extends AbstractView {
|
||||
}
|
||||
|
||||
private void loadView(Navigation.Item navigationItem) {
|
||||
ViewLoader.Item loaded = viewLoader.load(navigationItem.getFxmlUrl(), false);
|
||||
arbitratorRegistrationView = (ArbitratorRegistrationView) loaded.controller;
|
||||
View view = viewLoader.load(navigationItem.getFxmlUrl(), false);
|
||||
arbitratorRegistrationView = (ArbitratorRegistrationView) view;
|
||||
|
||||
final Stage stage = new Stage();
|
||||
stage.setTitle("Arbitrator");
|
||||
@ -60,7 +61,7 @@ class ArbitratorSettingsView extends AbstractView {
|
||||
stage.setY(primaryStage.getY() + 50);
|
||||
stage.initModality(Modality.WINDOW_MODAL);
|
||||
stage.initOwner(primaryStage);
|
||||
Scene scene = new Scene((Parent) loaded.view, 800, 600);
|
||||
Scene scene = new Scene((Parent) view.getRoot(), 800, 600);
|
||||
stage.setScene(scene);
|
||||
stage.show();
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import viewfx.view.View;
|
||||
import viewfx.view.support.ActivatableView;
|
||||
|
||||
import javafx.fxml.FXML;
|
||||
@ -91,9 +92,9 @@ class ArbitratorBrowserView extends ActivatableView<Pane, Void> implements Arbit
|
||||
|
||||
|
||||
private void loadView(Navigation.Item navigationItem) {
|
||||
ViewLoader.Item loaded = viewLoader.load(navigationItem.getFxmlUrl());
|
||||
root.getChildren().set(0, loaded.view);
|
||||
arbitratorProfileView = (ArbitratorProfileView) loaded.controller;
|
||||
View view = viewLoader.load(navigationItem.getFxmlUrl());
|
||||
root.getChildren().set(0, view.getRoot());
|
||||
arbitratorProfileView = (ArbitratorProfileView) view;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -146,7 +146,7 @@ public class RestrictionsView extends ActivatableViewAndModel<GridPane, Restrict
|
||||
}
|
||||
|
||||
private void loadView(Navigation.Item navigationItem) {
|
||||
ViewLoader.Item loaded = viewLoader.load(navigationItem.getFxmlUrl(), false);
|
||||
View view = viewLoader.load(navigationItem.getFxmlUrl(), false);
|
||||
|
||||
final Stage stage = new Stage();
|
||||
stage.setTitle("Arbitrator selection");
|
||||
@ -158,7 +158,7 @@ public class RestrictionsView extends ActivatableViewAndModel<GridPane, Restrict
|
||||
stage.setY(primaryStage.getY() + 50);
|
||||
stage.initModality(Modality.WINDOW_MODAL);
|
||||
stage.initOwner(primaryStage);
|
||||
Scene scene = new Scene((Parent) loaded.view, 800, 600);
|
||||
Scene scene = new Scene((Parent) view.getRoot(), 800, 600);
|
||||
stage.setScene(scene);
|
||||
stage.setOnHidden(windowEvent -> {
|
||||
if (navigationItem == Navigation.Item.ARBITRATOR_BROWSER)
|
||||
|
@ -109,11 +109,10 @@ class AccountSettingsView extends ActivatableViewAndModel {
|
||||
}
|
||||
|
||||
private void loadView(Navigation.Item navigationItem) {
|
||||
ViewLoader.Item loaded = viewLoader.load(navigationItem.getFxmlUrl());
|
||||
content.getChildren().setAll(loaded.view);
|
||||
View child = (View) loaded.controller;
|
||||
if (child instanceof Wizard.Step)
|
||||
((Wizard.Step) child).hideWizardNavigation();
|
||||
View view = viewLoader.load(navigationItem.getFxmlUrl());
|
||||
content.getChildren().setAll(view.getRoot());
|
||||
if (view instanceof Wizard.Step)
|
||||
((Wizard.Step) view).hideWizardNavigation();
|
||||
}
|
||||
|
||||
private void selectMainMenuButton(Navigation.Item item) {
|
||||
|
@ -153,11 +153,10 @@ class AccountSetupWizard extends ActivatableView implements Wizard {
|
||||
}
|
||||
|
||||
protected void loadView(Navigation.Item navigationItem) {
|
||||
ViewLoader.Item loaded = viewLoader.load(navigationItem.getFxmlUrl());
|
||||
content.getChildren().setAll(loaded.view);
|
||||
View child = (View) loaded.controller;
|
||||
if (child instanceof Wizard.Step)
|
||||
((Step) child).setParent(this);
|
||||
View view = viewLoader.load(navigationItem.getFxmlUrl());
|
||||
content.getChildren().setAll(view.getRoot());
|
||||
if (view instanceof Wizard.Step)
|
||||
((Step) view).setParent(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,7 @@ import io.bitsquare.gui.ViewLoader;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import viewfx.model.Activatable;
|
||||
import viewfx.view.View;
|
||||
import viewfx.view.support.ActivatableViewAndModel;
|
||||
|
||||
import javafx.beans.value.ChangeListener;
|
||||
@ -84,7 +85,7 @@ class FundsView extends ActivatableViewAndModel<TabPane, Activatable> {
|
||||
if (currentTab != null)
|
||||
currentTab.setContent(null);
|
||||
|
||||
ViewLoader.Item loaded = viewLoader.load(navigationItem.getFxmlUrl());
|
||||
View view = viewLoader.load(navigationItem.getFxmlUrl());
|
||||
switch (navigationItem) {
|
||||
case WITHDRAWAL:
|
||||
currentTab = withdrawalTab;
|
||||
@ -93,7 +94,7 @@ class FundsView extends ActivatableViewAndModel<TabPane, Activatable> {
|
||||
currentTab = transactionsTab;
|
||||
break;
|
||||
}
|
||||
currentTab.setContent(loaded.view);
|
||||
currentTab.setContent(view.getRoot());
|
||||
root.getSelectionModel().select(currentTab);
|
||||
}
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ import io.bitsquare.trade.TradeManager;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import viewfx.model.Activatable;
|
||||
import viewfx.view.View;
|
||||
import viewfx.view.support.ActivatableViewAndModel;
|
||||
|
||||
import javafx.beans.value.ChangeListener;
|
||||
@ -92,7 +93,7 @@ class PortfolioView extends ActivatableViewAndModel<TabPane, Activatable> {
|
||||
if (currentTab != null)
|
||||
currentTab.setContent(null);
|
||||
|
||||
ViewLoader.Item loaded = viewLoader.load(navigationItem.getFxmlUrl());
|
||||
View view = viewLoader.load(navigationItem.getFxmlUrl());
|
||||
switch (navigationItem) {
|
||||
case OFFERS:
|
||||
currentTab = offersTab;
|
||||
@ -104,7 +105,7 @@ class PortfolioView extends ActivatableViewAndModel<TabPane, Activatable> {
|
||||
currentTab = closedTradesTab;
|
||||
break;
|
||||
}
|
||||
currentTab.setContent(loaded.view);
|
||||
currentTab.setContent(view.getRoot());
|
||||
root.getSelectionModel().select(currentTab);
|
||||
}
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ import io.bitsquare.settings.Preferences;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import viewfx.model.Activatable;
|
||||
import viewfx.view.View;
|
||||
import viewfx.view.support.ActivatableViewAndModel;
|
||||
|
||||
import javafx.beans.value.ChangeListener;
|
||||
@ -88,7 +89,7 @@ class SettingsView extends ActivatableViewAndModel<TabPane, Activatable> {
|
||||
}
|
||||
|
||||
private void loadView(Navigation.Item navigationItem) {
|
||||
ViewLoader.Item loaded = viewLoader.load(navigationItem.getFxmlUrl());
|
||||
View view = viewLoader.load(navigationItem.getFxmlUrl());
|
||||
final Tab tab;
|
||||
switch (navigationItem) {
|
||||
case PREFERENCES:
|
||||
@ -100,7 +101,7 @@ class SettingsView extends ActivatableViewAndModel<TabPane, Activatable> {
|
||||
default:
|
||||
throw new IllegalArgumentException("navigation item of type " + navigationItem + " is not allowed");
|
||||
}
|
||||
tab.setContent(loaded.view);
|
||||
tab.setContent(view.getRoot());
|
||||
root.getSelectionModel().select(tab);
|
||||
}
|
||||
}
|
||||
|
@ -122,12 +122,12 @@ public class TradeView extends ActivatableView<TabPane, Void> {
|
||||
TabPane tabPane = root;
|
||||
if (navigationItem == Navigation.Item.OFFER_BOOK && offerBookView == null) {
|
||||
// Offerbook must not be cached by ViewLoader as we use 2 instances for sell and buy screens.
|
||||
ViewLoader.Item loaded = viewLoader.load(navigationItem.getFxmlUrl(), false);
|
||||
View view = viewLoader.load(navigationItem.getFxmlUrl(), false);
|
||||
final Tab tab = new Tab(direction == Direction.BUY ? "Buy Bitcoin" : "Sell Bitcoin");
|
||||
tab.setClosable(false);
|
||||
tab.setContent(loaded.view);
|
||||
tab.setContent(view.getRoot());
|
||||
tabPane.getTabs().add(tab);
|
||||
offerBookView = (OfferBookView) loaded.controller;
|
||||
offerBookView = (OfferBookView) view;
|
||||
offerBookView.setParent(this);
|
||||
|
||||
offerBookView.setDirection(direction);
|
||||
@ -137,10 +137,10 @@ public class TradeView extends ActivatableView<TabPane, Void> {
|
||||
else if (navigationItem == Navigation.Item.CREATE_OFFER && createOfferView == null) {
|
||||
// CreateOffer and TakeOffer must not be cached by ViewLoader as we cannot use a view multiple times
|
||||
// in different graphs
|
||||
ViewLoader.Item loaded = viewLoader.load(navigationItem.getFxmlUrl(), false);
|
||||
createOfferRoot = loaded.view;
|
||||
createOfferView = (CreateOfferView) loaded.controller;
|
||||
View view = viewLoader.load(navigationItem.getFxmlUrl(), false);
|
||||
createOfferView = (CreateOfferView) view;
|
||||
createOfferView.initWithData(direction, amount, price);
|
||||
createOfferRoot = view.getRoot();
|
||||
final Tab tab = new Tab("Create offer");
|
||||
createOfferView.configCloseHandlers(tab.closableProperty());
|
||||
tab.setContent(createOfferRoot);
|
||||
@ -152,10 +152,10 @@ public class TradeView extends ActivatableView<TabPane, Void> {
|
||||
offer != null) {
|
||||
// CreateOffer and TakeOffer must not be cached by ViewLoader as we cannot use a view multiple times
|
||||
// in different graphs
|
||||
ViewLoader.Item loaded = viewLoader.load(Navigation.Item.TAKE_OFFER.getFxmlUrl(), false);
|
||||
takeOfferRoot = loaded.view;
|
||||
takeOfferView = (TakeOfferView) loaded.controller;
|
||||
View view = viewLoader.load(Navigation.Item.TAKE_OFFER.getFxmlUrl(), false);
|
||||
takeOfferView = (TakeOfferView) view;
|
||||
takeOfferView.initWithData(direction, amount, offer);
|
||||
takeOfferRoot = view.getRoot();
|
||||
final Tab tab = new Tab("Take offer");
|
||||
takeOfferView.configCloseHandlers(tab.closableProperty());
|
||||
tab.setContent(takeOfferRoot);
|
||||
|
@ -17,5 +17,8 @@
|
||||
|
||||
package viewfx.view;
|
||||
|
||||
import javafx.scene.*;
|
||||
|
||||
public interface View {
|
||||
Node getRoot();
|
||||
}
|
||||
|
@ -39,4 +39,8 @@ public abstract class AbstractView<R extends Node, M> implements View {
|
||||
public AbstractView() {
|
||||
this(null);
|
||||
}
|
||||
|
||||
public R getRoot() {
|
||||
return root;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user