Remove parent field from base View, introduce Wizard

- Replace MultiStepNavigation and ContextAware with Wizard and Wizard.Step
 - Introduce ChildOf interface
 - Eliminate TradeNavigator in favor of depending directly on TradeView
This commit is contained in:
Chris Beams 2014-11-23 04:17:45 +01:00
parent 4ae9868ee5
commit d4eb252973
No known key found for this signature in database
GPG Key ID: 3D214F8F5BC5ED73
23 changed files with 111 additions and 176 deletions

View File

@ -15,8 +15,8 @@
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/
package io.bitsquare.gui.main.account.content;
package io.bitsquare.gui;
public interface ContextAware {
void useSettingsContext(boolean useSettingsContext);
public interface ChildOf<Parent> {
void setParent(Parent parent);
}

View File

@ -18,7 +18,6 @@
package io.bitsquare.gui;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.*;
import org.slf4j.Logger;
@ -31,9 +30,6 @@ public class View<M> {
protected final M model;
protected @FXML Parent root;
protected Initializable parent;
public View(M model) {
this.model = model;
}
@ -42,10 +38,6 @@ public class View<M> {
this(null);
}
public void setParent(Initializable parent) {
this.parent = parent;
}
protected View loadView(Navigation.Item navigationItem) {
throw new UnsupportedOperationException("loadView not implemented");
}

View File

@ -15,10 +15,12 @@
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/
package io.bitsquare.gui.main.account;
package io.bitsquare.gui;
import io.bitsquare.gui.View;
public interface Wizard {
void nextStep(View current);
public interface MultiStepNavigation {
void nextStep(View useSettingsContext);
public interface Step extends ChildOf<Wizard> {
void useSettingsContext(boolean useSettingsContext);
}
}

View File

@ -22,7 +22,6 @@ import io.bitsquare.bank.BankAccount;
import io.bitsquare.gui.ActivatableView;
import io.bitsquare.gui.Navigation;
import io.bitsquare.gui.OverlayManager;
import io.bitsquare.gui.View;
import io.bitsquare.gui.ViewLoader;
import io.bitsquare.gui.components.Popups;
import io.bitsquare.gui.components.SystemNotification;
@ -127,8 +126,6 @@ public class MainView extends ActivatableView<MainViewModel> {
ViewLoader.Item loaded = viewLoader.load(navItems[1].getFxmlUrl());
contentContainer.getChildren().setAll(loaded.view);
if (loaded.controller instanceof View)
((View) loaded.controller).setParent(this);
navButtons.getToggles().stream()
.filter(toggle -> toggle instanceof ToggleButton)

View File

@ -140,10 +140,7 @@ public class AccountView extends ActivatableViewAndModel {
tab.setContent(loaded.view);
((TabPane) root).getSelectionModel().select(tab);
View childController = (View) loaded.controller;
childController.setParent(this);
return childController;
return (View) loaded.controller;
}

View File

@ -112,10 +112,7 @@ public class ArbitratorBrowserView extends ActivatableView implements Arbitrator
protected View loadView(Navigation.Item navigationItem) {
ViewLoader.Item loaded = viewLoader.load(navigationItem.getFxmlUrl());
((Pane) root).getChildren().set(0, loaded.view);
View childController = arbitratorProfileViewCB = (ArbitratorProfileView) loaded.controller;
childController.setParent(this);
return childController;
return arbitratorProfileViewCB = (ArbitratorProfileView) loaded.controller;
}
///////////////////////////////////////////////////////////////////////////////////////////

View File

@ -18,8 +18,7 @@
package io.bitsquare.gui.main.account.content.changepassword;
import io.bitsquare.gui.InitializableView;
import io.bitsquare.gui.main.account.MultiStepNavigation;
import io.bitsquare.gui.main.account.content.ContextAware;
import io.bitsquare.gui.Wizard;
import io.bitsquare.gui.main.help.Help;
import io.bitsquare.gui.main.help.HelpId;
@ -32,7 +31,7 @@ import javafx.scene.layout.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ChangePasswordView extends InitializableView<ChangePasswordViewModel> implements ContextAware {
public class ChangePasswordView extends InitializableView<ChangePasswordViewModel> implements Wizard.Step {
private static final Logger log = LoggerFactory.getLogger(ChangePasswordView.class);
@ -40,6 +39,8 @@ public class ChangePasswordView extends InitializableView<ChangePasswordViewMode
@FXML Button saveButton, skipButton;
@FXML PasswordField oldPasswordField, passwordField, repeatedPasswordField;
private Wizard parent;
///////////////////////////////////////////////////////////////////////////////////////////
// Constructor
@ -63,9 +64,10 @@ public class ChangePasswordView extends InitializableView<ChangePasswordViewMode
saveButton.disableProperty().bind(model.saveButtonDisabled);
}
///////////////////////////////////////////////////////////////////////////////////////////
// ContextAware implementation
///////////////////////////////////////////////////////////////////////////////////////////
@Override
public void setParent(Wizard parent) {
this.parent = parent;
}
@Override
public void useSettingsContext(boolean useSettingsContext) {
@ -80,14 +82,10 @@ public class ChangePasswordView extends InitializableView<ChangePasswordViewMode
@FXML
private void onSaved() {
boolean result = model.requestSavePassword();
if (result) {
if (parent instanceof MultiStepNavigation)
((MultiStepNavigation) parent).nextStep(this);
}
else {
if (model.requestSavePassword())
parent.nextStep(this);
else
log.debug(model.getErrorMessage()); // TODO use validating TF
}
}
@FXML
@ -97,8 +95,7 @@ public class ChangePasswordView extends InitializableView<ChangePasswordViewMode
@FXML
private void onSkipped() {
if (parent instanceof MultiStepNavigation)
((MultiStepNavigation) parent).nextStep(this);
parent.nextStep(this);
}
}

View File

@ -23,8 +23,7 @@ import io.bitsquare.gui.ActivatableViewAndModel;
import io.bitsquare.gui.OverlayManager;
import io.bitsquare.gui.components.InputTextField;
import io.bitsquare.gui.components.Popups;
import io.bitsquare.gui.main.account.MultiStepNavigation;
import io.bitsquare.gui.main.account.content.ContextAware;
import io.bitsquare.gui.Wizard;
import io.bitsquare.gui.main.help.Help;
import io.bitsquare.gui.main.help.HelpId;
import io.bitsquare.gui.util.validation.InputValidator;
@ -53,7 +52,7 @@ import org.slf4j.LoggerFactory;
import static javafx.beans.binding.Bindings.createBooleanBinding;
public class FiatAccountView extends ActivatableViewAndModel<FiatAccountViewModel> implements ContextAware {
public class FiatAccountView extends ActivatableViewAndModel<FiatAccountViewModel> implements Wizard.Step {
private static final Logger log = LoggerFactory.getLogger(FiatAccountView.class);
@ -65,8 +64,11 @@ public class FiatAccountView extends ActivatableViewAndModel<FiatAccountViewMode
@FXML ComboBox<BankAccount> selectionComboBox;
@FXML ComboBox<BankAccountType> typesComboBox;
@FXML ComboBox<Currency> currencyComboBox;
private final OverlayManager overlayManager;
private Wizard parent;
///////////////////////////////////////////////////////////////////////////////////////////
// Constructor
@ -109,9 +111,12 @@ public class FiatAccountView extends ActivatableViewAndModel<FiatAccountViewMode
selectionComboBox.setItems(model.getAllBankAccounts());
}
///////////////////////////////////////////////////////////////////////////////////////////
// ContextAware implementation
///////////////////////////////////////////////////////////////////////////////////////////
@Override
public void setParent(Wizard parent) {
this.parent = parent;
}
@Override
public void useSettingsContext(boolean useSettingsContext) {
@ -167,8 +172,7 @@ public class FiatAccountView extends ActivatableViewAndModel<FiatAccountViewMode
@FXML
void onCompleted() {
if (parent instanceof MultiStepNavigation)
((MultiStepNavigation) parent).nextStep(this);
parent.nextStep(this);
}
@FXML

View File

@ -21,11 +21,9 @@ import io.bitsquare.bank.BankAccountType;
import io.bitsquare.gui.ActivatableViewAndModel;
import io.bitsquare.gui.components.InputTextField;
import io.bitsquare.gui.components.Popups;
import io.bitsquare.gui.main.account.MultiStepNavigation;
import io.bitsquare.gui.main.account.content.ContextAware;
import io.bitsquare.gui.Wizard;
import io.bitsquare.gui.main.help.Help;
import io.bitsquare.gui.main.help.HelpId;
import io.bitsquare.gui.util.validation.InputValidator;
import io.bitsquare.util.Utilities;
import java.util.Currency;
@ -44,7 +42,7 @@ import org.slf4j.LoggerFactory;
/*
Just temporary for giving the user a possibility to test the app via simulating the bank transfer in a IRC chat.
*/
public class IrcAccountView extends ActivatableViewAndModel<IrcAccountViewModel> implements ContextAware {
public class IrcAccountView extends ActivatableViewAndModel<IrcAccountViewModel> implements Wizard.Step {
private static final Logger log = LoggerFactory.getLogger(IrcAccountView.class);
@ -54,6 +52,8 @@ public class IrcAccountView extends ActivatableViewAndModel<IrcAccountViewModel>
@FXML ComboBox<BankAccountType> typesComboBox;
@FXML ComboBox<Currency> currencyComboBox;
private Wizard parent;
///////////////////////////////////////////////////////////////////////////////////////////
// Constructor
@ -144,9 +144,10 @@ public class IrcAccountView extends ActivatableViewAndModel<IrcAccountViewModel>
}
///////////////////////////////////////////////////////////////////////////////////////////
// ContextAware implementation
///////////////////////////////////////////////////////////////////////////////////////////
@Override
public void setParent(Wizard parent) {
this.parent = parent;
}
@Override
public void useSettingsContext(boolean useSettingsContext) {
@ -170,9 +171,8 @@ public class IrcAccountView extends ActivatableViewAndModel<IrcAccountViewModel>
@FXML
void onSave() {
InputValidator.ValidationResult result = model.requestSaveBankAccount();
if (result.isValid && parent instanceof MultiStepNavigation)
((MultiStepNavigation) parent).nextStep(this);
if (model.requestSaveBankAccount().isValid)
parent.nextStep(this);
}
@FXML

View File

@ -18,8 +18,7 @@
package io.bitsquare.gui.main.account.content.password;
import io.bitsquare.gui.InitializableView;
import io.bitsquare.gui.main.account.MultiStepNavigation;
import io.bitsquare.gui.main.account.content.ContextAware;
import io.bitsquare.gui.Wizard;
import io.bitsquare.gui.main.help.Help;
import io.bitsquare.gui.main.help.HelpId;
@ -32,7 +31,7 @@ import javafx.scene.layout.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class PasswordView extends InitializableView<PasswordViewModel> implements ContextAware {
public class PasswordView extends InitializableView<PasswordViewModel> implements Wizard.Step {
private static final Logger log = LoggerFactory.getLogger(PasswordView.class);
@ -40,6 +39,8 @@ public class PasswordView extends InitializableView<PasswordViewModel> implement
@FXML Button saveButton, skipButton;
@FXML PasswordField oldPasswordField, passwordField, repeatedPasswordField;
private Wizard parent;
///////////////////////////////////////////////////////////////////////////////////////////
// Constructor
@ -68,6 +69,11 @@ public class PasswordView extends InitializableView<PasswordViewModel> implement
// ContextAware implementation
///////////////////////////////////////////////////////////////////////////////////////////
@Override
public void setParent(Wizard parent) {
this.parent = parent;
}
@Override
public void useSettingsContext(boolean useSettingsContext) {
if (useSettingsContext)
@ -81,21 +87,16 @@ public class PasswordView extends InitializableView<PasswordViewModel> implement
@FXML
private void onSaved() {
boolean result = model.requestSavePassword();
if (result) {
if (parent instanceof MultiStepNavigation)
((MultiStepNavigation) parent).nextStep(this);
}
else {
if (model.requestSavePassword())
parent.nextStep(this);
else
// TODO use validating passwordTF
log.debug(model.getErrorMessage());
}
}
@FXML
private void onSkipped() {
if (parent instanceof MultiStepNavigation)
((MultiStepNavigation) parent).nextStep(this);
parent.nextStep(this);
}
@FXML

View File

@ -22,8 +22,7 @@ import io.bitsquare.gui.OverlayManager;
import io.bitsquare.gui.components.AddressTextField;
import io.bitsquare.gui.components.BalanceTextField;
import io.bitsquare.gui.components.Popups;
import io.bitsquare.gui.main.account.MultiStepNavigation;
import io.bitsquare.gui.main.account.content.ContextAware;
import io.bitsquare.gui.Wizard;
import io.bitsquare.gui.main.help.Help;
import io.bitsquare.gui.main.help.HelpId;
import io.bitsquare.locale.BSResources;
@ -45,7 +44,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RegistrationView extends InitializableView<RegistrationViewModel> implements ContextAware {
public class RegistrationView extends InitializableView<RegistrationViewModel> implements Wizard.Step {
private static final Logger log = LoggerFactory.getLogger(RegistrationView.class);
@ -58,6 +57,8 @@ public class RegistrationView extends InitializableView<RegistrationViewModel> i
@FXML Label paymentSpinnerInfoLabel;
@FXML ProgressIndicator paymentSpinner;
private Wizard parent;
///////////////////////////////////////////////////////////////////////////////////////////
// Constructor
@ -121,8 +122,8 @@ public class RegistrationView extends InitializableView<RegistrationViewModel> i
public void handle(ActionEvent actionEvent) {
getProperties().put("type", "CLOSE");
try {
if (parent instanceof MultiStepNavigation)
((MultiStepNavigation) parent).nextStep(RegistrationView.this);
if (parent instanceof Wizard)
((Wizard) parent).nextStep(RegistrationView.this);
} catch (Exception e) {
e.printStackTrace();
}
@ -140,15 +141,13 @@ public class RegistrationView extends InitializableView<RegistrationViewModel> i
}
///////////////////////////////////////////////////////////////////////////////////////////
// ContextAware implementation
///////////////////////////////////////////////////////////////////////////////////////////
@Override
public void setParent(Wizard parent) {
this.parent = parent;
}
@Override
public void useSettingsContext(boolean useSettingsContext) {
if (useSettingsContext) {
// TODO not impl. yet
}
}

View File

@ -22,8 +22,7 @@ import io.bitsquare.gui.ActivatableViewAndModel;
import io.bitsquare.gui.Navigation;
import io.bitsquare.gui.View;
import io.bitsquare.gui.ViewLoader;
import io.bitsquare.gui.main.account.MultiStepNavigation;
import io.bitsquare.gui.main.account.content.ContextAware;
import io.bitsquare.gui.Wizard;
import io.bitsquare.gui.main.help.Help;
import io.bitsquare.gui.main.help.HelpId;
import io.bitsquare.gui.util.ImageUtil;
@ -35,7 +34,6 @@ import java.util.Locale;
import javax.inject.Inject;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.image.*;
@ -48,7 +46,7 @@ import javafx.util.StringConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RestrictionsView extends ActivatableViewAndModel<RestrictionsViewModel> implements ContextAware {
public class RestrictionsView extends ActivatableViewAndModel<RestrictionsViewModel> implements Wizard.Step {
private static final Logger log = LoggerFactory.getLogger(RestrictionsView.class);
@ -63,6 +61,8 @@ public class RestrictionsView extends ActivatableViewAndModel<RestrictionsViewMo
private final ViewLoader viewLoader;
private final Stage primaryStage;
private Wizard parent;
///////////////////////////////////////////////////////////////////////////////////////////
// Constructor
@ -97,9 +97,10 @@ public class RestrictionsView extends ActivatableViewAndModel<RestrictionsViewMo
}
///////////////////////////////////////////////////////////////////////////////////////////
// ContextAware implementation
///////////////////////////////////////////////////////////////////////////////////////////
@Override
public void setParent(Wizard parent) {
this.parent = parent;
}
@Override
public void useSettingsContext(boolean useSettingsContext) {
@ -146,8 +147,8 @@ public class RestrictionsView extends ActivatableViewAndModel<RestrictionsViewMo
@FXML
private void onCompleted() {
if (parent instanceof MultiStepNavigation)
((MultiStepNavigation) parent).nextStep(this);
if (parent instanceof Wizard)
((Wizard) parent).nextStep(this);
}
@FXML

View File

@ -18,8 +18,7 @@
package io.bitsquare.gui.main.account.content.seedwords;
import io.bitsquare.gui.InitializableView;
import io.bitsquare.gui.main.account.MultiStepNavigation;
import io.bitsquare.gui.main.account.content.ContextAware;
import io.bitsquare.gui.Wizard;
import io.bitsquare.gui.main.help.Help;
import io.bitsquare.gui.main.help.HelpId;
@ -32,10 +31,12 @@ import javafx.scene.layout.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SeedWordsView extends InitializableView<SeedWordsViewModel> implements ContextAware {
public class SeedWordsView extends InitializableView<SeedWordsViewModel> implements Wizard.Step {
private static final Logger log = LoggerFactory.getLogger(SeedWordsView.class);
private Wizard parent;
@FXML Button completedButton;
@FXML TextArea seedWordsTextArea;
@ -59,10 +60,10 @@ public class SeedWordsView extends InitializableView<SeedWordsViewModel> impleme
seedWordsTextArea.setText(model.seedWords.get());
}
///////////////////////////////////////////////////////////////////////////////////////////
// ContextAware implementation
///////////////////////////////////////////////////////////////////////////////////////////
@Override
public void setParent(Wizard parent) {
this.parent = parent;
}
@Override
public void useSettingsContext(boolean useSettingsContext) {
@ -77,8 +78,7 @@ public class SeedWordsView extends InitializableView<SeedWordsViewModel> impleme
@FXML
private void onCompleted() {
if (parent instanceof MultiStepNavigation)
((MultiStepNavigation) parent).nextStep(this);
parent.nextStep(this);
}
@FXML

View File

@ -21,7 +21,6 @@ import io.bitsquare.gui.ActivatableViewAndModel;
import io.bitsquare.gui.Navigation;
import io.bitsquare.gui.View;
import io.bitsquare.gui.ViewLoader;
import io.bitsquare.gui.main.account.content.ContextAware;
import io.bitsquare.gui.util.Colors;
import javax.inject.Inject;
@ -132,9 +131,6 @@ public class AccountSettingsView extends ActivatableViewAndModel {
ViewLoader.Item loaded = viewLoader.load(navigationItem.getFxmlUrl());
content.getChildren().setAll(loaded.view);
View child = (View) loaded.controller;
child.setParent(this);
if (child instanceof ContextAware)
((ContextAware) child).useSettingsContext(true);
return child;
}

View File

@ -21,8 +21,7 @@ import io.bitsquare.gui.ActivatableView;
import io.bitsquare.gui.Navigation;
import io.bitsquare.gui.View;
import io.bitsquare.gui.ViewLoader;
import io.bitsquare.gui.main.account.MultiStepNavigation;
import io.bitsquare.gui.main.account.content.ContextAware;
import io.bitsquare.gui.Wizard;
import io.bitsquare.gui.main.account.content.irc.IrcAccountView;
import io.bitsquare.gui.main.account.content.password.PasswordView;
import io.bitsquare.gui.main.account.content.registration.RegistrationView;
@ -43,7 +42,7 @@ import org.slf4j.LoggerFactory;
/**
* This UI is not cached as it is normally only needed once.
*/
public class AccountSetupView extends ActivatableView implements MultiStepNavigation {
public class AccountSetupView extends ActivatableView implements Wizard {
private static final Logger log = LoggerFactory.getLogger(AccountSetupView.class);
@ -185,9 +184,10 @@ public class AccountSetupView extends ActivatableView implements MultiStepNaviga
ViewLoader.Item loaded = viewLoader.load(navigationItem.getFxmlUrl());
content.getChildren().setAll(loaded.view);
View child = (View) loaded.controller;
child.setParent(this);
if (child instanceof ContextAware)
((ContextAware) child).useSettingsContext(false);
if (child instanceof Wizard.Step) {
((Step) child).setParent(this);
((Step) child).useSettingsContext(false);
}
return child;
}
}

View File

@ -110,10 +110,7 @@ public class FundsView extends ActivatableViewAndModel {
}
currentTab.setContent(loaded.view);
((TabPane) root).getSelectionModel().select(currentTab);
View childController = (View) loaded.controller;
childController.setParent(this);
return childController;
return (View) loaded.controller;
}
}

View File

@ -19,9 +19,6 @@ package io.bitsquare.gui.main.home;
import io.bitsquare.gui.View;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// home is just hosting the arbiters buttons yet, but that's just for dev, not clear yet what will be in home,
// probably overview, event history, news, charts,... -> low prio
public class HomeView extends View {

View File

@ -17,13 +17,10 @@
package io.bitsquare.gui.main.msg;
import io.bitsquare.gui.Navigation;
import io.bitsquare.gui.View;
import javax.inject.Inject;
import javafx.fxml.Initializable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

View File

@ -121,10 +121,7 @@ public class PortfolioView extends ActivatableViewAndModel {
}
currentTab.setContent(loaded.view);
((TabPane) root).getSelectionModel().select(currentTab);
View childController = (View) loaded.controller;
childController.setParent(this);
return childController;
return (View) loaded.controller;
}
}

View File

@ -117,10 +117,7 @@ public class SettingsView extends ActivatableViewAndModel {
}
tab.setContent(loaded.view);
((TabPane) root).getSelectionModel().select(tab);
View childController = (View) loaded.controller;
childController.setParent(this);
return childController;
return (View) loaded.controller;
}
}

View File

@ -1,29 +0,0 @@
/*
* This file is part of Bitsquare.
*
* Bitsquare is free software: you can redistribute it and/or modify it
* under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at
* your option) any later version.
*
* Bitsquare is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
* License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/
package io.bitsquare.gui.main.trade;
import io.bitsquare.offer.Offer;
import org.bitcoinj.core.Coin;
import org.bitcoinj.utils.Fiat;
public interface TradeNavigator {
void createOffer(Coin amount, Fiat price);
void takeOffer(Coin amount, Fiat price, Offer offer);
}

View File

@ -41,7 +41,7 @@ import javafx.scene.control.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TradeView extends ActivatableView implements TradeNavigator {
public class TradeView extends ActivatableView {
private static final Logger log = LoggerFactory.getLogger(TradeView.class);
private OfferBookView offerBookViewCB;
@ -118,25 +118,17 @@ public class TradeView extends ActivatableView implements TradeNavigator {
}
///////////////////////////////////////////////////////////////////////////////////////////
// TradeNavigator implementation
///////////////////////////////////////////////////////////////////////////////////////////
@Override
public void createOffer(Coin amount, Fiat price) {
this.amount = amount;
this.price = price;
navigation.navigationTo(Navigation.Item.MAIN, navigationItem,
Navigation.Item.CREATE_OFFER);
navigation.navigationTo(Navigation.Item.MAIN, navigationItem, Navigation.Item.CREATE_OFFER);
}
@Override
public void takeOffer(Coin amount, Fiat price, Offer offer) {
this.amount = amount;
this.price = price;
this.offer = offer;
navigation.navigationTo(Navigation.Item.MAIN, navigationItem,
Navigation.Item.TAKE_OFFER);
navigation.navigationTo(Navigation.Item.MAIN, navigationItem, Navigation.Item.TAKE_OFFER);
}
@ -168,7 +160,6 @@ public class TradeView extends ActivatableView implements TradeNavigator {
ViewLoader.Item loaded = viewLoader.load(navigationItem.getFxmlUrl(), false);
createOfferView = loaded.view;
createOfferViewCB = (CreateOfferView) loaded.controller;
createOfferViewCB.setParent(this);
createOfferViewCB.initWithData(direction, amount, price);
final Tab tab = new Tab("Create offer");
createOfferViewCB.configCloseHandlers(tab.closableProperty());
@ -184,7 +175,6 @@ public class TradeView extends ActivatableView implements TradeNavigator {
ViewLoader.Item loaded = viewLoader.load(Navigation.Item.TAKE_OFFER.getFxmlUrl(), false);
takeOfferView = loaded.view;
takeOfferViewCB = (TakeOfferView) loaded.controller;
takeOfferViewCB.setParent(this);
takeOfferViewCB.initWithData(direction, amount, offer);
final Tab tab = new Tab("Take offer");
takeOfferViewCB.configCloseHandlers(tab.closableProperty());

View File

@ -18,11 +18,12 @@
package io.bitsquare.gui.main.trade.offerbook;
import io.bitsquare.gui.ActivatableViewAndModel;
import io.bitsquare.gui.ChildOf;
import io.bitsquare.gui.Navigation;
import io.bitsquare.gui.OverlayManager;
import io.bitsquare.gui.components.InputTextField;
import io.bitsquare.gui.components.Popups;
import io.bitsquare.gui.main.trade.TradeNavigator;
import io.bitsquare.gui.main.trade.TradeView;
import io.bitsquare.gui.util.ImageUtil;
import io.bitsquare.gui.util.validation.OptionalBtcValidator;
import io.bitsquare.gui.util.validation.OptionalFiatValidator;
@ -59,7 +60,7 @@ import static javafx.beans.binding.Bindings.createStringBinding;
* TODO: The advanced filters are not impl. yet
* The restrictions handling is open from the concept and is only implemented for countries yet.
*/
public class OfferBookView extends ActivatableViewAndModel<OfferBookViewModel> {
public class OfferBookView extends ActivatableViewAndModel<OfferBookViewModel> implements ChildOf<TradeView> {
private static final Logger log = LoggerFactory.getLogger(OfferBookView.class);
private final Navigation navigation;
@ -82,6 +83,8 @@ public class OfferBookView extends ActivatableViewAndModel<OfferBookViewModel> {
@FXML TableColumn<OfferBookListItem, OfferBookListItem> priceColumn, amountColumn, volumeColumn,
directionColumn, countryColumn, bankAccountTypeColumn;
private TradeView parent;
///////////////////////////////////////////////////////////////////////////////////////////
// Constructor
///////////////////////////////////////////////////////////////////////////////////////////
@ -183,8 +186,7 @@ public class OfferBookView extends ActivatableViewAndModel<OfferBookViewModel> {
void createOffer() {
if (model.isRegistered()) {
createOfferButton.setDisable(true);
((TradeNavigator) parent).createOffer(model.getAmountAsCoin(),
model.getPriceAsCoin());
parent.createOffer(model.getAmountAsCoin(), model.getPriceAsCoin());
}
else {
openSetupScreen();
@ -249,8 +251,7 @@ public class OfferBookView extends ActivatableViewAndModel<OfferBookViewModel> {
if (model.isRegistered()) {
if (offer.getDirection() == Direction.BUY) {
((TradeNavigator) parent).takeOffer(model.getAmountAsCoin(),
model.getPriceAsCoin(), offer);
parent.takeOffer(model.getAmountAsCoin(), model.getPriceAsCoin(), offer);
}
else {
Popups.openInfoPopup("Not implemented yet",
@ -386,6 +387,11 @@ public class OfferBookView extends ActivatableViewAndModel<OfferBookViewModel> {
}
public void setParent(TradeView parent) {
this.parent = parent;
}
///////////////////////////////////////////////////////////////////////////////////////////
// CellFactories
///////////////////////////////////////////////////////////////////////////////////////////