package com.kodcu.config; //import com.dooapp.fxform.annotation.Accessor; import com.dooapp.fxform.FXForm; import com.dooapp.fxform.builder.FXFormBuilder; import com.dooapp.fxform.handler.NamedFieldHandler; import com.dooapp.fxform.view.factory.DefaultFactoryProvider; import com.kodcu.component.SliderBuilt; import com.kodcu.config.factory.FileChooserEditableFactory; import com.kodcu.config.factory.SliderFactory; import com.kodcu.config.factory.SpinnerFactory; import com.kodcu.controller.ApplicationController; import com.kodcu.other.IOHelper; import com.kodcu.service.ThreadService; import com.kodcu.service.ui.TabService; import com.terminalfx.config.TerminalConfig; import com.terminalfx.helper.FxHelper; import javafx.application.Platform; import javafx.beans.property.*; import javafx.event.ActionEvent; import javafx.geometry.Insets; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.Spinner; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.json.Json; import javax.json.JsonObject; import javax.json.JsonObjectBuilder; import javax.json.JsonReader; import java.io.Reader; import java.nio.file.Path; import java.util.ResourceBundle; /** * Created by usta on 17.07.2015. */ @Component public class ExtensionConfigBean extends ConfigurationBase { private IntegerProperty defaultImageScale = new SimpleIntegerProperty(2); private IntegerProperty defaultImageZoom = new SimpleIntegerProperty(2); private IntegerProperty defaultImageDpi = new SimpleIntegerProperty(200); public int getDefaultImageScale() { return defaultImageScale.get(); } public IntegerProperty defaultImageScaleProperty() { return defaultImageScale; } public void setDefaultImageScale(int defaultImageScale) { this.defaultImageScale.set(defaultImageScale); } public int getDefaultImageZoom() { return defaultImageZoom.get(); } public IntegerProperty defaultImageZoomProperty() { return defaultImageZoom; } public void setDefaultImageZoom(int defaultImageZoom) { this.defaultImageZoom.set(defaultImageZoom); } public int getDefaultImageDpi() { return defaultImageDpi.get(); } public IntegerProperty defaultImageDpiProperty() { return defaultImageDpi; } public void setDefaultImageDpi(int defaultImageDpi) { this.defaultImageDpi.set(defaultImageDpi); } private Logger logger = LoggerFactory.getLogger(ExtensionConfigBean.class); private final ApplicationController controller; private final ThreadService threadService; private final TabService tabService; private final Button saveButton = new Button("Save"); private final Button loadButton = new Button("Load"); private final Label infoLabel = new Label(); @Autowired public ExtensionConfigBean(ApplicationController controller, ThreadService threadService, TabService tabService) { super(controller, threadService); this.controller = controller; this.threadService = threadService; this.tabService = tabService; } @Override public String formName() { return "Extension Settings"; } @Override public VBox createForm() { FXForm editorConfigForm = new FXFormBuilder<>() .resourceBundle(ResourceBundle.getBundle("terminalConfig")) .includeAndReorder( "defaultImageScale", "defaultImageZoom", "defaultImageDpi") .build(); DefaultFactoryProvider editorConfigFormProvider = new DefaultFactoryProvider(); FileChooserEditableFactory fileChooserEditableFactory = new FileChooserEditableFactory(); editorConfigForm.setEditorFactoryProvider(editorConfigFormProvider); fileChooserEditableFactory.setOnEdit(tabService::addTab); editorConfigForm.setSource(this); VBox vBox = new VBox(); vBox.getChildren().add(editorConfigForm); saveButton.setOnAction(this::save); loadButton.setOnAction(this::load); HBox box = new HBox(5, saveButton, loadButton, infoLabel); box.setPadding(new Insets(0, 0, 15, 5)); vBox.getChildren().add(box); return vBox; } @Override public Path getConfigPath() { return super.resolveConfigPath("extension_config.json"); } @Override public void load(ActionEvent... actionEvent) { fadeOut(infoLabel, "Loading..."); Reader fileReader = IOHelper.fileReader(getConfigPath()); JsonReader jsonReader = Json.createReader(fileReader); JsonObject jsonObject = jsonReader.readObject(); Integer defaultImageScale = jsonObject.getInt("defaultImageScale", this.defaultImageScale.getValue()); Integer defaultImageZoom = jsonObject.getInt("defaultImageZoom", this.defaultImageZoom.getValue()); Integer defaultImageDpi = jsonObject.getInt("defaultImageDpi", this.defaultImageDpi.getValue()); IOHelper.close(jsonReader, fileReader); threadService.runActionLater(() -> { this.setDefaultImageScale(defaultImageScale); this.setDefaultImageZoom(defaultImageZoom); this.setDefaultImageDpi(defaultImageDpi); fadeOut(infoLabel, "Loaded..."); }); } @Override public void save(ActionEvent... actionEvent) { infoLabel.setText("Saving..."); saveJson(getJSON()); fadeOut(infoLabel, "Saved..."); } @Override public JsonObject getJSON() { JsonObjectBuilder objectBuilder = Json.createObjectBuilder(); objectBuilder .add("defaultImageScale", getDefaultImageScale()) .add("defaultImageZoom", getDefaultImageZoom()) .add("defaultImageDpi", getDefaultImageDpi()); return objectBuilder.build(); } }