diff --git a/client/src/main/java/ru/trader/Main.java b/client/src/main/java/ru/trader/Main.java index 379c1c8..bcbf8e6 100644 --- a/client/src/main/java/ru/trader/Main.java +++ b/client/src/main/java/ru/trader/Main.java @@ -119,6 +119,7 @@ public class Main extends Application { Screeners.loadHelperStage(getUrl("helper.fxml")); Screeners.loadVendorFilterStage(getUrl("vFilter.fxml")); Screeners.loadDBEditorStage(getUrl("db/dbeditor.fxml")); + Screeners.loadEngineModStage(getUrl("engineMod.fxml")); } private static URL getUrl(String filename) throws MalformedURLException { diff --git a/client/src/main/java/ru/trader/controllers/EngineModController.java b/client/src/main/java/ru/trader/controllers/EngineModController.java new file mode 100644 index 0000000..38e38d1 --- /dev/null +++ b/client/src/main/java/ru/trader/controllers/EngineModController.java @@ -0,0 +1,58 @@ +package ru.trader.controllers; + +import javafx.collections.FXCollections; +import javafx.fxml.FXML; +import javafx.scene.Parent; +import javafx.scene.control.ComboBox; +import javafx.scene.control.Dialog; +import ru.trader.core.Engine; +import ru.trader.core.ModEngine; +import ru.trader.model.MarketModel; +import ru.trader.view.support.EngineStringConverter; +import ru.trader.view.support.Localization; +import ru.trader.view.support.NumberField; + +import java.util.Optional; + +public class EngineModController { + @FXML + private ComboBox type; + @FXML + private NumberField optMass; + + private Dialog dlg; + private MarketModel market; + + @FXML + private void initialize() { + type.setItems(FXCollections.observableArrayList(Engine.getEngines())); + type.setConverter(new EngineStringConverter()); + type.getSelectionModel().selectFirst(); + optMass.setValue(0.0); + } + + private void createDialog(Parent owner, Parent content){ + dlg = new Dialog<>(); + if (owner != null) dlg.initOwner(owner.getScene().getWindow()); + dlg.setTitle(Localization.getString("dialog.engine.title")); + dlg.getDialogPane().setContent(content); + dlg.getDialogPane().getButtonTypes().addAll(Dialogs.OK, Dialogs.CANCEL); + dlg.setResultConverter(dialogButton -> { + if (dialogButton == Dialogs.OK) { + return new ModEngine(type.getValue(), optMass.getValue().doubleValue()); + } + return null; + }); + dlg.setResizable(false); + } + + + public Optional showDialog(Parent parent, Parent content) { + if (dlg == null){ + createDialog(parent, content); + } + return dlg.showAndWait(); + } + + +} diff --git a/client/src/main/java/ru/trader/controllers/ProfileController.java b/client/src/main/java/ru/trader/controllers/ProfileController.java index e54dac4..485eab0 100644 --- a/client/src/main/java/ru/trader/controllers/ProfileController.java +++ b/client/src/main/java/ru/trader/controllers/ProfileController.java @@ -8,18 +8,19 @@ import javafx.fxml.FXML; import javafx.scene.Node; import javafx.scene.control.*; import javafx.scene.layout.Pane; -import javafx.util.StringConverter; import ru.trader.Main; import ru.trader.ServicesManager; import ru.trader.core.Engine; import ru.trader.model.*; import ru.trader.model.support.ChangeMarketListener; +import ru.trader.view.support.EngineStringConverter; import ru.trader.view.support.NumberField; import ru.trader.view.support.ViewUtils; import ru.trader.view.support.autocomplete.AutoCompletion; import ru.trader.view.support.autocomplete.CachedSuggestionProvider; import ru.trader.view.support.autocomplete.SystemsProvider; +import java.util.Optional; public class ProfileController { @@ -198,6 +199,14 @@ public class ProfileController { return s == null ? ModelFabric.NONE_STATION : s.get(name); } + @FXML + private void modEngine(){ + Optional engine = Screeners.showModEngine(); + if (engine.isPresent()){ + this.engine.setValue(engine.get()); + } + } + private void updateIcons(){ SystemModel s = system.getValue(); if (!s.isCorrect()){ @@ -272,16 +281,4 @@ public class ProfileController { } }; - private class EngineStringConverter extends StringConverter { - @Override - public String toString(Engine engine) { - return ""+engine.getClazz()+engine.getRating(); - } - - @Override - public Engine fromString(String string) { - throw new UnsupportedOperationException(); - } - } - } diff --git a/client/src/main/java/ru/trader/controllers/Screeners.java b/client/src/main/java/ru/trader/controllers/Screeners.java index 60675e8..d8c3916 100644 --- a/client/src/main/java/ru/trader/controllers/Screeners.java +++ b/client/src/main/java/ru/trader/controllers/Screeners.java @@ -12,6 +12,7 @@ import javafx.scene.layout.Priority; import javafx.stage.Stage; import javafx.util.Pair; import ru.trader.EMDNUpdater; +import ru.trader.core.Engine; import ru.trader.core.MarketFilter; import ru.trader.core.VendorFilter; import ru.trader.db.controllers.DBEditorController; @@ -42,6 +43,7 @@ public class Screeners { private static Parent helperScreen; private static Parent vFilterScreen; private static Parent dbEditorScreen; + private static Parent engineModScreen; private static MainController mainController; private static ItemDescController itemDescController; @@ -57,6 +59,7 @@ public class Screeners { private static HelperController helperController; private static VendorFilterController vFilterController; private static DBEditorController dbEditorController; + private static EngineModController engineModController; private static FXMLLoader initLoader(URL url){ FXMLLoader loader = new FXMLLoader(url, Localization.getResources()); @@ -174,6 +177,13 @@ public class Screeners { dbEditorController = loader.getController(); } + public static void loadEngineModStage(URL fxml) throws IOException { + FXMLLoader loader = initLoader(fxml); + engineModScreen = loader.load(); + addStylesheet(engineModScreen); + engineModController = loader.getController(); + } + public static void show(Node node){ mainController.getMainPane().setCenter(node); } @@ -348,6 +358,10 @@ public class Screeners { return vFilterController.showEditDialog(mainScreen, vFilterScreen, filter); } + public static Optional showModEngine(){ + return engineModController.showDialog(mainScreen, engineModScreen); + } + public static void reinitAll() { mainController.init(); systemsEditorController.init(); diff --git a/client/src/main/java/ru/trader/view/support/EngineStringConverter.java b/client/src/main/java/ru/trader/view/support/EngineStringConverter.java new file mode 100644 index 0000000..f87c18d --- /dev/null +++ b/client/src/main/java/ru/trader/view/support/EngineStringConverter.java @@ -0,0 +1,17 @@ +package ru.trader.view.support; + +import javafx.util.StringConverter; +import ru.trader.core.Engine; +import ru.trader.core.ModEngine; + +public class EngineStringConverter extends StringConverter { + @Override + public String toString(Engine engine) { + return engine instanceof ModEngine ? "Custom" : ""+engine.getClazz()+engine.getRating(); + } + + @Override + public Engine fromString(String string) { + throw new UnsupportedOperationException(); + } +} \ No newline at end of file diff --git a/client/src/main/resources/lang/locale_en_US.properties b/client/src/main/resources/lang/locale_en_US.properties index f39091f..0945675 100644 --- a/client/src/main/resources/lang/locale_en_US.properties +++ b/client/src/main/resources/lang/locale_en_US.properties @@ -111,6 +111,11 @@ dialog.group.title=Adding new group dialog.group.id=ID: dialog.group.type=Type: +#engine mod dialog +dialog.engine.title=Engine modification +dialog.engine.class=Engine class: +dialog.engine.optMass=Optimal mass: + #profile.fxml profile.name=Cmdr: profile.balance=Balance: diff --git a/client/src/main/resources/lang/locale_ru_RU.properties b/client/src/main/resources/lang/locale_ru_RU.properties index b8b314c..b11bd4d 100644 --- a/client/src/main/resources/lang/locale_ru_RU.properties +++ b/client/src/main/resources/lang/locale_ru_RU.properties @@ -111,6 +111,10 @@ dialog.item.group=\u0413\u0440\u0443\u043F\u043F\u0430: dialog.group.title=\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043D\u043E\u0432\u043E\u0439 \u0433\u0440\u0443\u043F\u043F\u044B dialog.group.id=ID: dialog.group.type=\u0422\u0438\u043F: +#engine mod dialog +dialog.engine.title=\u041C\u043E\u0434\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043B\u044F +dialog.engine.class=\u041A\u043B\u0430\u0441\u0441 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043B\u044F: +dialog.engine.optMass=\u041E\u043F\u0442\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u043C\u0430\u0441\u0441\u0430: #profile.fxml profile.name=\u041A\u041C\u0414\u0420: diff --git a/client/src/main/resources/view/engineMod.fxml b/client/src/main/resources/view/engineMod.fxml new file mode 100644 index 0000000..17d665d --- /dev/null +++ b/client/src/main/resources/view/engineMod.fxml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/client/src/main/resources/view/profile.fxml b/client/src/main/resources/view/profile.fxml index f9d72a1..53039de 100644 --- a/client/src/main/resources/view/profile.fxml +++ b/client/src/main/resources/view/profile.fxml @@ -1,11 +1,10 @@ - - - - - + + + + @@ -40,18 +39,19 @@ - + - + - +