/*
* 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.portfolio.pendingtrades;
import io.bitsquare.app.Log;
import io.bitsquare.gui.main.portfolio.pendingtrades.steps.TradeWizardItem;
import io.bitsquare.gui.main.portfolio.pendingtrades.steps.seller.*;
import org.fxmisc.easybind.EasyBind;
public class SellerSubView extends TradeSubView {
private TradeWizardItem step1;
private TradeWizardItem step2;
private TradeWizardItem step3;
private TradeWizardItem step4;
private TradeWizardItem step5;
///////////////////////////////////////////////////////////////////////////////////////////
// Constructor, Initialisation
///////////////////////////////////////////////////////////////////////////////////////////
public SellerSubView(PendingTradesViewModel model) {
super(model);
}
@Override
protected void activate() {
viewStateSubscription = EasyBind.subscribe(model.getSellerState(), this::onViewStateChanged);
super.activate();
}
@Override
protected void addWizards() {
step1 = new TradeWizardItem(SellerStep1View.class, "Wait for blockchain confirmation");
step2 = new TradeWizardItem(SellerStep2View.class, "Wait until payment has started");
step3 = new TradeWizardItem(SellerStep3View.class, "Confirm payment received");
step4 = new TradeWizardItem(SellerStep4View.class, "Wait for payout unlock");
step5 = new TradeWizardItem(SellerStep5View.class, "Completed");
if (model.getLockTime() > 0) {
addWizardsToGridPane(step1);
addWizardsToGridPane(step2);
addWizardsToGridPane(step3);
addWizardsToGridPane(step4);
addWizardsToGridPane(step5);
} else {
addWizardsToGridPane(step1);
addWizardsToGridPane(step2);
addWizardsToGridPane(step3);
addWizardsToGridPane(step5);
}
}
///////////////////////////////////////////////////////////////////////////////////////////
// State
///////////////////////////////////////////////////////////////////////////////////////////
@Override
protected void onViewStateChanged(PendingTradesViewModel.State viewState) {
if (viewState != null) {
Log.traceCall(viewState.toString());
PendingTradesViewModel.SellerState sellerState = (PendingTradesViewModel.SellerState) viewState;
step1.setDisabled();
step2.setDisabled();
step3.setDisabled();
step4.setDisabled();
step5.setDisabled();
switch (sellerState) {
case UNDEFINED:
break;
case WAIT_FOR_BLOCKCHAIN_CONFIRMATION:
showItem(step1);
break;
case WAIT_FOR_FIAT_PAYMENT_STARTED:
step1.setCompleted();
showItem(step2);
break;
case REQUEST_CONFIRM_FIAT_PAYMENT_RECEIVED:
step1.setCompleted();
step2.setCompleted();
showItem(step3);
break;
case WAIT_FOR_PAYOUT_TX:
step1.setCompleted();
step2.setCompleted();
showItem(step3);
// We don't use a wizard for that step as it only gets displayed in case the other peer is offline
tradeStepView = new SellerStep3bView(model);
contentPane.getChildren().setAll(tradeStepView);
break;
case WAIT_FOR_BROADCAST_AFTER_UNLOCK:
step1.setCompleted();
step2.setCompleted();
step3.setCompleted();
showItem(step4);
break;
case REQUEST_WITHDRAWAL:
step1.setCompleted();
step2.setCompleted();
step3.setCompleted();
step4.setCompleted();
showItem(step5);
break;
default:
log.warn("unhandled viewState " + sellerState);
break;
}
}
}
}