package com.kodcu.config; import com.kodcu.component.ToggleButtonBuilt; import com.kodcu.controller.ApplicationController; import com.kodcu.service.ThreadService; import javafx.geometry.Insets; import javafx.scene.control.*; import javafx.scene.layout.FlowPane; import javafx.scene.layout.Priority; import javafx.scene.layout.VBox; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; /** * Created by usta on 17.07.2015. */ @Component public class ConfigurationService { private final LocationConfigBean locationConfigBean; private final EditorConfigBean editorConfigBean; private final PreviewConfigBean previewConfigBean; private final HtmlConfigBean htmlConfigBean; private final OdfConfigBean odfConfigBean; private final DocbookConfigBean docbookConfigBean; private final ApplicationController controller; private final StoredConfigBean storedConfigBean; private final ThreadService threadService; private final SpellcheckConfigBean spellcheckConfigBean; private final TerminalConfigBean terminalConfigBean; private final ExtensionConfigBean extensionConfigBean; private VBox configBox; @Autowired public ConfigurationService(LocationConfigBean locationConfigBean, EditorConfigBean editorConfigBean, PreviewConfigBean previewConfigBean, HtmlConfigBean htmlConfigBean, OdfConfigBean odfConfigBean, DocbookConfigBean docbookConfigBean, ApplicationController controller, StoredConfigBean storedConfigBean, ThreadService threadService, SpellcheckConfigBean spellcheckConfigBean, TerminalConfigBean terminalConfigBean, ExtensionConfigBean extensionConfigBean) { this.locationConfigBean = locationConfigBean; this.editorConfigBean = editorConfigBean; this.previewConfigBean = previewConfigBean; this.htmlConfigBean = htmlConfigBean; this.odfConfigBean = odfConfigBean; this.docbookConfigBean = docbookConfigBean; this.controller = controller; this.storedConfigBean = storedConfigBean; this.threadService = threadService; this.spellcheckConfigBean = spellcheckConfigBean; this.terminalConfigBean = terminalConfigBean; this.extensionConfigBean = extensionConfigBean; } public void loadConfigurations(Runnable... runnables) { locationConfigBean.load(); storedConfigBean.load(); editorConfigBean.load(); previewConfigBean.load(); htmlConfigBean.load(); odfConfigBean.load(); docbookConfigBean.load(); spellcheckConfigBean.load(); terminalConfigBean.load(); extensionConfigBean.load(); List<ConfigurationBase> configBeanList = Arrays.asList( editorConfigBean, terminalConfigBean, locationConfigBean, previewConfigBean, htmlConfigBean, docbookConfigBean, // odfConfigBean, extensionConfigBean // ,spellcheckConfigBean ); ScrollPane formsPane = new ScrollPane(); ToggleGroup toggleGroup = new ToggleGroup(); controller.setConfigToggleGroup(toggleGroup); FlowPane flowPane = new FlowPane(5, 5); flowPane.setPadding(new Insets(5, 0, 0, 0)); List<ToggleButton> toggleButtons = new ArrayList<>(); VBox editorConfigForm = null; for (ConfigurationBase configBean : configBeanList) { VBox form = configBean.createForm(); ToggleButton toggleButton = ToggleButtonBuilt.item(configBean.formName()).click(event -> { formsPane.setContent(form); }); toggleButtons.add(toggleButton); if (Objects.isNull(editorConfigForm)) editorConfigForm = form; } final VBox finalEditorConfigForm = editorConfigForm; threadService.runActionLater(() -> { formsPane.setContent(finalEditorConfigForm); for (ToggleButton toggleButton : toggleButtons) { toggleGroup.getToggles().add(toggleButton); flowPane.getChildren().add(toggleButton); } configBox = controller.getConfigBox(); configBox.getChildren().add(flowPane); configBox.getChildren().add(formsPane); VBox.setVgrow(formsPane, Priority.ALWAYS); for (Runnable runnable : runnables) { runnable.run(); } }); } }