package ru.testing.client.controllers; import javafx.fxml.FXML; import javafx.scene.Node; import javafx.scene.control.*; import javafx.scene.layout.GridPane; import ru.testing.client.MainApp; import ru.testing.client.common.DataBase; import ru.testing.client.common.objects.Settings; import ru.testing.client.common.properties.DefaultProperties; import ru.testing.client.elements.Dialogs; import ru.testing.client.elements.tabs.WsMessageTab; /** * Controller for settings tab form */ public class TabSettingsController { private static final String FONT_SIZE_FORMAT = "-fx-font-size: %spx;"; private DataBase dataBase = DataBase.getInstance(); private MainController mainController = MainApp.getMainController(); @FXML private CheckBox chWrap; @FXML private CheckBox chPretty; @FXML private Label fontLabel; @FXML private Slider fontSlider; @FXML private CheckBox cbAutoScroll; @FXML private CheckBox cbWsSslValidate; @FXML private void initialize() { // Slider value listener fontSlider.valueProperty().addListener(observable -> fontLabel.setText( String.format("%spx", ((Number) fontSlider.getValue()).intValue()) ) ); // Set value from database setSettingsValues(dataBase.getSettings()); } /** * Load default settings action */ @FXML private void loadDefaultSettings() { setSettingsValues(DefaultProperties.getInstance().getDefaultSettings()); } /** * Save current settings state action */ @FXML private void saveSettings() { // Enable loader mainController.setProgressVisible(true); // Save new settings in database boolean status = dataBase.setSettings(new Settings( ((Number) fontSlider.getValue()).intValue(), chWrap.isSelected(), cbAutoScroll.isSelected(), cbWsSslValidate.isSelected() )); if (status) { Settings settings = dataBase.getSettings(); // Set font size for all messages for (Tab tab : mainController.getTabPane().getTabs()) { if (tab instanceof WsMessageTab) { Node tabNode = tab.getContent(); if (tabNode instanceof GridPane) { for (Node node : ((GridPane) tabNode).getChildren()) { if (node instanceof TextArea || node instanceof ListView) { node.setStyle(String.format(FONT_SIZE_FORMAT, settings.getFontSize())); node.applyCss(); } } } } } // Show successful dialog new Dialogs().getInfoDialog("Settings save successful"); } else { new Dialogs().getWarningDialog("Error save settings. See log."); } // Disable loader mainController.setProgressVisible(false); } /** * Set settings value from database */ private void setSettingsValues(Settings settings) { // Enable loader mainController.setProgressVisible(true); // Set text wrap value chWrap.setSelected(settings.isTextWrap()); // Set font size value fontSlider.setValue(settings.getFontSize()); // Set auto scroll status cbAutoScroll.setSelected(settings.isAutoScroll()); // Set ws ssl validate status cbWsSslValidate.setSelected(settings.isWsSslValidate()); // Disable loader mainController.setProgressVisible(false); } }