Archived
0

- add localization support

- add english language
This commit is contained in:
iMoHax
2014-08-27 14:43:27 +04:00
parent c011ea05d5
commit 9d58026568
22 changed files with 502 additions and 142 deletions

View File

@@ -9,6 +9,7 @@ import org.controlsfx.dialog.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.trader.controllers.Screeners;
import ru.trader.view.support.Localization;
import javax.xml.stream.XMLStreamException;
import java.io.File;
@@ -17,28 +18,16 @@ import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Locale;
public class Main extends Application {
private final static Logger LOG = LoggerFactory.getLogger(Main.class);
private static Stage primaryStage;
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Trader");
primaryStage.setMinHeight(590);
primaryStage.setScene(new Scene(Screeners.newScreeners(Main.class.getResource("/view/main.fxml"),getUrl("style.css").toExternalForm())));
primaryStage.setOnCloseRequest((we)->{
try {
if (World.getMarket().isChange()){
Action res = Screeners.showConfirm("Изменения не были сохранены, сохранить?");
if (res == Dialog.Actions.YES) World.save();
else if (res == Dialog.Actions.CANCEL) we.consume();
}
Screeners.closeAll();
} catch (FileNotFoundException | UnsupportedEncodingException | XMLStreamException e) {
LOG.error("Ошибка при сохранении",e);
Screeners.showException(e);
}
});
Main.primaryStage = primaryStage;
loadMainScene();
loadResources();
primaryStage.show();
}
@@ -61,6 +50,34 @@ public class Main extends Application {
}
public static void changeLocale(Locale locale) throws IOException {
Localization.setLocale(locale);
primaryStage.hide();
loadMainScene();
loadResources();
primaryStage.show();
}
private static void loadMainScene() throws IOException {
primaryStage.setTitle(Localization.getString("main.title"));
primaryStage.setMinHeight(590);
primaryStage.setScene(new Scene(Screeners.newScreeners(Main.class.getResource("/view/main.fxml"),getUrl("style.css").toExternalForm())));
primaryStage.setOnCloseRequest((we)->{
try {
if (World.getMarket().isChange()){
Action res = Screeners.showConfirm(Localization.getString("dialogs.save"));
if (res == Dialog.Actions.YES) World.save();
else if (res == Dialog.Actions.CANCEL) we.consume();
}
Screeners.closeAll();
} catch (FileNotFoundException | UnsupportedEncodingException | XMLStreamException e) {
LOG.error("Ошибка при сохранении",e);
Screeners.showException(e);
}
});
}
private static void loadResources() throws IOException {
Screeners.loadItemDescStage(getUrl(("itemDesc.fxml")));
Screeners.loadVEditorStage(getUrl(("vEditor.fxml")));

View File

@@ -3,22 +3,29 @@ package ru.trader.controllers;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Menu;
import javafx.scene.control.RadioMenuItem;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.BorderPane;
import javafx.stage.FileChooser;
import org.controlsfx.dialog.Dialogs;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.SAXException;
import ru.trader.Main;
import ru.trader.World;
import ru.trader.model.ItemModel;
import ru.trader.model.MarketModel;
import ru.trader.view.support.Localization;
import javax.xml.stream.XMLStreamException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Locale;
import java.util.Optional;
import java.util.ResourceBundle;
public class MainController {
private final static Logger LOG = LoggerFactory.getLogger(MainController.class);
@@ -30,11 +37,43 @@ public class MainController {
@FXML
private BorderPane mainPane;
@FXML
private Menu langs;
@FXML
private OffersController offersController;
@FXML
private ItemsController itemsController;
@FXML
private void initialize() {
fillLangs();
}
private void fillLangs() {
ToggleGroup toggleGroup = new ToggleGroup();
for (Locale locale : Localization.getLocales()) {
ResourceBundle rb = Localization.getResources(locale);
RadioMenuItem mi = new RadioMenuItem(rb.getString("main.menu.file.language.item"));
mi.setToggleGroup(toggleGroup);
mi.setUserData(locale);
if (locale.equals(Localization.getCurrentLocale())) mi.setSelected(true);
langs.getItems().add(mi);
}
toggleGroup.selectedToggleProperty().addListener((cb, o, n) -> {
try {
if (n!=null)
Main.changeLocale((Locale) n.getUserData());
} catch (IOException e) {
LOG.error("Error on change locale to {}", n.getUserData());
LOG.error("",e);
}
});
}
public OffersController getOffersController() {
return offersController;
}
@@ -83,8 +122,8 @@ public class MainController {
public Optional<ItemModel> addItem(){
Optional<String> res = Dialogs.create()
.title("Добавление нового товара")
.message("Введите название товара")
.title(Localization.getString("dialogs.addItem.title"))
.message(Localization.getString("dialogs.addItem.message"))
.showTextInput();
ItemModel item = null;
if (res.isPresent()){

View File

@@ -17,6 +17,7 @@ import ru.trader.model.OfferDescModel;
import ru.trader.model.OfferModel;
import ru.trader.model.OrderModel;
import ru.trader.model.support.BindingsHelper;
import ru.trader.view.support.Localization;
import java.util.Collection;
@@ -75,7 +76,7 @@ public class OrdersController {
init(offers, balance, max);
Dialog dlg = new Dialog(parent, "Создание заказов");
Dialog dlg = new Dialog(parent, Localization.getString("orders.title"));
dlg.setContent(content);
dlg.getActions().addAll(OK, Dialog.Actions.CANCEL);
dlg.setResizable(false);

View File

@@ -10,6 +10,7 @@ import org.controlsfx.control.action.AbstractAction;
import org.controlsfx.control.action.Action;
import org.controlsfx.dialog.Dialog;
import ru.trader.model.PathRouteModel;
import ru.trader.view.support.Localization;
import java.util.Collection;
@@ -41,7 +42,7 @@ public class PathsController {
init(paths);
Dialog dlg = new Dialog(parent, String.format("Доступные маршруты"));
Dialog dlg = new Dialog(parent, Localization.getString("paths.title"));
dlg.setContent(content);
dlg.getActions().addAll(OK, Dialog.Actions.CANCEL);
dlg.setResizable(false);

View File

@@ -14,7 +14,7 @@ import ru.trader.view.support.NumberField;
import ru.trader.view.support.RouteNode;
public class RoutersController {
public class RouterController {
@FXML
private NumberField balance;

View File

@@ -10,6 +10,7 @@ import org.controlsfx.control.action.Action;
import org.controlsfx.dialog.Dialogs;
import ru.trader.model.*;
import ru.trader.view.support.CustomBuilderFactory;
import ru.trader.view.support.Localization;
import java.io.IOException;
import java.net.URL;
@@ -35,7 +36,7 @@ public class Screeners {
private static PathsController pathsController;
private static FXMLLoader initLoader(URL url){
FXMLLoader loader = new FXMLLoader(url);
FXMLLoader loader = new FXMLLoader(url, Localization.getResources());
loader.setBuilderFactory(new CustomBuilderFactory());
return loader;
}

View File

@@ -13,6 +13,7 @@ import org.controlsfx.control.action.AbstractAction;
import org.controlsfx.control.action.Action;
import org.controlsfx.dialog.Dialog;
import ru.trader.model.OrderModel;
import ru.trader.view.support.Localization;
import java.util.Collection;
@@ -49,7 +50,7 @@ public class TopOrdersController {
init(orders);
Dialog dlg = new Dialog(parent, "TOP заказов");
Dialog dlg = new Dialog(parent, Localization.getString("topOrders.title"));
dlg.setContent(content);
dlg.getActions().addAll(OK, Dialog.Actions.CANCEL);
dlg.setResizable(false);

View File

@@ -9,7 +9,6 @@ import javafx.scene.Parent;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.util.converter.DoubleStringConverter;
import org.controlsfx.control.ButtonBar;
import org.controlsfx.control.action.AbstractAction;
import org.controlsfx.control.action.Action;
@@ -19,6 +18,7 @@ import org.slf4j.LoggerFactory;
import ru.trader.core.OFFER_TYPE;
import ru.trader.model.*;
import ru.trader.model.support.BindingsHelper;
import ru.trader.view.support.Localization;
import ru.trader.view.support.NumberField;
import ru.trader.view.support.PriceStringConverter;
import ru.trader.view.support.ViewUtils;
@@ -32,7 +32,7 @@ public class VendorEditorController {
private VendorModel vendor;
private final Action actSave = new AbstractAction("Сохранить") {
private final Action actSave = new AbstractAction(Localization.getString("vEditor.save")) {
{
ButtonBar.setType(this, ButtonBar.ButtonType.OK_DONE);
}
@@ -85,7 +85,7 @@ public class VendorEditorController {
if (vendor != null) {
fill();
}
Dialog dlg = new Dialog(parent, vendor == null ? "Добавление станции" : "Редактирование станции");
Dialog dlg = new Dialog(parent, Localization.getString(vendor == null ? "vEditor.title.add" : "vEditor.title.edit"));
dlg.setContent(content);
dlg.getActions().addAll(actSave, Dialog.Actions.CANCEL);
dlg.setResizable(false);

View File

@@ -0,0 +1,76 @@
package ru.trader.view.support;
import ru.trader.Main;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Arrays;
import java.util.Collection;
import java.util.Locale;
import java.util.ResourceBundle;
public class Localization {
private static final Locale DEFAULT = new Locale("ru", "RU");
private static final ClassLoader loader = getLoader();
private static final Locale[] supportedLocales = {
DEFAULT,
new Locale("en", "US")
};
private static ResourceBundle rb = ResourceBundle.getBundle("locale", DEFAULT, loader);
private static Locale locale = DEFAULT;
static {
setLocale(Locale.getDefault());
}
private static Locale getSupported(Locale locale){
for (Locale l : supportedLocales) {
if (l.getLanguage().equals(locale.getLanguage()))
return l;
}
return DEFAULT;
}
private static ClassLoader getLoader() {
try {
URL url = Main.class.getResource("/lang/");
File file = new File("lang");
if (file.exists() && file.isDirectory())
url = file.toURI().toURL();
return new URLClassLoader(new URL[]{url});
} catch (MalformedURLException e) {
return ClassLoader.getSystemClassLoader();
}
}
public static void setLocale(Locale locale){
Locale.setDefault(locale);
Localization.locale = locale;
rb = getResources(locale);
}
public static ResourceBundle getResources(Locale locale){
return ResourceBundle.getBundle("locale", getSupported(locale), loader);
}
public static ResourceBundle getResources(){
return rb;
}
public static Collection<Locale> getLocales(){
return Arrays.asList(supportedLocales);
}
public static String getString(String key){
return rb.getString(key);
}
public static Locale getCurrentLocale() {
return locale;
}
}

View File

@@ -0,0 +1,94 @@
# Market
market.vendors=Stations
market.items=Commods
market.offers=Offers
market.item.name=Commodity
market.vendor.name=Station
# Offer
market.offer.buy=Buy
market.offer.sell=Sell
market.offer.price=Price
market.offer.min=Min
market.offer.avg=Avg
market.offer.max=Max
market.offer.max.full=Maximum
market.offer.best=Best
# Order
market.order.count=Count
market.order.profit=Profit
market.order.buyer=Buyer
market.order.seller=Seller
market.order.distance=Distance
# Route
routes=Routes
routes.path=Path
routes.jumps=Jumps
routes.refills=Refills
routes.lands=Landings
# main.fxml
main.title=Trader
main.menu.file=File
main.menu.file.save=Save
main.menu.file.import=Import...
main.menu.file.language=Language
main.menu.file.language.item=English
main.menu.edit=Edit
main.menu.edit.addStation=Add Station
main.menu.edit.addItem=Add Commodity
main.menu.edit.editStation=Edit Station
# save confirm dialog
dialogs.save=Changes were not saved, save changes?
# add item dialog
dialogs.addItem.title=Adding new commodity
dialogs.addItem.message=Enter commodity name
# items.fxml
# itemDesc.fxml
itemDesc.sellers=Sellers:
itemDesc.buyers=Buyers:
# oEditor.fxml
oEditor.sell=Sell:
oEditor.buy=Buy:
# offers.fxml
offers.pane.sell=Selling commodities
offers.pane.buy=Buying commodities
# orders.fxml
orders.title=Create orders
# topOrders.fxml
topOrders.title=TOP orders
# vEditor.fxml
vEditor.save=Save
vEditor.title.add=Add Station
vEditor.title.edit=Edit Station
# paths.fxml
paths.title=Available routes
# router.fxml
router.pane.ship=Ship parameters
router.pane.ship.balance=Balance:
router.pane.ship.cargo=Cargo:
router.pane.ship.fueltank=Fuel(LY):
router.pane.ship.distance=Distance(LY):
router.pane.route=Route parameters
router.pane.route.from=From:
router.pane.route.to=To:
router.pane.route.jumps=Jumps:
route.button.edit=Edit
route.button.remove=Remove
route.button.clear=Clear
route.button.top=TOP 100
router.pane.total=Total
router.pane.total.profit=Profit:

View File

@@ -0,0 +1,94 @@
# Market
market.vendors=\u0421\u0442\u0430\u043D\u0446\u0438\u0438
market.items=\u0422\u043E\u0432\u0430\u0440\u044B
market.offers=\u0417\u0430\u043A\u0430\u0437\u044B
market.item.name=\u0422\u043E\u0432\u0430\u0440
market.vendor.name=\u0421\u0442\u0430\u043D\u0446\u0438\u044F
# Offer
market.offer.buy=\u041F\u043E\u043A\u0443\u043F\u043A\u0430
market.offer.sell=\u041F\u0440\u043E\u0434\u0430\u0436\u0430
market.offer.price=\u0426\u0435\u043D\u0430
market.offer.min=\u041C\u0438\u043D.
market.offer.avg=\u0421\u0440.
market.offer.max=\u041C\u0430\u043A\u0441.
market.offer.max.full=\u041C\u0430\u043A\u0441\u0438\u043C\u0443\u043C
market.offer.best=\u041B\u0443\u0447\u0448\u0430\u044F
# Order
market.order.count=\u041A\u043E\u043B-\u0432\u043E
market.order.profit=\u041F\u0440\u0438\u0431\u044B\u043B\u044C
market.order.buyer=\u041F\u043E\u043A\u0443\u043F\u0430\u0442\u0435\u043B\u044C
market.order.seller=\u041F\u0440\u043E\u0434\u0430\u0432\u0435\u0446
market.order.distance=\u0414\u0438\u0441\u0442\u0430\u043D\u0446\u0438\u044F
# Route
routes=\u041C\u0430\u0440\u0448\u0440\u0443\u0442\u044B
routes.path=\u041F\u0443\u0442\u044C
routes.jumps=\u041F\u0440\u044B\u0436\u043A\u043E\u0432
routes.refills=\u0417\u0430\u043F\u0440\u0430\u0432\u043E\u043A
routes.lands=\u041F\u043E\u0441\u0430\u0434\u043E\u043A
# main.fxml
main.title=\u0422\u043E\u0440\u0433\u043E\u0439\u0434
main.menu.file=\u0424\u0430\u0439\u043B
main.menu.file.save=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C
main.menu.file.import=\u0418\u043C\u043F\u043E\u0440\u0442...
main.menu.file.language=\u042F\u0437\u044B\u043A
main.menu.file.language.item=\u0420\u0443\u0441\u0441\u043A\u0438\u0439
main.menu.edit=\u041F\u0440\u0430\u0432\u043A\u0430
main.menu.edit.addStation=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u0442\u0430\u043D\u0446\u0438\u044E
main.menu.edit.addItem=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0442\u043E\u0432\u0430\u0440
main.menu.edit.editStation=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0442\u0430\u043D\u0446\u0438\u044E
# save confirm dialog
dialogs.save=\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u043D\u0435 \u0431\u044B\u043B\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B, \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C?
# add item dialog
dialogs.addItem.title=\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043D\u043E\u0432\u043E\u0433\u043E \u0442\u043E\u0432\u0430\u0440\u0430
dialogs.addItem.message=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0442\u043E\u0432\u0430\u0440\u0430
# items.fxml
# itemDesc.fxml
itemDesc.sellers=\u041F\u0440\u043E\u0434\u0430\u0432\u0446\u044B:
itemDesc.buyers=\u041F\u043E\u043A\u0443\u043F\u0430\u0442\u0435\u043B\u0438:
# oEditor.fxml
oEditor.sell=\u041F\u0440\u043E\u0434\u0430\u0436\u0430:
oEditor.buy=\u041F\u043E\u043A\u0443\u043F\u043A\u0430:
# offers.fxml
offers.pane.sell=\u041F\u0440\u043E\u0434\u0430\u0432\u0430\u0435\u043C\u044B\u0435 \u0442\u043E\u0432\u0430\u0440\u044B
offers.pane.buy=\u041F\u043E\u043A\u0443\u043F\u0430\u0435\u043C\u044B\u0435 \u0442\u043E\u0432\u0430\u0440\u044B
# orders.fxml
orders.title=\u0421\u043E\u0437\u0434\u0430\u043D\u0438\u0435 \u0437\u0430\u043A\u0430\u0437\u043E\u0432
# topOrders.fxml
topOrders.title=TOP \u0437\u0430\u043A\u0430\u0437\u043E\u0432
# vEditor.fxml
vEditor.save=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C
vEditor.title.add=\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u043D\u0446\u0438\u0438
vEditor.title.edit=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0441\u0442\u0430\u043D\u0446\u0438\u0438
# paths.fxml
paths.title=\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435 \u043C\u0430\u0440\u0448\u0440\u0443\u0442\u044B
# router.fxml
router.pane.ship=\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u043A\u043E\u0440\u0430\u0431\u043B\u044F
router.pane.ship.balance=\u0411\u0430\u043B\u0430\u043D\u0441:
router.pane.ship.cargo=\u0422\u0440\u044E\u043C:
router.pane.ship.fueltank=\u0417\u0430\u043F\u0430\u0441 \u0442\u043E\u043F\u043B\u0438\u0432\u0430(LY):
router.pane.ship.distance=\u0414\u0438\u0441\u0442\u0430\u043D\u0446\u0438\u044F \u043F\u0440\u044B\u0436\u043A\u0430(LY):
router.pane.route=\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u043C\u0430\u0440\u0448\u0440\u0443\u0442\u0430
router.pane.route.from=\u041E\u0442:
router.pane.route.to=\u0414\u043E:
router.pane.route.jumps=\u041F\u0440\u044B\u0436\u043A\u043E\u0432:
route.button.edit=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C
route.button.remove=\u0423\u0434\u0430\u043B\u0438\u0442\u044C
route.button.clear=\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C
route.button.top=TOP 100
router.pane.total=\u0418\u0442\u043E\u0433\u043E
router.pane.total.profit=\u041F\u0440\u0438\u0431\u044B\u043B\u044C:

View File

@@ -0,0 +1,19 @@
# main.fxml
main.menu.file=\uFFFD\uFFFD\uFFFD\uFFFD
main.menu.file.save=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
main.menu.file.import=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD...
main.menu.file.language=\uFFFD\uFFFD\uFFFD\uFFFD
main.menu.file.language.item=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
main.menu.edit=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
main.menu.edit.addStation=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
main.menu.edit.addItem=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
main.menu.edit.editStation=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
main.tab.items=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
main.tab.stations=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
main.tab.routes=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
# add item dialog
dialogs.addItem.title=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD
dialogs.addItem.message=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD

View File

@@ -10,11 +10,11 @@
spacing="4" >
<fx:define><Insets fx:id="vbox_margin" left="6" top="3" bottom="3"/></fx:define>
<Label text="Продавцы:" VBox.margin="$vbox_margin"/>
<Label text="%itemDesc.sellers" VBox.margin="$vbox_margin"/>
<ListView fx:id="seller" maxHeight="200.0">
<cellFactory><OfferListCell/></cellFactory>
</ListView>
<Label text="Покупатели:" VBox.margin="$vbox_margin"/>
<Label text="%itemDesc.buyers" VBox.margin="$vbox_margin"/>
<ListView fx:id="buyer" maxHeight="200.0">
<cellFactory><OfferListCell/></cellFactory>
</ListView>

View File

@@ -12,46 +12,46 @@
fx:controller="ru.trader.controllers.ItemsController">
<TableView fx:id="tblItems" editable="true" VBox.vgrow="ALWAYS" prefWidth="1095.0">
<columns>
<TableColumn editable="true" minWidth="200.0" text="Товар">
<TableColumn editable="true" minWidth="200.0" text="%market.item.name">
<cellValueFactory><PropertyValueFactory property="name"/></cellValueFactory>
</TableColumn>
<TableColumn editable="true" resizable="false" text="Покупка">
<TableColumn editable="true" resizable="false" text="%market.offer.buy">
<columns>
<TableColumn minWidth="120.0" text="Мин.">
<TableColumn minWidth="120.0" text="%market.offer.min">
<cellValueFactory><OfferCellValueImpl property="minSell"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="Ср.">
<TableColumn minWidth="80.0" text="%market.offer.avg">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="avgSell"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="120.0" text="Макс.">
<TableColumn minWidth="120.0" text="%market.offer.max">
<cellValueFactory><OfferCellValueImpl property="maxSell"/></cellValueFactory>
</TableColumn>
</columns>
</TableColumn>
<TableColumn editable="true" resizable="false" text="Продажа">
<TableColumn editable="true" resizable="false" text="%market.offer.sell">
<columns>
<TableColumn minWidth="120.0" text="Мин.">
<TableColumn minWidth="120.0" text="%market.offer.min">
<cellValueFactory><OfferCellValueImpl property="minBuy"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="Ср.">
<TableColumn minWidth="80.0" text="%market.offer.avg">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="avgBuy"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="120.0" text="Макс.">
<TableColumn minWidth="120.0" text="%market.offer.max">
<cellValueFactory><OfferCellValueImpl property="maxBuy"/></cellValueFactory>
</TableColumn>
</columns>
</TableColumn>
<TableColumn editable="true" resizable="false" text="Прибыль">
<TableColumn editable="true" resizable="false" text="%market.order.profit">
<columns>
<TableColumn fx:id="minProfit" minWidth="80.0" text="Мин.">
<TableColumn fx:id="minProfit" minWidth="80.0" text="%market.offer.min">
<cellFactory><DoubleCell/></cellFactory>
</TableColumn>
<TableColumn fx:id="avgProfit" minWidth="80.0" text="Ср.">
<TableColumn fx:id="avgProfit" minWidth="80.0" text="%market.offer.avg">
<cellFactory><DoubleCell/></cellFactory>
</TableColumn>
<TableColumn fx:id="maxProfit" minWidth="80.0" text="Макс." sortType="DESCENDING">
<TableColumn fx:id="maxProfit" minWidth="80.0" text="%market.offer.max" sortType="DESCENDING">
<cellFactory><DoubleCell/></cellFactory>
</TableColumn>
</columns>

View File

@@ -9,27 +9,28 @@
>
<top>
<MenuBar>
<Menu text="Файл">
<MenuItem text="Сохранить" onAction="#save"/>
<MenuItem text="Импорт..." onAction="#importWorld"/>
<Menu text="%main.menu.file">
<MenuItem text="%main.menu.file.save" onAction="#save"/>
<MenuItem text="%main.menu.file.import" onAction="#importWorld"/>
<Menu fx:id="langs" text="%main.menu.file.language"/>
</Menu>
<Menu text="Правка">
<MenuItem text="Добавить станцию" onAction="#addVendor"/>
<MenuItem text="Добавить товар" onAction="#addItem"/>
<MenuItem text="Редактировать станцию" onAction="#editVendor"/>
<Menu text="%main.menu.edit">
<MenuItem text="%main.menu.edit.addStation" onAction="#addVendor"/>
<MenuItem text="%main.menu.edit.addItem" onAction="#addItem"/>
<MenuItem text="%main.menu.edit.editStation" onAction="#editVendor"/>
</Menu>
</MenuBar>
</top>
<center>
<TabPane tabClosingPolicy="UNAVAILABLE" BorderPane.alignment="CENTER">
<Tab text="Товары">
<Tab text="%market.items">
<fx:include fx:id="items" source="items.fxml"/>
</Tab>
<Tab text="Станции">
<Tab text="%market.vendors">
<fx:include fx:id="offers" source="offers.fxml"/>
</Tab>
<Tab text="Маршруты">
<fx:include source="routers.fxml"/>
<Tab text="%routes">
<fx:include source="router.fxml"/>
</Tab>
</TabPane>
</center>

View File

@@ -8,9 +8,9 @@
fx:controller="ru.trader.controllers.OffersEditorController">
<Label fx:id="name"/>
<HBox>
<Label text="Продажа:"/>
<Label text="%oEditor.sell"/>
<NumberField fx:id="sell"/>
<Label text="Покупка:"/>
<Label text="%oEditor.buy"/>
<NumberField fx:id="buy"/>
</HBox>
</VBox>

View File

@@ -11,39 +11,47 @@
<?import ru.trader.view.support.cells.DoubleCell?>
<HBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="ru.trader.controllers.OffersController">
<TitledPane text="Станции" minWidth="250" prefHeight="510" collapsible="false">
<TitledPane text="%market.vendors" minWidth="250" prefHeight="510" collapsible="false">
<ListView fx:id="vendors" />
</TitledPane>
<Accordion HBox.hgrow="ALWAYS">
<panes>
<TitledPane fx:id="sells" animated="false" text="Продаваемые товары">
<TitledPane fx:id="sells" animated="false" text="%offers.pane.sell">
<TableView fx:id="tblSell" editable="true">
<columns>
<TableColumn minWidth="230.0" text="Товар">
<TableColumn minWidth="230.0" text="%market.item.name">
<cellValueFactory><PropertyValueFactory property="name"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="110.0" text="Цена" onEditCommit="#editPrice">
<TableColumn minWidth="110.0" text="%market.offer.price" onEditCommit="#editPrice">
<cellFactory><PriceCellImpl/></cellFactory>
<cellValueFactory><PropertyValueFactory property="price"/></cellValueFactory>
</TableColumn>
<TableColumn fx:id="sortSell" minWidth="80.0" text="Прибыль" sortType="DESCENDING">
<TableColumn fx:id="sortSell" minWidth="90.0" text="%market.order.profit" sortType="DESCENDING">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="profit"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="AVG SELL">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="avgSell"/></cellValueFactory>
<TableColumn text="%market.offer.avg">
<columns>
<TableColumn minWidth="80.0" text="%market.offer.sell">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="avgSell"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="%market.offer.buy">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="avgBuy"/></cellValueFactory>
</TableColumn>
</columns>
</TableColumn>
<TableColumn minWidth="80.0" text="AVG BUY">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="avgBuy"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="120.0" text="BEST SELL">
<cellValueFactory><OfferCellValueImpl property="bestSell"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="120.0" text="BEST BUY">
<cellValueFactory><OfferCellValueImpl property="bestBuy"/></cellValueFactory>
<TableColumn text="%market.offer.best">
<columns>
<TableColumn minWidth="120.0" text="%market.offer.sell">
<cellValueFactory><OfferCellValueImpl property="bestSell"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="120.0" text="%market.offer.buy">
<cellValueFactory><OfferCellValueImpl property="bestBuy"/></cellValueFactory>
</TableColumn>
</columns>
</TableColumn>
</columns>
<columnResizePolicy>
@@ -54,33 +62,41 @@
</sortOrder>
</TableView>
</TitledPane>
<TitledPane animated="false" text="Покупаемые товары">
<TitledPane animated="false" text="%offers.pane.buy">
<TableView fx:id="tblBuy" editable="true">
<columns>
<TableColumn minWidth="230.0" text="Товар">
<TableColumn minWidth="230.0" text="%market.item.name">
<cellValueFactory><PropertyValueFactory property="name"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="110.0" text="Цена" editable="true" onEditCommit="#editPrice">
<TableColumn minWidth="110.0" text="%market.offer.price" editable="true" onEditCommit="#editPrice">
<cellFactory><PriceCellImpl/></cellFactory>
<cellValueFactory><PropertyValueFactory property="price"/></cellValueFactory>
</TableColumn>
<TableColumn fx:id="sortBuy" minWidth="80.0" text="Прибыль" sortType="DESCENDING">
<TableColumn fx:id="sortBuy" minWidth="90.0" text="%market.order.profit" sortType="DESCENDING">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="profit"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="AVG SELL">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="avgSell"/></cellValueFactory>
<TableColumn text="%market.offer.avg">
<columns>
<TableColumn minWidth="80.0" text="%market.offer.sell">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="avgSell"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="%market.offer.buy">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="avgBuy"/></cellValueFactory>
</TableColumn>
</columns>
</TableColumn>
<TableColumn minWidth="80.0" text="AVG BUY">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="avgBuy"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="120.0" text="BEST SELL">
<cellValueFactory><OfferCellValueImpl property="bestSell"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="120.0" text="BEST BUY">
<cellValueFactory><OfferCellValueImpl property="bestBuy"/></cellValueFactory>
<TableColumn text="%market.offer.best">
<columns>
<TableColumn minWidth="120.0" text="%market.offer.sell">
<cellValueFactory><OfferCellValueImpl property="bestSell"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="120.0" text="%market.offer.buy">
<cellValueFactory><OfferCellValueImpl property="bestBuy"/></cellValueFactory>
</TableColumn>
</columns>
</TableColumn>
</columns>
<columnResizePolicy>

View File

@@ -14,30 +14,30 @@
prefWidth="1010">
<TableView fx:id="tblOrders" editable="true">
<columns>
<TableColumn minWidth="160.0" text="Товар">
<TableColumn minWidth="160.0" text="%market.item.name">
<cellValueFactory><PropertyValueFactory property="name"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="60.0" text="Цена">
<TableColumn minWidth="60.0" text="%market.offer.price">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="price"/></cellValueFactory>
</TableColumn>
<TableColumn fx:id="count" minWidth="60.0" prefWidth="60.0" text="Кол-во">
<TableColumn fx:id="count" minWidth="60.0" prefWidth="60.0" text="%market.order.count">
<cellValueFactory><PropertyValueFactory property="count"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="160.0" text="Покупатель">
<TableColumn minWidth="160.0" text="%market.order.buyer">
<cellValueFactory><OfferCellValueImpl property="buyOffer"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="Прибыль">
<TableColumn minWidth="80.0" text="%market.order.profit">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="profit"/></cellValueFactory>
</TableColumn>
<TableColumn resizable="false" text="Максимум">
<TableColumn resizable="false" text="%market.offer.max.full">
<columns>
<TableColumn fx:id="maxCount" minWidth="60.0" prefWidth="60.0" text="Кол-во">
<TableColumn fx:id="maxCount" minWidth="60.0" prefWidth="60.0" text="%market.order.count">
<cellValueFactory><PropertyValueFactory property="max"/></cellValueFactory>
</TableColumn>
<TableColumn fx:id="bestProfit" minWidth="80.0" text="Прибыль" sortType="DESCENDING">
<TableColumn fx:id="bestProfit" minWidth="80.0" text="%market.order.profit" sortType="DESCENDING">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="bestProfit"/></cellValueFactory>
</TableColumn>
@@ -53,14 +53,14 @@
</TableView>
<TableView fx:id="tblBuyers" minWidth="335">
<columns>
<TableColumn minWidth="160.0" text="Покупатель">
<TableColumn minWidth="160.0" text="%market.order.buyer">
<cellFactory><OfferTableCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="price"/></cellValueFactory>
</TableColumn>
<TableColumn fx:id="curDistance" minWidth="80.0" text="Дистанция">
<TableColumn fx:id="curDistance" minWidth="80.0" text="%market.order.distance">
<cellFactory><DoubleCell format="\%.2f LY"/></cellFactory>
</TableColumn>
<TableColumn fx:id="curProfit" minWidth="80.0" text="Прибыль" sortType="DESCENDING">
<TableColumn fx:id="curProfit" minWidth="80.0" text="%market.order.profit" sortType="DESCENDING">
<cellFactory><DoubleCell/></cellFactory>
</TableColumn>
</columns>

View File

@@ -15,26 +15,26 @@
prefWidth="1050">
<TableView fx:id="tblPaths" editable="true">
<columns>
<TableColumn minWidth="600.0" text="Путь">
<TableColumn minWidth="600.0" text="%routes.path">
<cellFactory><PathRouteCell /></cellFactory>
</TableColumn>
<TableColumn minWidth="70.0" text="Прыжков">
<TableColumn minWidth="70.0" text="%routes.jumps">
<cellValueFactory><PropertyValueFactory property="jumps"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="70.0" text="Заправок">
<TableColumn minWidth="70.0" text="%routes.refills">
<cellValueFactory><PropertyValueFactory property="refuels"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="70.0" text="Посадок">
<TableColumn minWidth="70.0" text="%routes.lands">
<cellValueFactory><PropertyValueFactory property="lands"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="Дистанция">
<TableColumn minWidth="80.0" text="%market.order.distance">
<cellFactory><DoubleCell format="\%.2f LY"/></cellFactory>
<cellValueFactory><PropertyValueFactory property="distance"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="70.0" text="Прибыль">
<TableColumn minWidth="70.0" text="%market.order.profit">
<cellValueFactory><PropertyValueFactory property="totalProfit"/></cellValueFactory>
</TableColumn>
<TableColumn fx:id="avgProfit" minWidth="70.0" text="Ср." sortType="DESCENDING">
<TableColumn fx:id="avgProfit" minWidth="70.0" text="%market.offer.avg" sortType="DESCENDING">
<cellFactory><DoubleCell format="\%.0f"/></cellFactory>
<cellValueFactory><PropertyValueFactory property="avgProfit"/></cellValueFactory>
</TableColumn>

View File

@@ -10,68 +10,68 @@
<?import javafx.geometry.Insets?>
<HBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="ru.trader.controllers.RoutersController">
fx:controller="ru.trader.controllers.RouterController">
<fx:define><Insets fx:id="fields_group_margin" left="2" right="10"/></fx:define>
<fx:define><Insets fx:id="separator_margin" top="10" bottom="10"/></fx:define>
<VBox minWidth="250">
<TitledPane text="Параметры корабля" minHeight="160" collapsible="false">
<TitledPane text="%router.pane.ship" minHeight="160" collapsible="false">
<GridPane vgap="4">
<columnConstraints>
<ColumnConstraints minWidth="140" />
<ColumnConstraints minWidth="90" maxWidth="90"/>
</columnConstraints>
<Label text="Баланс:"/>
<Label text="%router.pane.ship.balance"/>
<NumberField fx:id="balance" GridPane.columnIndex="1" />
<Label text="Трюм:" GridPane.rowIndex="1" />
<Label text="%router.pane.ship.cargo" GridPane.rowIndex="1" />
<NumberField fx:id="cargo" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<Label text="Запас топлива(LY):" GridPane.rowIndex="2" />
<Label text="%router.pane.ship.fueltank" GridPane.rowIndex="2" />
<NumberField fx:id="tank" GridPane.columnIndex="1" GridPane.rowIndex="2" />
<Label text="Дистанция прыжка(LY):" GridPane.rowIndex="3" />
<Label text="%router.pane.ship.distance" GridPane.rowIndex="3" />
<NumberField fx:id="distance" GridPane.columnIndex="1" GridPane.rowIndex="3" />
</GridPane>
</TitledPane>
<TitledPane text="Параметры маршрута" minHeight="250" collapsible="false">
<TitledPane text="%router.pane.route" minHeight="250" collapsible="false">
<GridPane vgap="4">
<columnConstraints>
<ColumnConstraints minWidth="70"/>
<ColumnConstraints minWidth="160" maxWidth="160"/>
</columnConstraints>
<Label text="От:" />
<Label text="%router.pane.route.from" />
<ComboBox fx:id="source" prefWidth="160" GridPane.columnIndex="1" />
<Label text="До:" GridPane.rowIndex="1"/>
<Label text="%router.pane.route.to" GridPane.rowIndex="1"/>
<ComboBox fx:id="target" prefWidth="160" GridPane.columnIndex="1" GridPane.rowIndex="1"/>
<Label text="Прыжков:" GridPane.rowIndex="2" />
<Label text="%router.pane.route.jumps" GridPane.rowIndex="2" />
<NumberField fx:id="jumps" GridPane.columnIndex="1" GridPane.rowIndex="2" />
<Separator GridPane.columnSpan="2" GridPane.rowIndex="3" GridPane.margin="$separator_margin"/>
<VBox GridPane.columnSpan="2" GridPane.rowIndex="4" spacing="5">
<HBox alignment="CENTER" spacing="5">
<Button fx:id="editBtn" text="Изменить" onAction="#editOrders"/>
<Button fx:id="removeBtn" text="Удалить" onAction="#removeSelected"/>
<Button text="Очистить" onAction="#removeAll" />
<Button fx:id="editBtn" text="%route.button.edit" onAction="#editOrders"/>
<Button fx:id="removeBtn" text="%route.button.remove" onAction="#removeSelected"/>
<Button text="%route.button.clear" onAction="#removeAll" />
</HBox>
<HBox alignment="CENTER" spacing="5">
<Button prefWidth="80" text="Заказы" onAction="#showOrders" />
<Button text="TOP 100" onAction="#showTopOrders" />
<Button prefWidth="80" text="%market.offers" onAction="#showOrders" />
<Button text="%route.button.top" onAction="#showTopOrders" />
</HBox>
<HBox alignment="CENTER" spacing="5">
<Button prefWidth="80" text="Маршруты" onAction="#showRoutes" />
<Button text="TOP 100" onAction="#showTopRoutes" />
<Button prefWidth="80" text="%routes" onAction="#showRoutes" />
<Button text="%route.button.top" onAction="#showTopRoutes" />
</HBox>
</VBox>
</GridPane>
</TitledPane>
<Pane VBox.vgrow="ALWAYS"/>
<TitledPane text="Итого" minHeight="100" collapsible="false">
<TitledPane text="%router.pane.total" minHeight="100" collapsible="false">
<GridPane vgap="4">
<columnConstraints>
<ColumnConstraints minWidth="70"/>
<ColumnConstraints minWidth="160"/>
</columnConstraints>
<Label text="Баланс:"/>
<Label text="%router.pane.ship.balance"/>
<NumberField fx:id="totalBalance" prefWidth="100" GridPane.columnIndex="1" editable="false"/>
<Label text="Прибыль:" GridPane.rowIndex="1"/>
<Label text="%router.pane.total.profit" GridPane.rowIndex="1"/>
<NumberField fx:id="totalProfit" prefWidth="100" GridPane.columnIndex="1" GridPane.rowIndex="1" editable="false"/>
</GridPane>
</TitledPane>
@@ -79,27 +79,27 @@
<VBox HBox.hgrow="ALWAYS">
<TableView fx:id="tblOrders" VBox.vgrow="ALWAYS">
<columns>
<TableColumn minWidth="210.0" text="Продавец">
<TableColumn minWidth="210.0" text="%market.order.seller">
<cellValueFactory><PropertyValueFactory property="vendor"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="180.0" text="Товар">
<TableColumn minWidth="180.0" text="%market.item.name">
<cellValueFactory><PropertyValueFactory property="name"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="Цена">
<TableColumn minWidth="80.0" text="%market.offer.price">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="price"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="Кол-во">
<TableColumn minWidth="80.0" text="%market.order.count">
<cellValueFactory><PropertyValueFactory property="count"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="120.0" text="Покупатель">
<TableColumn minWidth="120.0" text="%market.order.buyer">
<cellValueFactory><OfferCellValueImpl property="buyOffer"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="Дистанция">
<TableColumn minWidth="80.0" text="%market.order.distance">
<cellFactory><DoubleCell format="\%.2f LY"/></cellFactory>
<cellValueFactory><PropertyValueFactory property="distance"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="Прибыль">
<TableColumn minWidth="80.0" text="%market.order.profit">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="profit"/></cellValueFactory>
</TableColumn>

View File

@@ -11,26 +11,26 @@
<?import ru.trader.view.support.cells.OfferTableCell?>
<HBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="ru.trader.controllers.TopOrdersController" styleClass="dialog"
prefWidth="715">
prefWidth="725">
<TableView fx:id="tblOrders" editable="true">
<columns>
<TableColumn minWidth="160.0" text="Товар">
<TableColumn minWidth="160.0" text="%market.item.name">
<cellValueFactory><PropertyValueFactory property="name"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="160.0" text="Продавец">
<TableColumn minWidth="160.0" text="%market.order.seller">
<cellValueFactory><OfferCellValueImpl property="offer"/></cellValueFactory>
</TableColumn>
<TableColumn fx:id="count" minWidth="60.0" text="Кол-во">
<TableColumn fx:id="count" minWidth="60.0" text="%market.order.count">
<cellValueFactory><PropertyValueFactory property="count"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="160.0" text="Покупатель">
<TableColumn minWidth="160.0" text="%market.order.buyer">
<cellValueFactory><OfferCellValueImpl property="buyOffer"/></cellValueFactory>
</TableColumn>
<TableColumn minWidth="80.0" text="Дистанция">
<TableColumn minWidth="80.0" text="%market.order.distance">
<cellFactory><DoubleCell format="\%.2f LY"/></cellFactory>
<cellValueFactory><PropertyValueFactory property="distance"/></cellValueFactory>
</TableColumn>
<TableColumn fx:id="profit" minWidth="80.0" text="Прибыль" sortType="DESCENDING">
<TableColumn fx:id="profit" minWidth="80.0" text="%market.order.profit" sortType="DESCENDING">
<cellFactory><DoubleCell/></cellFactory>
<cellValueFactory><PropertyValueFactory property="profit"/></cellValueFactory>
</TableColumn>

View File

@@ -29,13 +29,13 @@
</VBox>
<TableView fx:id="items" prefWidth="375.0" editable="true" GridPane.columnIndex="1" GridPane.rowIndex="2">
<columns>
<TableColumn minWidth="200.0" text="Товар" editable="false">
<TableColumn minWidth="200.0" text="%market.item.name" editable="false">
<cellValueFactory><PropertyValueFactory property="name"/></cellValueFactory>
</TableColumn>
<TableColumn fx:id="buy" minWidth="80.0" text="Продажа">
<TableColumn fx:id="buy" minWidth="80.0" text="%market.offer.sell">
<cellValueFactory><PropertyValueFactory property="bprice"/></cellValueFactory>
</TableColumn>
<TableColumn fx:id="sell" minWidth="80.0" text="Покупка">
<TableColumn fx:id="sell" minWidth="80.0" text="%market.offer.buy">
<cellValueFactory><PropertyValueFactory property="sprice"/></cellValueFactory>
</TableColumn>
</columns>