mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-06-24 23:00:36 -04:00
initial commit. gui prototype v 0.1
This commit is contained in:
parent
bc09937785
commit
24137c7021
18 changed files with 1296 additions and 1296 deletions
|
@ -1,51 +1,51 @@
|
||||||
package io.bitsquare;
|
package io.bitsquare;
|
||||||
|
|
||||||
import com.google.inject.Guice;
|
import com.google.inject.Guice;
|
||||||
import com.google.inject.Injector;
|
import com.google.inject.Injector;
|
||||||
import io.bitsquare.di.BitSquareModule;
|
import io.bitsquare.di.BitSquareModule;
|
||||||
import io.bitsquare.di.GuiceFXMLLoader;
|
import io.bitsquare.di.GuiceFXMLLoader;
|
||||||
import io.bitsquare.setup.ISetup;
|
import io.bitsquare.setup.ISetup;
|
||||||
import io.bitsquare.setup.MockSetup;
|
import io.bitsquare.setup.MockSetup;
|
||||||
import javafx.application.Application;
|
import javafx.application.Application;
|
||||||
import javafx.scene.Parent;
|
import javafx.scene.Parent;
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class BitSquare extends Application
|
public class BitSquare extends Application
|
||||||
{
|
{
|
||||||
private static final Logger log = LoggerFactory.getLogger(BitSquare.class);
|
private static final Logger log = LoggerFactory.getLogger(BitSquare.class);
|
||||||
|
|
||||||
public static void main(String[] args)
|
public static void main(String[] args)
|
||||||
{
|
{
|
||||||
launch(args);
|
launch(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage stage)
|
public void start(Stage stage)
|
||||||
{
|
{
|
||||||
Injector injector = Guice.createInjector(new BitSquareModule());
|
Injector injector = Guice.createInjector(new BitSquareModule());
|
||||||
ISetup setup = injector.getInstance(MockSetup.class);
|
ISetup setup = injector.getInstance(MockSetup.class);
|
||||||
|
|
||||||
setup.applyPersistedData();
|
setup.applyPersistedData();
|
||||||
|
|
||||||
stage.setTitle("BitSquare");
|
stage.setTitle("BitSquare");
|
||||||
|
|
||||||
GuiceFXMLLoader loader = new GuiceFXMLLoader(injector);
|
GuiceFXMLLoader loader = new GuiceFXMLLoader(injector);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Parent mainView = loader.load(BitSquare.class.getResourceAsStream("/io/bitsquare/gui/MainView.fxml"));
|
Parent mainView = loader.load(BitSquare.class.getResourceAsStream("/io/bitsquare/gui/MainView.fxml"));
|
||||||
Scene scene = new Scene(mainView, 800, 600);
|
Scene scene = new Scene(mainView, 800, 600);
|
||||||
scene.getStylesheets().setAll(getClass().getResource("/io/bitsquare/gui/global.css").toExternalForm());
|
scene.getStylesheets().setAll(getClass().getResource("/io/bitsquare/gui/global.css").toExternalForm());
|
||||||
stage.setScene(scene);
|
stage.setScene(scene);
|
||||||
stage.show();
|
stage.show();
|
||||||
} catch (IOException e)
|
} catch (IOException e)
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
package io.bitsquare.gui.funds;
|
package io.bitsquare.gui.funds;
|
||||||
|
|
||||||
import io.bitsquare.gui.IChildController;
|
import io.bitsquare.gui.IChildController;
|
||||||
import io.bitsquare.gui.INavigationController;
|
import io.bitsquare.gui.INavigationController;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
public class FundsController implements Initializable, IChildController
|
public class FundsController implements Initializable, IChildController
|
||||||
{
|
{
|
||||||
private INavigationController navigationController;
|
private INavigationController navigationController;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL url, ResourceBundle rb)
|
public void initialize(URL url, ResourceBundle rb)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setNavigationController(INavigationController navigationController)
|
public void setNavigationController(INavigationController navigationController)
|
||||||
{
|
{
|
||||||
this.navigationController = navigationController;
|
this.navigationController = navigationController;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?import javafx.scene.control.Label?>
|
<?import javafx.scene.control.Label?>
|
||||||
<?import javafx.scene.layout.Pane?>
|
<?import javafx.scene.layout.Pane?>
|
||||||
<Pane fx:controller="io.bitsquare.gui.funds.FundsController"
|
<Pane fx:controller="io.bitsquare.gui.funds.FundsController"
|
||||||
xmlns:fx="http://javafx.com/fxml">
|
xmlns:fx="http://javafx.com/fxml">
|
||||||
<Label text="Wallet"/>
|
<Label text="Wallet"/>
|
||||||
</Pane>
|
</Pane>
|
|
@ -1,28 +1,28 @@
|
||||||
package io.bitsquare.gui.history;
|
package io.bitsquare.gui.history;
|
||||||
|
|
||||||
import io.bitsquare.gui.IChildController;
|
import io.bitsquare.gui.IChildController;
|
||||||
import io.bitsquare.gui.INavigationController;
|
import io.bitsquare.gui.INavigationController;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
public class HistoryController implements Initializable, IChildController
|
public class HistoryController implements Initializable, IChildController
|
||||||
{
|
{
|
||||||
|
|
||||||
private INavigationController navigationController;
|
private INavigationController navigationController;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL url, ResourceBundle rb)
|
public void initialize(URL url, ResourceBundle rb)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setNavigationController(INavigationController navigationController)
|
public void setNavigationController(INavigationController navigationController)
|
||||||
{
|
{
|
||||||
this.navigationController = navigationController;
|
this.navigationController = navigationController;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?import javafx.scene.control.Label?>
|
<?import javafx.scene.control.Label?>
|
||||||
<?import javafx.scene.layout.Pane?>
|
<?import javafx.scene.layout.Pane?>
|
||||||
<Pane fx:controller="io.bitsquare.gui.history.HistoryController"
|
<Pane fx:controller="io.bitsquare.gui.history.HistoryController"
|
||||||
xmlns:fx="http://javafx.com/fxml">
|
xmlns:fx="http://javafx.com/fxml">
|
||||||
<Label text="Histroy"/>
|
<Label text="Histroy"/>
|
||||||
</Pane>
|
</Pane>
|
|
@ -1,32 +1,32 @@
|
||||||
package io.bitsquare.gui.home;
|
package io.bitsquare.gui.home;
|
||||||
|
|
||||||
import io.bitsquare.gui.IChildController;
|
import io.bitsquare.gui.IChildController;
|
||||||
import io.bitsquare.gui.INavigationController;
|
import io.bitsquare.gui.INavigationController;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.layout.Pane;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
public class HomeController implements Initializable, IChildController
|
public class HomeController implements Initializable, IChildController
|
||||||
{
|
{
|
||||||
private INavigationController navigationController;
|
private INavigationController navigationController;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public Pane rootContainer;
|
public Pane rootContainer;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL url, ResourceBundle rb)
|
public void initialize(URL url, ResourceBundle rb)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setNavigationController(INavigationController navigationController)
|
public void setNavigationController(INavigationController navigationController)
|
||||||
{
|
{
|
||||||
this.navigationController = navigationController;
|
this.navigationController = navigationController;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<?import javafx.scene.layout.VBox?>
|
<?import javafx.scene.layout.VBox?>
|
||||||
<VBox fx:id="rootContainer" fx:controller="io.bitsquare.gui.home.HomeController" spacing="10"
|
<VBox fx:id="rootContainer" fx:controller="io.bitsquare.gui.home.HomeController" spacing="10"
|
||||||
xmlns:fx="http://javafx.com/fxml">
|
xmlns:fx="http://javafx.com/fxml">
|
||||||
</VBox>
|
</VBox>
|
|
@ -1,27 +1,27 @@
|
||||||
package io.bitsquare.gui.msg;
|
package io.bitsquare.gui.msg;
|
||||||
|
|
||||||
import io.bitsquare.gui.IChildController;
|
import io.bitsquare.gui.IChildController;
|
||||||
import io.bitsquare.gui.INavigationController;
|
import io.bitsquare.gui.INavigationController;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
public class MsgController implements Initializable, IChildController
|
public class MsgController implements Initializable, IChildController
|
||||||
{
|
{
|
||||||
private INavigationController navigationController;
|
private INavigationController navigationController;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL url, ResourceBundle rb)
|
public void initialize(URL url, ResourceBundle rb)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setNavigationController(INavigationController navigationController)
|
public void setNavigationController(INavigationController navigationController)
|
||||||
{
|
{
|
||||||
this.navigationController = navigationController;
|
this.navigationController = navigationController;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?import javafx.scene.control.Label?>
|
<?import javafx.scene.control.Label?>
|
||||||
<?import javafx.scene.layout.Pane?>
|
<?import javafx.scene.layout.Pane?>
|
||||||
<Pane fx:controller="io.bitsquare.gui.msg.MsgController"
|
<Pane fx:controller="io.bitsquare.gui.msg.MsgController"
|
||||||
xmlns:fx="http://javafx.com/fxml">
|
xmlns:fx="http://javafx.com/fxml">
|
||||||
<Label text="Msg"/>
|
<Label text="Msg"/>
|
||||||
</Pane>
|
</Pane>
|
|
@ -1,30 +1,30 @@
|
||||||
package io.bitsquare.gui.orders;
|
package io.bitsquare.gui.orders;
|
||||||
|
|
||||||
import io.bitsquare.gui.IChildController;
|
import io.bitsquare.gui.IChildController;
|
||||||
import io.bitsquare.gui.INavigationController;
|
import io.bitsquare.gui.INavigationController;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
public class OrdersController implements Initializable, IChildController
|
public class OrdersController implements Initializable, IChildController
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
private INavigationController navigationController;
|
private INavigationController navigationController;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL url, ResourceBundle rb)
|
public void initialize(URL url, ResourceBundle rb)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setNavigationController(INavigationController navigationController)
|
public void setNavigationController(INavigationController navigationController)
|
||||||
{
|
{
|
||||||
this.navigationController = navigationController;
|
this.navigationController = navigationController;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?import javafx.scene.control.Label?>
|
<?import javafx.scene.control.Label?>
|
||||||
<?import javafx.scene.layout.Pane?>
|
<?import javafx.scene.layout.Pane?>
|
||||||
<Pane fx:controller="io.bitsquare.gui.orders.OrdersController"
|
<Pane fx:controller="io.bitsquare.gui.orders.OrdersController"
|
||||||
xmlns:fx="http://javafx.com/fxml">
|
xmlns:fx="http://javafx.com/fxml">
|
||||||
<Label text="Orders"/>
|
<Label text="Orders"/>
|
||||||
</Pane>
|
</Pane>
|
|
@ -1,30 +1,30 @@
|
||||||
package io.bitsquare.gui.settings;
|
package io.bitsquare.gui.settings;
|
||||||
|
|
||||||
import io.bitsquare.gui.IChildController;
|
import io.bitsquare.gui.IChildController;
|
||||||
import io.bitsquare.gui.INavigationController;
|
import io.bitsquare.gui.INavigationController;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
public class SettingsController implements Initializable, IChildController
|
public class SettingsController implements Initializable, IChildController
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
private INavigationController navigationController;
|
private INavigationController navigationController;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL url, ResourceBundle rb)
|
public void initialize(URL url, ResourceBundle rb)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setNavigationController(INavigationController navigationController)
|
public void setNavigationController(INavigationController navigationController)
|
||||||
{
|
{
|
||||||
this.navigationController = navigationController;
|
this.navigationController = navigationController;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?import javafx.scene.control.Label?>
|
<?import javafx.scene.control.Label?>
|
||||||
<?import javafx.scene.layout.Pane?>
|
<?import javafx.scene.layout.Pane?>
|
||||||
<Pane fx:controller="io.bitsquare.gui.settings.SettingsController"
|
<Pane fx:controller="io.bitsquare.gui.settings.SettingsController"
|
||||||
xmlns:fx="http://javafx.com/fxml">
|
xmlns:fx="http://javafx.com/fxml">
|
||||||
<Label text="Settings"/>
|
<Label text="Settings"/>
|
||||||
</Pane>
|
</Pane>
|
|
@ -1,89 +1,89 @@
|
||||||
package io.bitsquare.gui.trade;
|
package io.bitsquare.gui.trade;
|
||||||
|
|
||||||
import io.bitsquare.BitSquare;
|
import io.bitsquare.BitSquare;
|
||||||
import io.bitsquare.di.GuiceFXMLLoader;
|
import io.bitsquare.di.GuiceFXMLLoader;
|
||||||
import io.bitsquare.gui.IChildController;
|
import io.bitsquare.gui.IChildController;
|
||||||
import io.bitsquare.gui.INavigationController;
|
import io.bitsquare.gui.INavigationController;
|
||||||
import io.bitsquare.gui.trade.orderbook.OrderBookController;
|
import io.bitsquare.gui.trade.orderbook.OrderBookController;
|
||||||
import io.bitsquare.trade.Direction;
|
import io.bitsquare.trade.Direction;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.fxml.FXMLLoader;
|
import javafx.fxml.FXMLLoader;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
import javafx.scene.control.Tab;
|
import javafx.scene.control.Tab;
|
||||||
import javafx.scene.control.TabPane;
|
import javafx.scene.control.TabPane;
|
||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.layout.Pane;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
public class TradeController implements Initializable, INavigationController, IChildController
|
public class TradeController implements Initializable, INavigationController, IChildController
|
||||||
{
|
{
|
||||||
@FXML
|
@FXML
|
||||||
private TabPane tabPane;
|
private TabPane tabPane;
|
||||||
|
|
||||||
private IChildController childController;
|
private IChildController childController;
|
||||||
private boolean orderbookCreated;
|
private boolean orderbookCreated;
|
||||||
private INavigationController navigationController;
|
private INavigationController navigationController;
|
||||||
private OrderBookController orderBookController;
|
private OrderBookController orderBookController;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IChildController navigateToView(String fxmlView, String title)
|
public IChildController navigateToView(String fxmlView, String title)
|
||||||
{
|
{
|
||||||
if (fxmlView.equals(INavigationController.TRADE__ORDER_BOOK) && orderbookCreated)
|
if (fxmlView.equals(INavigationController.TRADE__ORDER_BOOK) && orderbookCreated)
|
||||||
{
|
{
|
||||||
tabPane.getSelectionModel().select(0);
|
tabPane.getSelectionModel().select(0);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
FXMLLoader loader = new GuiceFXMLLoader();
|
FXMLLoader loader = new GuiceFXMLLoader();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Pane view = loader.load(BitSquare.class.getResourceAsStream(fxmlView));
|
Pane view = loader.load(BitSquare.class.getResourceAsStream(fxmlView));
|
||||||
childController = loader.getController();
|
childController = loader.getController();
|
||||||
childController.setNavigationController(this);
|
childController.setNavigationController(this);
|
||||||
|
|
||||||
if (childController instanceof OrderBookController)
|
if (childController instanceof OrderBookController)
|
||||||
orderBookController = (OrderBookController) childController;
|
orderBookController = (OrderBookController) childController;
|
||||||
|
|
||||||
Tab tab = new Tab(title);
|
Tab tab = new Tab(title);
|
||||||
tab.setContent(view);
|
tab.setContent(view);
|
||||||
tabPane.getTabs().add(tab);
|
tabPane.getTabs().add(tab);
|
||||||
|
|
||||||
if (fxmlView.equals(INavigationController.TRADE__ORDER_BOOK))
|
if (fxmlView.equals(INavigationController.TRADE__ORDER_BOOK))
|
||||||
{
|
{
|
||||||
tab.setClosable(false);
|
tab.setClosable(false);
|
||||||
orderbookCreated = true;
|
orderbookCreated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
tabPane.getSelectionModel().select(tabPane.getTabs().size() - 1);
|
tabPane.getSelectionModel().select(tabPane.getTabs().size() - 1);
|
||||||
|
|
||||||
return childController;
|
return childController;
|
||||||
} catch (IOException e)
|
} catch (IOException e)
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL url, ResourceBundle rb)
|
public void initialize(URL url, ResourceBundle rb)
|
||||||
{
|
{
|
||||||
navigateToView(INavigationController.TRADE__ORDER_BOOK, "Orderbook");
|
navigateToView(INavigationController.TRADE__ORDER_BOOK, "Orderbook");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setNavigationController(INavigationController navigationController)
|
public void setNavigationController(INavigationController navigationController)
|
||||||
{
|
{
|
||||||
|
|
||||||
this.navigationController = navigationController;
|
this.navigationController = navigationController;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDirection(Direction direction)
|
public void setDirection(Direction direction)
|
||||||
{
|
{
|
||||||
tabPane.getSelectionModel().select(0);
|
tabPane.getSelectionModel().select(0);
|
||||||
orderBookController.setDirection(direction);
|
orderBookController.setDirection(direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,271 +1,271 @@
|
||||||
package io.bitsquare.gui.trade.offer;
|
package io.bitsquare.gui.trade.offer;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import io.bitsquare.gui.IChildController;
|
import io.bitsquare.gui.IChildController;
|
||||||
import io.bitsquare.gui.INavigationController;
|
import io.bitsquare.gui.INavigationController;
|
||||||
import io.bitsquare.gui.util.Converter;
|
import io.bitsquare.gui.util.Converter;
|
||||||
import io.bitsquare.gui.util.Formatter;
|
import io.bitsquare.gui.util.Formatter;
|
||||||
import io.bitsquare.settings.OrderBookFilterSettings;
|
import io.bitsquare.settings.OrderBookFilterSettings;
|
||||||
import io.bitsquare.settings.Settings;
|
import io.bitsquare.settings.Settings;
|
||||||
import io.bitsquare.trade.Direction;
|
import io.bitsquare.trade.Direction;
|
||||||
import io.bitsquare.trade.Offer;
|
import io.bitsquare.trade.Offer;
|
||||||
import io.bitsquare.trade.OfferConstraints;
|
import io.bitsquare.trade.OfferConstraints;
|
||||||
import io.bitsquare.trade.TradingFacade;
|
import io.bitsquare.trade.TradingFacade;
|
||||||
import io.bitsquare.trade.orderbook.MockOrderBook;
|
import io.bitsquare.trade.orderbook.MockOrderBook;
|
||||||
import io.bitsquare.trade.orderbook.OrderBookFilter;
|
import io.bitsquare.trade.orderbook.OrderBookFilter;
|
||||||
import io.bitsquare.user.User;
|
import io.bitsquare.user.User;
|
||||||
import javafx.beans.value.ChangeListener;
|
import javafx.beans.value.ChangeListener;
|
||||||
import javafx.beans.value.ObservableValue;
|
import javafx.beans.value.ObservableValue;
|
||||||
import javafx.collections.FXCollections;
|
import javafx.collections.FXCollections;
|
||||||
import javafx.collections.ObservableList;
|
import javafx.collections.ObservableList;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.scene.image.ImageView;
|
import javafx.scene.image.ImageView;
|
||||||
import javafx.scene.layout.AnchorPane;
|
import javafx.scene.layout.AnchorPane;
|
||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.layout.Pane;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Currency;
|
import java.util.Currency;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class CreateOfferController implements Initializable, IChildController
|
public class CreateOfferController implements Initializable, IChildController
|
||||||
{
|
{
|
||||||
private static final Logger log = LoggerFactory.getLogger(CreateOfferController.class);
|
private static final Logger log = LoggerFactory.getLogger(CreateOfferController.class);
|
||||||
|
|
||||||
private INavigationController navigationController;
|
private INavigationController navigationController;
|
||||||
private TradingFacade tradingFacade;
|
private TradingFacade tradingFacade;
|
||||||
private OrderBookFilterSettings orderBookFilterSettings;
|
private OrderBookFilterSettings orderBookFilterSettings;
|
||||||
private Settings settings;
|
private Settings settings;
|
||||||
private User user;
|
private User user;
|
||||||
private double filterPaneItemOffset;
|
private double filterPaneItemOffset;
|
||||||
private Direction direction;
|
private Direction direction;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public AnchorPane holderPane;
|
public AnchorPane holderPane;
|
||||||
@FXML
|
@FXML
|
||||||
public Pane detailsPane;
|
public Pane detailsPane;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public Label buyLabel;
|
public Label buyLabel;
|
||||||
@FXML
|
@FXML
|
||||||
public TextField volume;
|
public TextField volume;
|
||||||
@FXML
|
@FXML
|
||||||
public ImageView directionImageView;
|
public ImageView directionImageView;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public TextField amount;
|
public TextField amount;
|
||||||
@FXML
|
@FXML
|
||||||
public TextField price;
|
public TextField price;
|
||||||
@FXML
|
@FXML
|
||||||
public TextField minAmount;
|
public TextField minAmount;
|
||||||
@FXML
|
@FXML
|
||||||
public Button placeOfferButton;
|
public Button placeOfferButton;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public CreateOfferController(TradingFacade tradingFacade, OrderBookFilterSettings orderBookFilterSettings, Settings settings, User user)
|
public CreateOfferController(TradingFacade tradingFacade, OrderBookFilterSettings orderBookFilterSettings, Settings settings, User user)
|
||||||
{
|
{
|
||||||
this.tradingFacade = tradingFacade;
|
this.tradingFacade = tradingFacade;
|
||||||
this.orderBookFilterSettings = orderBookFilterSettings;
|
this.orderBookFilterSettings = orderBookFilterSettings;
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.user = user;
|
this.user = user;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL url, ResourceBundle rb)
|
public void initialize(URL url, ResourceBundle rb)
|
||||||
{
|
{
|
||||||
createFilterPane();
|
createFilterPane();
|
||||||
|
|
||||||
amount.textProperty().addListener(new ChangeListener<String>()
|
amount.textProperty().addListener(new ChangeListener<String>()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue)
|
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue)
|
||||||
{
|
{
|
||||||
setVolume();
|
setVolume();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
price.textProperty().addListener(new ChangeListener<String>()
|
price.textProperty().addListener(new ChangeListener<String>()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue)
|
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue)
|
||||||
{
|
{
|
||||||
setVolume();
|
setVolume();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
placeOfferButton.setOnAction(e -> {
|
placeOfferButton.setOnAction(e -> {
|
||||||
// TODO not impl yet. use mocks
|
// TODO not impl yet. use mocks
|
||||||
OfferConstraints offerConstraints = new MockOrderBook(settings).getRandomOfferConstraints();
|
OfferConstraints offerConstraints = new MockOrderBook(settings).getRandomOfferConstraints();
|
||||||
Offer offer = new Offer(UUID.randomUUID(),
|
Offer offer = new Offer(UUID.randomUUID(),
|
||||||
direction,
|
direction,
|
||||||
Converter.convertToDouble(price.getText()),
|
Converter.convertToDouble(price.getText()),
|
||||||
Converter.convertToDouble(amount.getText()),
|
Converter.convertToDouble(amount.getText()),
|
||||||
Converter.convertToDouble(minAmount.getText()),
|
Converter.convertToDouble(minAmount.getText()),
|
||||||
settings.getCurrency(),
|
settings.getCurrency(),
|
||||||
user,
|
user,
|
||||||
offerConstraints);
|
offerConstraints);
|
||||||
tradingFacade.placeNewOffer(offer);
|
tradingFacade.placeNewOffer(offer);
|
||||||
|
|
||||||
TabPane tabPane = ((TabPane) (holderPane.getParent().getParent()));
|
TabPane tabPane = ((TabPane) (holderPane.getParent().getParent()));
|
||||||
tabPane.getTabs().remove(tabPane.getSelectionModel().getSelectedItem());
|
tabPane.getTabs().remove(tabPane.getSelectionModel().getSelectedItem());
|
||||||
|
|
||||||
navigationController.navigateToView(INavigationController.TRADE__ORDER_BOOK, "Orderbook");
|
navigationController.navigateToView(INavigationController.TRADE__ORDER_BOOK, "Orderbook");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setNavigationController(INavigationController navigationController)
|
public void setNavigationController(INavigationController navigationController)
|
||||||
{
|
{
|
||||||
this.navigationController = navigationController;
|
this.navigationController = navigationController;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOrderBookFilter(OrderBookFilter orderBookFilter)
|
public void setOrderBookFilter(OrderBookFilter orderBookFilter)
|
||||||
{
|
{
|
||||||
direction = orderBookFilter.getDirection();
|
direction = orderBookFilter.getDirection();
|
||||||
amount.setText(Formatter.formatPrice(orderBookFilter.getAmount()));
|
amount.setText(Formatter.formatPrice(orderBookFilter.getAmount()));
|
||||||
minAmount.setText(Formatter.formatPrice(orderBookFilter.getAmount()));
|
minAmount.setText(Formatter.formatPrice(orderBookFilter.getAmount()));
|
||||||
price.setText(Formatter.formatPrice(orderBookFilter.getPrice()));
|
price.setText(Formatter.formatPrice(orderBookFilter.getPrice()));
|
||||||
|
|
||||||
configDirection();
|
configDirection();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void configDirection()
|
private void configDirection()
|
||||||
{
|
{
|
||||||
String iconPath;
|
String iconPath;
|
||||||
String buyLabelText;
|
String buyLabelText;
|
||||||
if (direction == Direction.BUY)
|
if (direction == Direction.BUY)
|
||||||
{
|
{
|
||||||
iconPath = "/images/buy.png";
|
iconPath = "/images/buy.png";
|
||||||
buyLabelText = "BUY";
|
buyLabelText = "BUY";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
iconPath = "/images/sell.png";
|
iconPath = "/images/sell.png";
|
||||||
buyLabelText = "SELL";
|
buyLabelText = "SELL";
|
||||||
}
|
}
|
||||||
Image icon = new Image(getClass().getResourceAsStream(iconPath));
|
Image icon = new Image(getClass().getResourceAsStream(iconPath));
|
||||||
directionImageView.setImage(icon);
|
directionImageView.setImage(icon);
|
||||||
buyLabel.setText(buyLabelText);
|
buyLabel.setText(buyLabelText);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createFilterPane()
|
private void createFilterPane()
|
||||||
{
|
{
|
||||||
filterPaneItemOffset = 30;
|
filterPaneItemOffset = 30;
|
||||||
|
|
||||||
ArrayList<Currency> currencies = orderBookFilterSettings.getCurrencies();
|
ArrayList<Currency> currencies = orderBookFilterSettings.getCurrencies();
|
||||||
Currency currency = orderBookFilterSettings.getCurrency();
|
Currency currency = orderBookFilterSettings.getCurrency();
|
||||||
ComboBox currencyComboBox = createCurrencyItem("Currency: ", currency, currencies);
|
ComboBox currencyComboBox = createCurrencyItem("Currency: ", currency, currencies);
|
||||||
currencyComboBox.valueProperty().addListener(new ChangeListener<Currency>()
|
currencyComboBox.valueProperty().addListener(new ChangeListener<Currency>()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void changed(ObservableValue ov, Currency oldValue, Currency newValue)
|
public void changed(ObservableValue ov, Currency oldValue, Currency newValue)
|
||||||
{
|
{
|
||||||
orderBookFilterSettings.setCurrency(newValue);
|
orderBookFilterSettings.setCurrency(newValue);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Label bankLabel = createFilterItem("Bank transfer types: ", "SEPA, OKPAY");
|
Label bankLabel = createFilterItem("Bank transfer types: ", "SEPA, OKPAY");
|
||||||
|
|
||||||
Label countriesLabel = createFilterItem("Countries: ", "DE, GB, AT");
|
Label countriesLabel = createFilterItem("Countries: ", "DE, GB, AT");
|
||||||
Label languagesLabel = createFilterItem("Languages: ", "DE, EN");
|
Label languagesLabel = createFilterItem("Languages: ", "DE, EN");
|
||||||
Label arbitratorsLabel = createFilterItem("Arbitrators: ", "Paysty, BitRated");
|
Label arbitratorsLabel = createFilterItem("Arbitrators: ", "Paysty, BitRated");
|
||||||
Label identityLabel = createFilterItem("Identity verifications: ", "Passport, Google+, Facebook, Skype");
|
Label identityLabel = createFilterItem("Identity verifications: ", "Passport, Google+, Facebook, Skype");
|
||||||
TextField collateralLabel = createCollateralItem("Collateral (%): ", 10);
|
TextField collateralLabel = createCollateralItem("Collateral (%): ", 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ComboBox createCurrencyItem(String labelText, Currency currency, ArrayList<Currency> currencies)
|
private ComboBox createCurrencyItem(String labelText, Currency currency, ArrayList<Currency> currencies)
|
||||||
{
|
{
|
||||||
final Separator separator = new Separator();
|
final Separator separator = new Separator();
|
||||||
separator.setPrefWidth(380);
|
separator.setPrefWidth(380);
|
||||||
separator.setLayoutY(0 + filterPaneItemOffset);
|
separator.setLayoutY(0 + filterPaneItemOffset);
|
||||||
separator.setLayoutX(0);
|
separator.setLayoutX(0);
|
||||||
final Label label = new Label(labelText);
|
final Label label = new Label(labelText);
|
||||||
label.setLayoutY(10 + filterPaneItemOffset);
|
label.setLayoutY(10 + filterPaneItemOffset);
|
||||||
ObservableList<Currency> options = FXCollections.observableArrayList(currencies);
|
ObservableList<Currency> options = FXCollections.observableArrayList(currencies);
|
||||||
final ComboBox comboBox = new ComboBox(options);
|
final ComboBox comboBox = new ComboBox(options);
|
||||||
comboBox.setLayoutX(70);
|
comboBox.setLayoutX(70);
|
||||||
comboBox.setLayoutY(5 + filterPaneItemOffset);
|
comboBox.setLayoutY(5 + filterPaneItemOffset);
|
||||||
comboBox.setValue(currency);
|
comboBox.setValue(currency);
|
||||||
|
|
||||||
|
|
||||||
detailsPane.getChildren().addAll(separator, label, comboBox);
|
detailsPane.getChildren().addAll(separator, label, comboBox);
|
||||||
filterPaneItemOffset += 40;
|
filterPaneItemOffset += 40;
|
||||||
return comboBox;
|
return comboBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Label createFilterItem(String labelText, String valueText)
|
private Label createFilterItem(String labelText, String valueText)
|
||||||
{
|
{
|
||||||
final Separator separator = new Separator();
|
final Separator separator = new Separator();
|
||||||
separator.setPrefWidth(380);
|
separator.setPrefWidth(380);
|
||||||
separator.setLayoutY(0 + filterPaneItemOffset);
|
separator.setLayoutY(0 + filterPaneItemOffset);
|
||||||
separator.setLayoutX(0);
|
separator.setLayoutX(0);
|
||||||
final Label label = new Label(labelText + valueText);
|
final Label label = new Label(labelText + valueText);
|
||||||
label.setLayoutY(10 + filterPaneItemOffset);
|
label.setLayoutY(10 + filterPaneItemOffset);
|
||||||
label.setPrefWidth(310);
|
label.setPrefWidth(310);
|
||||||
Tooltip tooltip = new Tooltip(valueText);
|
Tooltip tooltip = new Tooltip(valueText);
|
||||||
label.setTooltip(tooltip);
|
label.setTooltip(tooltip);
|
||||||
|
|
||||||
final Button edit = new Button("Edit");
|
final Button edit = new Button("Edit");
|
||||||
edit.setPrefWidth(50);
|
edit.setPrefWidth(50);
|
||||||
edit.setLayoutX(330);
|
edit.setLayoutX(330);
|
||||||
edit.setLayoutY(5 + filterPaneItemOffset);
|
edit.setLayoutY(5 + filterPaneItemOffset);
|
||||||
|
|
||||||
detailsPane.getChildren().addAll(separator, label, edit);
|
detailsPane.getChildren().addAll(separator, label, edit);
|
||||||
filterPaneItemOffset += 40;
|
filterPaneItemOffset += 40;
|
||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
|
|
||||||
private TextField createCollateralItem(String labelText, double collateral)
|
private TextField createCollateralItem(String labelText, double collateral)
|
||||||
{
|
{
|
||||||
final Separator separator = new Separator();
|
final Separator separator = new Separator();
|
||||||
separator.setPrefWidth(380);
|
separator.setPrefWidth(380);
|
||||||
separator.setLayoutY(0 + filterPaneItemOffset);
|
separator.setLayoutY(0 + filterPaneItemOffset);
|
||||||
separator.setLayoutX(0);
|
separator.setLayoutX(0);
|
||||||
final Label label = new Label(labelText);
|
final Label label = new Label(labelText);
|
||||||
label.setLayoutY(10 + filterPaneItemOffset);
|
label.setLayoutY(10 + filterPaneItemOffset);
|
||||||
label.setPrefWidth(310);
|
label.setPrefWidth(310);
|
||||||
|
|
||||||
final TextField collateralValue = new TextField(Double.toString(collateral));
|
final TextField collateralValue = new TextField(Double.toString(collateral));
|
||||||
collateralValue.setLayoutX(90);
|
collateralValue.setLayoutX(90);
|
||||||
collateralValue.setLayoutY(5 + filterPaneItemOffset);
|
collateralValue.setLayoutY(5 + filterPaneItemOffset);
|
||||||
collateralValue.setPrefWidth(50);
|
collateralValue.setPrefWidth(50);
|
||||||
|
|
||||||
detailsPane.getChildren().addAll(separator, label, collateralValue);
|
detailsPane.getChildren().addAll(separator, label, collateralValue);
|
||||||
filterPaneItemOffset += 40;
|
filterPaneItemOffset += 40;
|
||||||
|
|
||||||
return collateralValue;
|
return collateralValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private double textInputToNumber(String oldValue, String newValue)
|
private double textInputToNumber(String oldValue, String newValue)
|
||||||
{
|
{
|
||||||
//TODO use regex.... or better custom textfield component
|
//TODO use regex.... or better custom textfield component
|
||||||
double d = 0.0;
|
double d = 0.0;
|
||||||
if (!newValue.equals(""))
|
if (!newValue.equals(""))
|
||||||
{
|
{
|
||||||
d = Converter.convertToDouble(newValue);
|
d = Converter.convertToDouble(newValue);
|
||||||
if (d == Double.NEGATIVE_INFINITY)
|
if (d == Double.NEGATIVE_INFINITY)
|
||||||
{
|
{
|
||||||
amount.setText(oldValue);
|
amount.setText(oldValue);
|
||||||
d = Converter.convertToDouble(oldValue);
|
d = Converter.convertToDouble(oldValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setVolume()
|
private void setVolume()
|
||||||
{
|
{
|
||||||
double a = textInputToNumber(amount.getText(), amount.getText());
|
double a = textInputToNumber(amount.getText(), amount.getText());
|
||||||
double p = textInputToNumber(price.getText(), price.getText());
|
double p = textInputToNumber(price.getText(), price.getText());
|
||||||
volume.setText(Formatter.formatPrice(a * p));
|
volume.setText(Formatter.formatPrice(a * p));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,242 +1,242 @@
|
||||||
package io.bitsquare.gui.trade.orderbook;
|
package io.bitsquare.gui.trade.orderbook;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import io.bitsquare.gui.IChildController;
|
import io.bitsquare.gui.IChildController;
|
||||||
import io.bitsquare.gui.INavigationController;
|
import io.bitsquare.gui.INavigationController;
|
||||||
import io.bitsquare.gui.trade.offer.CreateOfferController;
|
import io.bitsquare.gui.trade.offer.CreateOfferController;
|
||||||
import io.bitsquare.gui.trade.tradeprocess.TradeProcessController;
|
import io.bitsquare.gui.trade.tradeprocess.TradeProcessController;
|
||||||
import io.bitsquare.gui.util.Converter;
|
import io.bitsquare.gui.util.Converter;
|
||||||
import io.bitsquare.gui.util.Formatter;
|
import io.bitsquare.gui.util.Formatter;
|
||||||
import io.bitsquare.gui.util.Icons;
|
import io.bitsquare.gui.util.Icons;
|
||||||
import io.bitsquare.settings.Settings;
|
import io.bitsquare.settings.Settings;
|
||||||
import io.bitsquare.trade.Direction;
|
import io.bitsquare.trade.Direction;
|
||||||
import io.bitsquare.trade.orderbook.IOrderBook;
|
import io.bitsquare.trade.orderbook.IOrderBook;
|
||||||
import io.bitsquare.trade.orderbook.MockOrderBook;
|
import io.bitsquare.trade.orderbook.MockOrderBook;
|
||||||
import io.bitsquare.trade.orderbook.OrderBookFilter;
|
import io.bitsquare.trade.orderbook.OrderBookFilter;
|
||||||
import javafx.beans.value.ChangeListener;
|
import javafx.beans.value.ChangeListener;
|
||||||
import javafx.beans.value.ObservableValue;
|
import javafx.beans.value.ObservableValue;
|
||||||
import javafx.collections.ObservableList;
|
import javafx.collections.ObservableList;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
import javafx.scene.control.Button;
|
import javafx.scene.control.Button;
|
||||||
import javafx.scene.control.TableColumn;
|
import javafx.scene.control.TableColumn;
|
||||||
import javafx.scene.control.TableView;
|
import javafx.scene.control.TableView;
|
||||||
import javafx.scene.control.TextField;
|
import javafx.scene.control.TextField;
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.scene.image.ImageView;
|
import javafx.scene.image.ImageView;
|
||||||
import javafx.scene.layout.AnchorPane;
|
import javafx.scene.layout.AnchorPane;
|
||||||
import javafx.scene.layout.HBox;
|
import javafx.scene.layout.HBox;
|
||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.layout.Pane;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
public class OrderBookController implements Initializable, IChildController
|
public class OrderBookController implements Initializable, IChildController
|
||||||
{
|
{
|
||||||
private INavigationController navigationController;
|
private INavigationController navigationController;
|
||||||
private IOrderBook orderBook;
|
private IOrderBook orderBook;
|
||||||
private Settings settings;
|
private Settings settings;
|
||||||
|
|
||||||
private OrderBookListItem selectedOrderBookListItem;
|
private OrderBookListItem selectedOrderBookListItem;
|
||||||
private final OrderBookFilter orderBookFilter;
|
private final OrderBookFilter orderBookFilter;
|
||||||
|
|
||||||
private Button createOfferButton;
|
private Button createOfferButton;
|
||||||
private Image buyIcon = Icons.getIconImage(Icons.BUY);
|
private Image buyIcon = Icons.getIconImage(Icons.BUY);
|
||||||
private Image sellIcon = Icons.getIconImage(Icons.SELL);
|
private Image sellIcon = Icons.getIconImage(Icons.SELL);
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public AnchorPane holderPane;
|
public AnchorPane holderPane;
|
||||||
@FXML
|
@FXML
|
||||||
public HBox topHBox;
|
public HBox topHBox;
|
||||||
@FXML
|
@FXML
|
||||||
private Button tradeButton;
|
private Button tradeButton;
|
||||||
@FXML
|
@FXML
|
||||||
public TextField volume, amount, price;
|
public TextField volume, amount, price;
|
||||||
@FXML
|
@FXML
|
||||||
public Pane filterPane;
|
public Pane filterPane;
|
||||||
@FXML
|
@FXML
|
||||||
public TableView<OrderBookListItem> orderBookTable;
|
public TableView<OrderBookListItem> orderBookTable;
|
||||||
@FXML
|
@FXML
|
||||||
public TableColumn priceColumn, amountColumn, volumeColumn;
|
public TableColumn priceColumn, amountColumn, volumeColumn;
|
||||||
@FXML
|
@FXML
|
||||||
private ImageView tradeButtonImageView;
|
private ImageView tradeButtonImageView;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public OrderBookController(IOrderBook orderBook, OrderBookFilter orderBookFilter, Settings settings)
|
public OrderBookController(IOrderBook orderBook, OrderBookFilter orderBookFilter, Settings settings)
|
||||||
{
|
{
|
||||||
this.orderBook = orderBook;
|
this.orderBook = orderBook;
|
||||||
this.orderBookFilter = orderBookFilter;
|
this.orderBookFilter = orderBookFilter;
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL url, ResourceBundle rb)
|
public void initialize(URL url, ResourceBundle rb)
|
||||||
{
|
{
|
||||||
orderBookFilter.getCurrencyProperty().addListener(new ChangeListener<String>()
|
orderBookFilter.getCurrencyProperty().addListener(new ChangeListener<String>()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue)
|
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue)
|
||||||
{
|
{
|
||||||
updateOfferList();
|
updateOfferList();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
createFilterPane();
|
createFilterPane();
|
||||||
|
|
||||||
updateOfferList();
|
updateOfferList();
|
||||||
|
|
||||||
amount.textProperty().addListener(new ChangeListener<String>()
|
amount.textProperty().addListener(new ChangeListener<String>()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue)
|
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue)
|
||||||
{
|
{
|
||||||
orderBookFilter.setAmount(textInputToNumber(oldValue, newValue));
|
orderBookFilter.setAmount(textInputToNumber(oldValue, newValue));
|
||||||
updateOfferList();
|
updateOfferList();
|
||||||
updateVolume();
|
updateVolume();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
price.textProperty().addListener(new ChangeListener<String>()
|
price.textProperty().addListener(new ChangeListener<String>()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue)
|
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue)
|
||||||
{
|
{
|
||||||
orderBookFilter.setPrice(textInputToNumber(oldValue, newValue));
|
orderBookFilter.setPrice(textInputToNumber(oldValue, newValue));
|
||||||
updateOfferList();
|
updateOfferList();
|
||||||
updateVolume();
|
updateVolume();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
orderBookTable.getSelectionModel().selectedItemProperty().addListener((observableValue, oldValue, newValue) -> {
|
orderBookTable.getSelectionModel().selectedItemProperty().addListener((observableValue, oldValue, newValue) -> {
|
||||||
selectedOrderBookListItem = orderBookTable.getSelectionModel().getSelectedItem();
|
selectedOrderBookListItem = orderBookTable.getSelectionModel().getSelectedItem();
|
||||||
tradeButton.setDisable(selectedOrderBookListItem == null);
|
tradeButton.setDisable(selectedOrderBookListItem == null);
|
||||||
});
|
});
|
||||||
|
|
||||||
tradeButton.setOnAction(e -> openTradeTab(selectedOrderBookListItem));
|
tradeButton.setOnAction(e -> openTradeTab(selectedOrderBookListItem));
|
||||||
tradeButton.setDisable(true);
|
tradeButton.setDisable(true);
|
||||||
tradeButton.setDefaultButton(true);
|
tradeButton.setDefaultButton(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setNavigationController(INavigationController navigationController)
|
public void setNavigationController(INavigationController navigationController)
|
||||||
{
|
{
|
||||||
this.navigationController = navigationController;
|
this.navigationController = navigationController;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDirection(Direction direction)
|
public void setDirection(Direction direction)
|
||||||
{
|
{
|
||||||
orderBookTable.getSelectionModel().clearSelection();
|
orderBookTable.getSelectionModel().clearSelection();
|
||||||
tradeButton.setDisable(true);
|
tradeButton.setDisable(true);
|
||||||
price.setText("");
|
price.setText("");
|
||||||
|
|
||||||
String title;
|
String title;
|
||||||
Image icon;
|
Image icon;
|
||||||
if (direction == Direction.SELL)
|
if (direction == Direction.SELL)
|
||||||
{
|
{
|
||||||
title = "SELL";
|
title = "SELL";
|
||||||
icon = sellIcon;
|
icon = sellIcon;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
title = "BUY";
|
title = "BUY";
|
||||||
icon = buyIcon;
|
icon = buyIcon;
|
||||||
}
|
}
|
||||||
tradeButton.setText(title);
|
tradeButton.setText(title);
|
||||||
tradeButtonImageView.setImage(icon);
|
tradeButtonImageView.setImage(icon);
|
||||||
orderBookFilter.setDirection(direction);
|
orderBookFilter.setDirection(direction);
|
||||||
|
|
||||||
updateOfferList();
|
updateOfferList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openTradeTab(OrderBookListItem orderBookListItem)
|
private void openTradeTab(OrderBookListItem orderBookListItem)
|
||||||
{
|
{
|
||||||
String title = orderBookListItem.getOffer().getDirection() == Direction.BUY ? "Trade: Sell Bitcoin" : "Trade: Buy Bitcoin";
|
String title = orderBookListItem.getOffer().getDirection() == Direction.BUY ? "Trade: Sell Bitcoin" : "Trade: Buy Bitcoin";
|
||||||
TradeProcessController tradeProcessController = (TradeProcessController) navigationController.navigateToView(INavigationController.TRADE__PROCESS, title);
|
TradeProcessController tradeProcessController = (TradeProcessController) navigationController.navigateToView(INavigationController.TRADE__PROCESS, title);
|
||||||
|
|
||||||
double requestedAmount = orderBookListItem.getOffer().getAmount();
|
double requestedAmount = orderBookListItem.getOffer().getAmount();
|
||||||
if (!amount.getText().equals(""))
|
if (!amount.getText().equals(""))
|
||||||
requestedAmount = Converter.convertToDouble(amount.getText());
|
requestedAmount = Converter.convertToDouble(amount.getText());
|
||||||
|
|
||||||
tradeProcessController.initView(orderBookListItem.getOffer(), requestedAmount);
|
tradeProcessController.initView(orderBookListItem.getOffer(), requestedAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void displayCreateOfferButton()
|
private void displayCreateOfferButton()
|
||||||
{
|
{
|
||||||
if (createOfferButton == null)
|
if (createOfferButton == null)
|
||||||
{
|
{
|
||||||
createOfferButton = new Button("Create new offer");
|
createOfferButton = new Button("Create new offer");
|
||||||
holderPane.setBottomAnchor(createOfferButton, 375.0);
|
holderPane.setBottomAnchor(createOfferButton, 375.0);
|
||||||
holderPane.setLeftAnchor(createOfferButton, 200.0);
|
holderPane.setLeftAnchor(createOfferButton, 200.0);
|
||||||
holderPane.getChildren().add(createOfferButton);
|
holderPane.getChildren().add(createOfferButton);
|
||||||
|
|
||||||
createOfferButton.setOnAction(e -> {
|
createOfferButton.setOnAction(e -> {
|
||||||
IChildController nextController = navigationController.navigateToView(INavigationController.TRADE__CREATE_OFFER, "Create offer");
|
IChildController nextController = navigationController.navigateToView(INavigationController.TRADE__CREATE_OFFER, "Create offer");
|
||||||
((CreateOfferController) nextController).setOrderBookFilter(orderBookFilter);
|
((CreateOfferController) nextController).setOrderBookFilter(orderBookFilter);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
createOfferButton.setVisible(true);
|
createOfferButton.setVisible(true);
|
||||||
|
|
||||||
holderPane.setBottomAnchor(orderBookTable, 410.0);
|
holderPane.setBottomAnchor(orderBookTable, 410.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateOfferList()
|
private void updateOfferList()
|
||||||
{
|
{
|
||||||
ObservableList offers = orderBook.getFilteredList(orderBookFilter);
|
ObservableList offers = orderBook.getFilteredList(orderBookFilter);
|
||||||
orderBookTable.setItems(offers);
|
orderBookTable.setItems(offers);
|
||||||
orderBookTable.getSortOrder().add(priceColumn);
|
orderBookTable.getSortOrder().add(priceColumn);
|
||||||
priceColumn.setSortType((orderBookFilter.getDirection() == Direction.BUY) ? TableColumn.SortType.ASCENDING : TableColumn.SortType.DESCENDING);
|
priceColumn.setSortType((orderBookFilter.getDirection() == Direction.BUY) ? TableColumn.SortType.ASCENDING : TableColumn.SortType.DESCENDING);
|
||||||
|
|
||||||
if (offers.size() == 0)
|
if (offers.size() == 0)
|
||||||
{
|
{
|
||||||
displayCreateOfferButton();
|
displayCreateOfferButton();
|
||||||
}
|
}
|
||||||
else if (createOfferButton != null)
|
else if (createOfferButton != null)
|
||||||
{
|
{
|
||||||
createOfferButton.setVisible(false);
|
createOfferButton.setVisible(false);
|
||||||
holderPane.setBottomAnchor(orderBookTable, 10.0);
|
holderPane.setBottomAnchor(orderBookTable, 10.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createFilterPane()
|
private void createFilterPane()
|
||||||
{
|
{
|
||||||
MockOrderBook mockOrderBook = new MockOrderBook(settings);
|
MockOrderBook mockOrderBook = new MockOrderBook(settings);
|
||||||
orderBookFilter.setOfferConstraints(mockOrderBook.getRandomOfferConstraints());
|
orderBookFilter.setOfferConstraints(mockOrderBook.getRandomOfferConstraints());
|
||||||
|
|
||||||
OrderBookFilterTextItemBuilder.build(filterPane, "Bank transfer types: ", orderBookFilter.getOfferConstraints().getBankTransferTypes(), settings.getAllBankTransferTypes());
|
OrderBookFilterTextItemBuilder.build(filterPane, "Bank transfer types: ", orderBookFilter.getOfferConstraints().getBankTransferTypes(), settings.getAllBankTransferTypes());
|
||||||
OrderBookFilterTextItemBuilder.build(filterPane, "Countries: ", orderBookFilter.getOfferConstraints().getCountries(), settings.getAllCountries());
|
OrderBookFilterTextItemBuilder.build(filterPane, "Countries: ", orderBookFilter.getOfferConstraints().getCountries(), settings.getAllCountries());
|
||||||
OrderBookFilterTextItemBuilder.build(filterPane, "Languages: ", orderBookFilter.getOfferConstraints().getLanguages(), settings.getAllLanguages());
|
OrderBookFilterTextItemBuilder.build(filterPane, "Languages: ", orderBookFilter.getOfferConstraints().getLanguages(), settings.getAllLanguages());
|
||||||
OrderBookFilterTextItemBuilder.build(filterPane, "Collateral: ", Arrays.asList(String.valueOf(orderBookFilter.getOfferConstraints().getCollateral())), settings.getAllCollaterals());
|
OrderBookFilterTextItemBuilder.build(filterPane, "Collateral: ", Arrays.asList(String.valueOf(orderBookFilter.getOfferConstraints().getCollateral())), settings.getAllCollaterals());
|
||||||
OrderBookFilterTextItemBuilder.build(filterPane, "Arbitrator: ", Arrays.asList(orderBookFilter.getOfferConstraints().getArbitrator()), settings.getAllArbitrators());
|
OrderBookFilterTextItemBuilder.build(filterPane, "Arbitrator: ", Arrays.asList(orderBookFilter.getOfferConstraints().getArbitrator()), settings.getAllArbitrators());
|
||||||
}
|
}
|
||||||
|
|
||||||
private double textInputToNumber(String oldValue, String newValue)
|
private double textInputToNumber(String oldValue, String newValue)
|
||||||
{
|
{
|
||||||
//TODO use regex.... or custom textfield component
|
//TODO use regex.... or custom textfield component
|
||||||
double d = 0.0;
|
double d = 0.0;
|
||||||
if (!newValue.equals(""))
|
if (!newValue.equals(""))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat.getInstance(Settings.getLocale());
|
DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat.getInstance(Settings.getLocale());
|
||||||
d = decimalFormat.parse(newValue).doubleValue();
|
d = decimalFormat.parse(newValue).doubleValue();
|
||||||
} catch (ParseException e)
|
} catch (ParseException e)
|
||||||
{
|
{
|
||||||
amount.setText(oldValue);
|
amount.setText(oldValue);
|
||||||
d = Converter.convertToDouble(oldValue);
|
d = Converter.convertToDouble(oldValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateVolume()
|
private void updateVolume()
|
||||||
{
|
{
|
||||||
double a = textInputToNumber(amount.getText(), amount.getText());
|
double a = textInputToNumber(amount.getText(), amount.getText());
|
||||||
double p = textInputToNumber(price.getText(), price.getText());
|
double p = textInputToNumber(price.getText(), price.getText());
|
||||||
volume.setText(Formatter.formatPrice(a * p));
|
volume.setText(Formatter.formatPrice(a * p));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,436 +1,436 @@
|
||||||
package io.bitsquare.gui.trade.tradeprocess;
|
package io.bitsquare.gui.trade.tradeprocess;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import io.bitsquare.btc.BtcFormatter;
|
import io.bitsquare.btc.BtcFormatter;
|
||||||
import io.bitsquare.btc.Fees;
|
import io.bitsquare.btc.Fees;
|
||||||
import io.bitsquare.gui.IChildController;
|
import io.bitsquare.gui.IChildController;
|
||||||
import io.bitsquare.gui.INavigationController;
|
import io.bitsquare.gui.INavigationController;
|
||||||
import io.bitsquare.gui.components.VSpacer;
|
import io.bitsquare.gui.components.VSpacer;
|
||||||
import io.bitsquare.gui.components.processbar.ProcessStepBar;
|
import io.bitsquare.gui.components.processbar.ProcessStepBar;
|
||||||
import io.bitsquare.gui.components.processbar.ProcessStepItem;
|
import io.bitsquare.gui.components.processbar.ProcessStepItem;
|
||||||
import io.bitsquare.gui.util.Colors;
|
import io.bitsquare.gui.util.Colors;
|
||||||
import io.bitsquare.gui.util.Converter;
|
import io.bitsquare.gui.util.Converter;
|
||||||
import io.bitsquare.gui.util.Formatter;
|
import io.bitsquare.gui.util.Formatter;
|
||||||
import io.bitsquare.gui.util.Utils;
|
import io.bitsquare.gui.util.Utils;
|
||||||
import io.bitsquare.trade.*;
|
import io.bitsquare.trade.*;
|
||||||
import io.bitsquare.user.User;
|
import io.bitsquare.user.User;
|
||||||
import javafx.animation.AnimationTimer;
|
import javafx.animation.AnimationTimer;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
import javafx.scene.layout.AnchorPane;
|
import javafx.scene.layout.AnchorPane;
|
||||||
import javafx.scene.layout.GridPane;
|
import javafx.scene.layout.GridPane;
|
||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.layout.Pane;
|
||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
import org.controlsfx.dialog.Dialogs;
|
import org.controlsfx.dialog.Dialogs;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
public class TradeProcessController implements Initializable, IChildController
|
public class TradeProcessController implements Initializable, IChildController
|
||||||
{
|
{
|
||||||
private TradingFacade tradingFacade;
|
private TradingFacade tradingFacade;
|
||||||
private Offer offer;
|
private Offer offer;
|
||||||
private Trade trade;
|
private Trade trade;
|
||||||
private Contract contract;
|
private Contract contract;
|
||||||
|
|
||||||
private INavigationController navigationController;
|
private INavigationController navigationController;
|
||||||
private List<ProcessStepItem> processStepItems = new ArrayList();
|
private List<ProcessStepItem> processStepItems = new ArrayList();
|
||||||
private double requestedAmount;
|
private double requestedAmount;
|
||||||
|
|
||||||
private VBox vBox;
|
private VBox vBox;
|
||||||
private TitledPane offerDetailsTitlePane, contractTitlePane;
|
private TitledPane offerDetailsTitlePane, contractTitlePane;
|
||||||
private ProcessStepBar<String> processStepBar;
|
private ProcessStepBar<String> processStepBar;
|
||||||
private Button nextButton;
|
private Button nextButton;
|
||||||
private TextField amountTextField;
|
private TextField amountTextField;
|
||||||
private Label offererPubKeyLabel, offererAccountPrimaryID, offererAccountSecondaryIDLabel,
|
private Label offererPubKeyLabel, offererAccountPrimaryID, offererAccountSecondaryIDLabel,
|
||||||
offererAccountHolderNameLabel, feedbackLabel, infoLabel, totalLabel, volumeLabel, totalToPayLabel,
|
offererAccountHolderNameLabel, feedbackLabel, infoLabel, totalLabel, volumeLabel, totalToPayLabel,
|
||||||
totalToReceiveLabel, collateralLabel1, collateralLabel2, amountLabel;
|
totalToReceiveLabel, collateralLabel1, collateralLabel2, amountLabel;
|
||||||
private Pane progressPane;
|
private Pane progressPane;
|
||||||
private ProgressBar progressBar;
|
private ProgressBar progressBar;
|
||||||
private ProgressIndicator progressIndicator;
|
private ProgressIndicator progressIndicator;
|
||||||
|
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public AnchorPane rootContainer;
|
public AnchorPane rootContainer;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public TradeProcessController(TradingFacade tradingFacade)
|
public TradeProcessController(TradingFacade tradingFacade)
|
||||||
{
|
{
|
||||||
this.tradingFacade = tradingFacade;
|
this.tradingFacade = tradingFacade;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setNavigationController(INavigationController navigationController)
|
public void setNavigationController(INavigationController navigationController)
|
||||||
{
|
{
|
||||||
this.navigationController = navigationController;
|
this.navigationController = navigationController;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL url, ResourceBundle rb)
|
public void initialize(URL url, ResourceBundle rb)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initView(Offer offer, double requestedAmount)
|
public void initView(Offer offer, double requestedAmount)
|
||||||
{
|
{
|
||||||
this.offer = offer;
|
this.offer = offer;
|
||||||
this.requestedAmount = requestedAmount;
|
this.requestedAmount = requestedAmount;
|
||||||
|
|
||||||
trade = tradingFacade.createNewTrade(offer);
|
trade = tradingFacade.createNewTrade(offer);
|
||||||
trade.setRequestedAmount(requestedAmount);
|
trade.setRequestedAmount(requestedAmount);
|
||||||
contract = tradingFacade.createNewContract(trade);
|
contract = tradingFacade.createNewContract(trade);
|
||||||
|
|
||||||
processStepItems.add(new ProcessStepItem(takerIsSelling() ? "Sell BTC" : "Buy BTC", Colors.BLUE));
|
processStepItems.add(new ProcessStepItem(takerIsSelling() ? "Sell BTC" : "Buy BTC", Colors.BLUE));
|
||||||
processStepItems.add(new ProcessStepItem("Bank transfer", Colors.BLUE));
|
processStepItems.add(new ProcessStepItem("Bank transfer", Colors.BLUE));
|
||||||
processStepItems.add(new ProcessStepItem("Completed", Colors.BLUE));
|
processStepItems.add(new ProcessStepItem("Completed", Colors.BLUE));
|
||||||
processStepBar = new ProcessStepBar(processStepItems);
|
processStepBar = new ProcessStepBar(processStepItems);
|
||||||
|
|
||||||
buildStep1();
|
buildStep1();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void trade()
|
private void trade()
|
||||||
{
|
{
|
||||||
double requestedAmount = Converter.convertToDouble(amountTextField.getText());
|
double requestedAmount = Converter.convertToDouble(amountTextField.getText());
|
||||||
if (requestedAmount <= offer.getAmount() && requestedAmount >= offer.getMinAmount())
|
if (requestedAmount <= offer.getAmount() && requestedAmount >= offer.getMinAmount())
|
||||||
{
|
{
|
||||||
amountTextField.setEditable(false);
|
amountTextField.setEditable(false);
|
||||||
trade.setRequestedAmount(requestedAmount);
|
trade.setRequestedAmount(requestedAmount);
|
||||||
|
|
||||||
vBox.getChildren().remove(nextButton);
|
vBox.getChildren().remove(nextButton);
|
||||||
AnchorPane.setTopAnchor(contractTitlePane, 350.0);
|
AnchorPane.setTopAnchor(contractTitlePane, 350.0);
|
||||||
|
|
||||||
progressBar = new ProgressBar();
|
progressBar = new ProgressBar();
|
||||||
progressBar.setProgress(0.0);
|
progressBar.setProgress(0.0);
|
||||||
progressBar.setPrefWidth(200);
|
progressBar.setPrefWidth(200);
|
||||||
progressBar.relocate(10, 10);
|
progressBar.relocate(10, 10);
|
||||||
|
|
||||||
progressIndicator = new ProgressIndicator();
|
progressIndicator = new ProgressIndicator();
|
||||||
progressIndicator.setProgress(-1.0);
|
progressIndicator.setProgress(-1.0);
|
||||||
progressIndicator.setPrefSize(20, 20);
|
progressIndicator.setPrefSize(20, 20);
|
||||||
progressIndicator.relocate(220, 10);
|
progressIndicator.relocate(220, 10);
|
||||||
|
|
||||||
feedbackLabel = new Label();
|
feedbackLabel = new Label();
|
||||||
feedbackLabel.setPadding(new Insets(-10, 0, 0, 0));
|
feedbackLabel.setPadding(new Insets(-10, 0, 0, 0));
|
||||||
feedbackLabel.setId("feedback-text");
|
feedbackLabel.setId("feedback-text");
|
||||||
feedbackLabel.relocate(10, 50);
|
feedbackLabel.relocate(10, 50);
|
||||||
|
|
||||||
progressPane = new Pane();
|
progressPane = new Pane();
|
||||||
progressPane.getChildren().addAll(progressBar, progressIndicator, feedbackLabel);
|
progressPane.getChildren().addAll(progressBar, progressIndicator, feedbackLabel);
|
||||||
|
|
||||||
vBox.getChildren().add(progressPane);
|
vBox.getChildren().add(progressPane);
|
||||||
|
|
||||||
sendTakeOfferRequest();
|
sendTakeOfferRequest();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Dialogs.create()
|
Dialogs.create()
|
||||||
.title("Your input is not valid")
|
.title("Your input is not valid")
|
||||||
.message("The requested amount you entered is outside of the range of the offered amount.")
|
.message("The requested amount you entered is outside of the range of the offered amount.")
|
||||||
.nativeTitleBar()
|
.nativeTitleBar()
|
||||||
.lightweight()
|
.lightweight()
|
||||||
.showError();
|
.showError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Payment Process
|
// Payment Process
|
||||||
private void sendTakeOfferRequest()
|
private void sendTakeOfferRequest()
|
||||||
{
|
{
|
||||||
tradingFacade.sendTakeOfferRequest(trade);
|
tradingFacade.sendTakeOfferRequest(trade);
|
||||||
feedbackLabel.setText("Request take offer confirmation from peer.");
|
feedbackLabel.setText("Request take offer confirmation from peer.");
|
||||||
Utils.setTimeout(500, (AnimationTimer animationTimer) -> {
|
Utils.setTimeout(500, (AnimationTimer animationTimer) -> {
|
||||||
onTakeOfferRequestConfirmed();
|
onTakeOfferRequestConfirmed();
|
||||||
progressBar.setProgress(1.0 / 3.0);
|
progressBar.setProgress(1.0 / 3.0);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onTakeOfferRequestConfirmed()
|
private void onTakeOfferRequestConfirmed()
|
||||||
{
|
{
|
||||||
tradingFacade.payOfferFee(trade);
|
tradingFacade.payOfferFee(trade);
|
||||||
|
|
||||||
feedbackLabel.setText("Request offer fee payment confirmation from peer.");
|
feedbackLabel.setText("Request offer fee payment confirmation from peer.");
|
||||||
Utils.setTimeout(500, (AnimationTimer animationTimer) -> {
|
Utils.setTimeout(500, (AnimationTimer animationTimer) -> {
|
||||||
onOfferFeePaymentConfirmed();
|
onOfferFeePaymentConfirmed();
|
||||||
progressBar.setProgress(2.0 / 3.0);
|
progressBar.setProgress(2.0 / 3.0);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onOfferFeePaymentConfirmed()
|
private void onOfferFeePaymentConfirmed()
|
||||||
{
|
{
|
||||||
tradingFacade.requestOffererDetailData();
|
tradingFacade.requestOffererDetailData();
|
||||||
feedbackLabel.setText("Request detail data from peer.");
|
feedbackLabel.setText("Request detail data from peer.");
|
||||||
Utils.setTimeout(500, (AnimationTimer animationTimer) -> {
|
Utils.setTimeout(500, (AnimationTimer animationTimer) -> {
|
||||||
onUserDetailsReceived();
|
onUserDetailsReceived();
|
||||||
progressBar.setProgress(1.0);
|
progressBar.setProgress(1.0);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onUserDetailsReceived()
|
private void onUserDetailsReceived()
|
||||||
{
|
{
|
||||||
tradingFacade.signContract(contract);
|
tradingFacade.signContract(contract);
|
||||||
tradingFacade.payToDepositTx(trade);
|
tradingFacade.payToDepositTx(trade);
|
||||||
|
|
||||||
buildWaitBankTransfer();
|
buildWaitBankTransfer();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void buildWaitBankTransfer()
|
private void buildWaitBankTransfer()
|
||||||
{
|
{
|
||||||
processStepBar.next();
|
processStepBar.next();
|
||||||
|
|
||||||
vBox.getChildren().remove(progressPane);
|
vBox.getChildren().remove(progressPane);
|
||||||
vBox.getChildren().remove(offerDetailsTitlePane);
|
vBox.getChildren().remove(offerDetailsTitlePane);
|
||||||
vBox.getChildren().remove(nextButton);
|
vBox.getChildren().remove(nextButton);
|
||||||
rootContainer.getChildren().remove(contractTitlePane);
|
rootContainer.getChildren().remove(contractTitlePane);
|
||||||
|
|
||||||
infoLabel = new Label("Wait for Bank transfer.");
|
infoLabel = new Label("Wait for Bank transfer.");
|
||||||
vBox.getChildren().addAll(infoLabel);
|
vBox.getChildren().addAll(infoLabel);
|
||||||
|
|
||||||
Utils.setTimeout(2000, (AnimationTimer animationTimer) -> {
|
Utils.setTimeout(2000, (AnimationTimer animationTimer) -> {
|
||||||
onBankTransferInited();
|
onBankTransferInited();
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onBankTransferInited()
|
private void onBankTransferInited()
|
||||||
{
|
{
|
||||||
infoLabel.setText("Bank transfer has been inited.\nCheck your bank account and continue when you have received the money.\n");
|
infoLabel.setText("Bank transfer has been inited.\nCheck your bank account and continue when you have received the money.\n");
|
||||||
nextButton.setText("Money received on Bank account");
|
nextButton.setText("Money received on Bank account");
|
||||||
nextButton.setOnAction(e -> releaseBTC());
|
nextButton.setOnAction(e -> releaseBTC());
|
||||||
vBox.getChildren().add(nextButton);
|
vBox.getChildren().add(nextButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void releaseBTC()
|
private void releaseBTC()
|
||||||
{
|
{
|
||||||
processStepBar.next();
|
processStepBar.next();
|
||||||
tradingFacade.releaseBTC(trade);
|
tradingFacade.releaseBTC(trade);
|
||||||
|
|
||||||
vBox.getChildren().remove(infoLabel);
|
vBox.getChildren().remove(infoLabel);
|
||||||
|
|
||||||
nextButton.setText("Close");
|
nextButton.setText("Close");
|
||||||
nextButton.setOnAction(e -> close());
|
nextButton.setOnAction(e -> close());
|
||||||
|
|
||||||
GridPane summaryGridPane = new GridPane();
|
GridPane summaryGridPane = new GridPane();
|
||||||
int row = 0;
|
int row = 0;
|
||||||
summaryGridPane.setVgap(5);
|
summaryGridPane.setVgap(5);
|
||||||
summaryGridPane.setHgap(5);
|
summaryGridPane.setHgap(5);
|
||||||
summaryGridPane.setPadding(new Insets(5, 5, 5, 5));
|
summaryGridPane.setPadding(new Insets(5, 5, 5, 5));
|
||||||
|
|
||||||
addLabel(summaryGridPane, "You have payed:", getTotalToPay(), ++row);
|
addLabel(summaryGridPane, "You have payed:", getTotalToPay(), ++row);
|
||||||
addLabel(summaryGridPane, "You have received:\n ", getTotalToReceive(), ++row);
|
addLabel(summaryGridPane, "You have received:\n ", getTotalToReceive(), ++row);
|
||||||
|
|
||||||
TitledPane summaryTitlePane = new TitledPane("Trade summary:", summaryGridPane);
|
TitledPane summaryTitlePane = new TitledPane("Trade summary:", summaryGridPane);
|
||||||
summaryTitlePane.setCollapsible(false);
|
summaryTitlePane.setCollapsible(false);
|
||||||
vBox.getChildren().add(2, summaryTitlePane);
|
vBox.getChildren().add(2, summaryTitlePane);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void close()
|
private void close()
|
||||||
{
|
{
|
||||||
TabPane tabPane = ((TabPane) (rootContainer.getParent().getParent()));
|
TabPane tabPane = ((TabPane) (rootContainer.getParent().getParent()));
|
||||||
tabPane.getTabs().remove(tabPane.getSelectionModel().getSelectedItem());
|
tabPane.getTabs().remove(tabPane.getSelectionModel().getSelectedItem());
|
||||||
|
|
||||||
navigationController.navigateToView(INavigationController.TRADE__ORDER_BOOK, "Orderbook");
|
navigationController.navigateToView(INavigationController.TRADE__ORDER_BOOK, "Orderbook");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void buildStep1()
|
private void buildStep1()
|
||||||
{
|
{
|
||||||
OfferConstraints offerConstraints = offer.getOfferConstraints();
|
OfferConstraints offerConstraints = offer.getOfferConstraints();
|
||||||
User taker = contract.getTaker();
|
User taker = contract.getTaker();
|
||||||
User offerer = contract.getOfferer();
|
User offerer = contract.getOfferer();
|
||||||
|
|
||||||
GridPane offerDetailsGridPane = new GridPane();
|
GridPane offerDetailsGridPane = new GridPane();
|
||||||
int row = 0;
|
int row = 0;
|
||||||
offerDetailsGridPane.setVgap(5);
|
offerDetailsGridPane.setVgap(5);
|
||||||
offerDetailsGridPane.setHgap(5);
|
offerDetailsGridPane.setHgap(5);
|
||||||
offerDetailsGridPane.setPadding(new Insets(5, 5, 5, 5));
|
offerDetailsGridPane.setPadding(new Insets(5, 5, 5, 5));
|
||||||
|
|
||||||
amountTextField = addInputField(offerDetailsGridPane, "Amount (BTC):", Formatter.formatAmount(getAmount()), ++row);
|
amountTextField = addInputField(offerDetailsGridPane, "Amount (BTC):", Formatter.formatAmount(getAmount()), ++row);
|
||||||
amountTextField.textProperty().addListener(e -> {
|
amountTextField.textProperty().addListener(e -> {
|
||||||
setTotal();
|
setTotal();
|
||||||
setVolume();
|
setVolume();
|
||||||
setCollateral();
|
setCollateral();
|
||||||
totalToPayLabel.setText(getTotalToPay());
|
totalToPayLabel.setText(getTotalToPay());
|
||||||
totalToReceiveLabel.setText(getTotalToReceive());
|
totalToReceiveLabel.setText(getTotalToReceive());
|
||||||
amountLabel.setText(amountTextField.getText());
|
amountLabel.setText(amountTextField.getText());
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
offerDetailsGridPane.add(new Label("(" + offer.getAmount() + "BTC - " + offer.getMinAmount() + "BTC)"), 2, row);
|
offerDetailsGridPane.add(new Label("(" + offer.getAmount() + "BTC - " + offer.getMinAmount() + "BTC)"), 2, row);
|
||||||
|
|
||||||
addLabel(offerDetailsGridPane, "Price:", Formatter.formatPriceWithCurrencyPair(offer.getPrice(), offer.getCurrency()), ++row);
|
addLabel(offerDetailsGridPane, "Price:", Formatter.formatPriceWithCurrencyPair(offer.getPrice(), offer.getCurrency()), ++row);
|
||||||
totalLabel = addLabel(offerDetailsGridPane, "Total:", "", ++row);
|
totalLabel = addLabel(offerDetailsGridPane, "Total:", "", ++row);
|
||||||
setTotal();
|
setTotal();
|
||||||
collateralLabel1 = addLabel(offerDetailsGridPane, "Collateral:", Formatter.formatCollateral(offer.getOfferConstraints().getCollateral(), getAmount()), ++row);
|
collateralLabel1 = addLabel(offerDetailsGridPane, "Collateral:", Formatter.formatCollateral(offer.getOfferConstraints().getCollateral(), getAmount()), ++row);
|
||||||
addLabel(offerDetailsGridPane, "Offer fee:", Formatter.formatSatoshis(Fees.OFFER_CREATION_FEE, true), ++row);
|
addLabel(offerDetailsGridPane, "Offer fee:", Formatter.formatSatoshis(Fees.OFFER_CREATION_FEE, true), ++row);
|
||||||
addVSpacer(offerDetailsGridPane, ++row);
|
addVSpacer(offerDetailsGridPane, ++row);
|
||||||
totalToPayLabel = addLabel(offerDetailsGridPane, "You pay:", getTotalToPay(), ++row);
|
totalToPayLabel = addLabel(offerDetailsGridPane, "You pay:", getTotalToPay(), ++row);
|
||||||
totalToReceiveLabel = addLabel(offerDetailsGridPane, "You receive:\n ", getTotalToReceive(), ++row);
|
totalToReceiveLabel = addLabel(offerDetailsGridPane, "You receive:\n ", getTotalToReceive(), ++row);
|
||||||
|
|
||||||
offerDetailsTitlePane = new TitledPane(takerIsSelling() ? "Sell Bitcoin" : "Buy Bitcoin", offerDetailsGridPane);
|
offerDetailsTitlePane = new TitledPane(takerIsSelling() ? "Sell Bitcoin" : "Buy Bitcoin", offerDetailsGridPane);
|
||||||
offerDetailsTitlePane.setCollapsible(false);
|
offerDetailsTitlePane.setCollapsible(false);
|
||||||
|
|
||||||
nextButton = new Button(processStepItems.get(0).getLabel());
|
nextButton = new Button(processStepItems.get(0).getLabel());
|
||||||
nextButton.setDefaultButton(true);
|
nextButton.setDefaultButton(true);
|
||||||
nextButton.setOnAction(e -> trade());
|
nextButton.setOnAction(e -> trade());
|
||||||
|
|
||||||
GridPane contractGridPane = new GridPane();
|
GridPane contractGridPane = new GridPane();
|
||||||
contractGridPane.setVgap(5);
|
contractGridPane.setVgap(5);
|
||||||
contractGridPane.setHgap(5);
|
contractGridPane.setHgap(5);
|
||||||
contractGridPane.setPadding(new Insets(5, 5, 5, 5));
|
contractGridPane.setPadding(new Insets(5, 5, 5, 5));
|
||||||
row = 0;
|
row = 0;
|
||||||
addHeaderLabel(contractGridPane, "Offer details:", row);
|
addHeaderLabel(contractGridPane, "Offer details:", row);
|
||||||
addLabel(contractGridPane, "Offer ID:", offer.getUid().toString(), ++row);
|
addLabel(contractGridPane, "Offer ID:", offer.getUid().toString(), ++row);
|
||||||
addLabel(contractGridPane, "Offer type:", Formatter.formatDirection((offer.getDirection() == Direction.BUY ? Direction.SELL : Direction.BUY), false), ++row);
|
addLabel(contractGridPane, "Offer type:", Formatter.formatDirection((offer.getDirection() == Direction.BUY ? Direction.SELL : Direction.BUY), false), ++row);
|
||||||
amountLabel = addLabel(contractGridPane, "Amount:", Formatter.formatAmount(getAmount()), ++row);
|
amountLabel = addLabel(contractGridPane, "Amount:", Formatter.formatAmount(getAmount()), ++row);
|
||||||
volumeLabel = addLabel(contractGridPane, "Volume:", "", ++row);
|
volumeLabel = addLabel(contractGridPane, "Volume:", "", ++row);
|
||||||
setVolume();
|
setVolume();
|
||||||
addLabel(contractGridPane, "Price:", Formatter.formatPriceWithCurrencyPair(offer.getPrice(), offer.getCurrency()), ++row);
|
addLabel(contractGridPane, "Price:", Formatter.formatPriceWithCurrencyPair(offer.getPrice(), offer.getCurrency()), ++row);
|
||||||
collateralLabel2 = addLabel(contractGridPane, "Collateral:", "", ++row);
|
collateralLabel2 = addLabel(contractGridPane, "Collateral:", "", ++row);
|
||||||
setCollateral();
|
setCollateral();
|
||||||
addLabel(contractGridPane, "Language:", Formatter.formatList(offerConstraints.getLanguages()), ++row);
|
addLabel(contractGridPane, "Language:", Formatter.formatList(offerConstraints.getLanguages()), ++row);
|
||||||
addLabel(contractGridPane, "Arbitrator:", offerConstraints.getArbitrator(), ++row);
|
addLabel(contractGridPane, "Arbitrator:", offerConstraints.getArbitrator(), ++row);
|
||||||
// addLabel(contractGridPane, "Identity verification:", Formatter.formatList(offerConstraints.getIdentityVerifications()), ++row);
|
// addLabel(contractGridPane, "Identity verification:", Formatter.formatList(offerConstraints.getIdentityVerifications()), ++row);
|
||||||
addLabel(contractGridPane, "Bank transfer reference ID:", "Purchase xyz 01.04.2014", ++row);
|
addLabel(contractGridPane, "Bank transfer reference ID:", "Purchase xyz 01.04.2014", ++row);
|
||||||
|
|
||||||
addVSpacer(contractGridPane, ++row);
|
addVSpacer(contractGridPane, ++row);
|
||||||
addHeaderLabel(contractGridPane, "Offerer data:", ++row);
|
addHeaderLabel(contractGridPane, "Offerer data:", ++row);
|
||||||
addLabel(contractGridPane, "Account ID:", offerer.getAccountID(), ++row);
|
addLabel(contractGridPane, "Account ID:", offerer.getAccountID(), ++row);
|
||||||
addLabel(contractGridPane, "Messaging ID:", offerer.getMessageID(), ++row);
|
addLabel(contractGridPane, "Messaging ID:", offerer.getMessageID(), ++row);
|
||||||
addLabel(contractGridPane, "Country:", offerer.getCountry(), ++row);
|
addLabel(contractGridPane, "Country:", offerer.getCountry(), ++row);
|
||||||
offererPubKeyLabel = addLabel(contractGridPane, "Payment public key:", contract.getOffererPubKey(), ++row);
|
offererPubKeyLabel = addLabel(contractGridPane, "Payment public key:", contract.getOffererPubKey(), ++row);
|
||||||
addLabel(contractGridPane, "Bank transfer type:", offerer.getBankDetails().getBankTransferType(), ++row);
|
addLabel(contractGridPane, "Bank transfer type:", offerer.getBankDetails().getBankTransferType(), ++row);
|
||||||
offererAccountPrimaryID = addLabel(contractGridPane, "Bank account IBAN:", offerer.getBankDetails().getAccountPrimaryID(), ++row);
|
offererAccountPrimaryID = addLabel(contractGridPane, "Bank account IBAN:", offerer.getBankDetails().getAccountPrimaryID(), ++row);
|
||||||
offererAccountSecondaryIDLabel = addLabel(contractGridPane, "Bank account BIC:", offerer.getBankDetails().getAccountSecondaryID(), ++row);
|
offererAccountSecondaryIDLabel = addLabel(contractGridPane, "Bank account BIC:", offerer.getBankDetails().getAccountSecondaryID(), ++row);
|
||||||
offererAccountHolderNameLabel = addLabel(contractGridPane, "Bank account holder:", offerer.getBankDetails().getAccountHolderName(), ++row);
|
offererAccountHolderNameLabel = addLabel(contractGridPane, "Bank account holder:", offerer.getBankDetails().getAccountHolderName(), ++row);
|
||||||
|
|
||||||
addVSpacer(contractGridPane, ++row);
|
addVSpacer(contractGridPane, ++row);
|
||||||
addHeaderLabel(contractGridPane, "Offer taker data:", ++row);
|
addHeaderLabel(contractGridPane, "Offer taker data:", ++row);
|
||||||
addLabel(contractGridPane, "Account ID:", taker.getAccountID(), ++row);
|
addLabel(contractGridPane, "Account ID:", taker.getAccountID(), ++row);
|
||||||
addLabel(contractGridPane, "Messaging ID:", taker.getMessageID(), ++row);
|
addLabel(contractGridPane, "Messaging ID:", taker.getMessageID(), ++row);
|
||||||
addLabel(contractGridPane, "Country:", taker.getCountry(), ++row);
|
addLabel(contractGridPane, "Country:", taker.getCountry(), ++row);
|
||||||
addLabel(contractGridPane, "Payment public key:", contract.getTakerPubKey(), ++row);
|
addLabel(contractGridPane, "Payment public key:", contract.getTakerPubKey(), ++row);
|
||||||
addLabel(contractGridPane, "Bank transfer type:", taker.getBankDetails().getBankTransferType(), ++row);
|
addLabel(contractGridPane, "Bank transfer type:", taker.getBankDetails().getBankTransferType(), ++row);
|
||||||
addLabel(contractGridPane, "Bank account IBAN:", taker.getBankDetails().getAccountPrimaryID(), ++row);
|
addLabel(contractGridPane, "Bank account IBAN:", taker.getBankDetails().getAccountPrimaryID(), ++row);
|
||||||
addLabel(contractGridPane, "Bank account BIC:", taker.getBankDetails().getAccountSecondaryID(), ++row);
|
addLabel(contractGridPane, "Bank account BIC:", taker.getBankDetails().getAccountSecondaryID(), ++row);
|
||||||
addLabel(contractGridPane, "Bank account holder:", taker.getBankDetails().getAccountHolderName(), ++row);
|
addLabel(contractGridPane, "Bank account holder:", taker.getBankDetails().getAccountHolderName(), ++row);
|
||||||
|
|
||||||
ScrollPane scrollPane = new ScrollPane();
|
ScrollPane scrollPane = new ScrollPane();
|
||||||
scrollPane.setContent(contractGridPane);
|
scrollPane.setContent(contractGridPane);
|
||||||
|
|
||||||
contractTitlePane = new TitledPane("Contract", scrollPane);
|
contractTitlePane = new TitledPane("Contract", scrollPane);
|
||||||
contractTitlePane.setCollapsible(false);
|
contractTitlePane.setCollapsible(false);
|
||||||
AnchorPane.setLeftAnchor(contractTitlePane, 10.0);
|
AnchorPane.setLeftAnchor(contractTitlePane, 10.0);
|
||||||
AnchorPane.setRightAnchor(contractTitlePane, 10.0);
|
AnchorPane.setRightAnchor(contractTitlePane, 10.0);
|
||||||
AnchorPane.setTopAnchor(contractTitlePane, 324.0);
|
AnchorPane.setTopAnchor(contractTitlePane, 324.0);
|
||||||
AnchorPane.setBottomAnchor(contractTitlePane, 10.0);
|
AnchorPane.setBottomAnchor(contractTitlePane, 10.0);
|
||||||
|
|
||||||
vBox = new VBox();
|
vBox = new VBox();
|
||||||
AnchorPane.setLeftAnchor(vBox, 10.0);
|
AnchorPane.setLeftAnchor(vBox, 10.0);
|
||||||
AnchorPane.setRightAnchor(vBox, 10.0);
|
AnchorPane.setRightAnchor(vBox, 10.0);
|
||||||
AnchorPane.setTopAnchor(vBox, 10.0);
|
AnchorPane.setTopAnchor(vBox, 10.0);
|
||||||
vBox.setSpacing(10);
|
vBox.setSpacing(10);
|
||||||
|
|
||||||
vBox.getChildren().addAll(processStepBar, new VSpacer(5), offerDetailsTitlePane, nextButton);
|
vBox.getChildren().addAll(processStepBar, new VSpacer(5), offerDetailsTitlePane, nextButton);
|
||||||
rootContainer.getChildren().addAll(vBox, contractTitlePane);
|
rootContainer.getChildren().addAll(vBox, contractTitlePane);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Label addLabel(GridPane gridPane, String title, String value, int row)
|
private Label addLabel(GridPane gridPane, String title, String value, int row)
|
||||||
{
|
{
|
||||||
gridPane.add(new Label(title), 0, row);
|
gridPane.add(new Label(title), 0, row);
|
||||||
Label valueLabel = new Label(value);
|
Label valueLabel = new Label(value);
|
||||||
gridPane.add(valueLabel, 1, row);
|
gridPane.add(valueLabel, 1, row);
|
||||||
return valueLabel;
|
return valueLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addHeaderLabel(GridPane gridPane, String title, int row)
|
private void addHeaderLabel(GridPane gridPane, String title, int row)
|
||||||
{
|
{
|
||||||
Label headerLabel = new Label(title);
|
Label headerLabel = new Label(title);
|
||||||
headerLabel.setId("form-header-text");
|
headerLabel.setId("form-header-text");
|
||||||
gridPane.add(headerLabel, 0, row);
|
gridPane.add(headerLabel, 0, row);
|
||||||
}
|
}
|
||||||
|
|
||||||
private TextField addInputField(GridPane gridPane, String title, String value, int row)
|
private TextField addInputField(GridPane gridPane, String title, String value, int row)
|
||||||
{
|
{
|
||||||
gridPane.add(new Label(title), 0, row);
|
gridPane.add(new Label(title), 0, row);
|
||||||
TextField textField = new TextField(value);
|
TextField textField = new TextField(value);
|
||||||
gridPane.add(textField, 1, row);
|
gridPane.add(textField, 1, row);
|
||||||
return textField;
|
return textField;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addVSpacer(GridPane gridPane, int row)
|
private void addVSpacer(GridPane gridPane, int row)
|
||||||
{
|
{
|
||||||
gridPane.add(new VSpacer(10), 0, row);
|
gridPane.add(new VSpacer(10), 0, row);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void setTotal()
|
private void setTotal()
|
||||||
{
|
{
|
||||||
totalLabel.setText(Formatter.formatVolume(getVolume()));
|
totalLabel.setText(Formatter.formatVolume(getVolume()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setVolume()
|
private void setVolume()
|
||||||
{
|
{
|
||||||
totalLabel.setText(Formatter.formatVolume(getVolume(), offer.getCurrency()));
|
totalLabel.setText(Formatter.formatVolume(getVolume(), offer.getCurrency()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean takerIsSelling()
|
private boolean takerIsSelling()
|
||||||
{
|
{
|
||||||
return offer.getDirection() == Direction.BUY;
|
return offer.getDirection() == Direction.BUY;
|
||||||
}
|
}
|
||||||
|
|
||||||
private double getVolume()
|
private double getVolume()
|
||||||
{
|
{
|
||||||
return offer.getPrice() * Converter.convertToDouble(amountTextField.getText());
|
return offer.getPrice() * Converter.convertToDouble(amountTextField.getText());
|
||||||
}
|
}
|
||||||
|
|
||||||
private double getAmount()
|
private double getAmount()
|
||||||
{
|
{
|
||||||
return requestedAmount > 0 ? requestedAmount : offer.getAmount();
|
return requestedAmount > 0 ? requestedAmount : offer.getAmount();
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getTotalToPay()
|
private String getTotalToPay()
|
||||||
{
|
{
|
||||||
String result = "";
|
String result = "";
|
||||||
if (takerIsSelling())
|
if (takerIsSelling())
|
||||||
{
|
{
|
||||||
double btcValue = Converter.convertToDouble(amountTextField.getText()) + BtcFormatter.satoshiToBTC(Fees.OFFER_CREATION_FEE) +
|
double btcValue = Converter.convertToDouble(amountTextField.getText()) + BtcFormatter.satoshiToBTC(Fees.OFFER_CREATION_FEE) +
|
||||||
offer.getOfferConstraints().getCollateral() * Converter.convertToDouble(amountTextField.getText());
|
offer.getOfferConstraints().getCollateral() * Converter.convertToDouble(amountTextField.getText());
|
||||||
result = Formatter.formatAmount(btcValue, true, true);
|
result = Formatter.formatAmount(btcValue, true, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
double btcValue = BtcFormatter.satoshiToBTC(Fees.OFFER_CREATION_FEE) + offer.getOfferConstraints().getCollateral() * Converter.convertToDouble(amountTextField.getText());
|
double btcValue = BtcFormatter.satoshiToBTC(Fees.OFFER_CREATION_FEE) + offer.getOfferConstraints().getCollateral() * Converter.convertToDouble(amountTextField.getText());
|
||||||
result = Formatter.formatAmount(btcValue, true, true) + "\n" + Formatter.formatVolume(getVolume(), offer.getCurrency());
|
result = Formatter.formatAmount(btcValue, true, true) + "\n" + Formatter.formatVolume(getVolume(), offer.getCurrency());
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getTotalToReceive()
|
private String getTotalToReceive()
|
||||||
{
|
{
|
||||||
String result = "";
|
String result = "";
|
||||||
if (takerIsSelling())
|
if (takerIsSelling())
|
||||||
{
|
{
|
||||||
double btcValue = offer.getOfferConstraints().getCollateral() * Converter.convertToDouble(amountTextField.getText());
|
double btcValue = offer.getOfferConstraints().getCollateral() * Converter.convertToDouble(amountTextField.getText());
|
||||||
result = Formatter.formatAmount(btcValue, true, true) + "\n" + Formatter.formatVolume(getVolume(), offer.getCurrency());
|
result = Formatter.formatAmount(btcValue, true, true) + "\n" + Formatter.formatVolume(getVolume(), offer.getCurrency());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
double btcValue = Converter.convertToDouble(amountTextField.getText()) +
|
double btcValue = Converter.convertToDouble(amountTextField.getText()) +
|
||||||
offer.getOfferConstraints().getCollateral() * Converter.convertToDouble(amountTextField.getText());
|
offer.getOfferConstraints().getCollateral() * Converter.convertToDouble(amountTextField.getText());
|
||||||
result = Formatter.formatAmount(btcValue, true, true);
|
result = Formatter.formatAmount(btcValue, true, true);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCollateral()
|
public void setCollateral()
|
||||||
{
|
{
|
||||||
String value = Formatter.formatCollateral(offer.getOfferConstraints().getCollateral(), Converter.convertToDouble(amountTextField.getText()));
|
String value = Formatter.formatCollateral(offer.getOfferConstraints().getCollateral(), Converter.convertToDouble(amountTextField.getText()));
|
||||||
collateralLabel1.setText(value);
|
collateralLabel1.setText(value);
|
||||||
collateralLabel2.setText(value);
|
collateralLabel2.setText(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Manifest-Version: 1.0
|
Manifest-Version: 1.0
|
||||||
Archiver-Version: Plexus Archiver
|
Archiver-Version: Plexus Archiver
|
||||||
Created-By: Apache Maven
|
Created-By: Apache Maven
|
||||||
Built-By: Manfred Karrer
|
Built-By: Manfred Karrer
|
||||||
Build-Jdk: 1.8.0
|
Build-Jdk: 1.8.0
|
||||||
Main-Class: io.bitsquare.BitSquare
|
Main-Class: io.bitsquare.BitSquare
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue