/** * erlyberly, erlang trace debugger * Copyright (C) 2016 Andy Till * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package erlyberly; import java.net.URL; import java.util.ResourceBundle; import erlyberly.format.ErlangFormatter; import erlyberly.format.ElixirFormatter; import erlyberly.format.LFEFormatter; import javafx.beans.Observable; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.CheckBox; import javafx.scene.control.RadioButton; import javafx.scene.control.TextField; import javafx.scene.control.ToggleGroup; public class PreferencesView implements Initializable { @FXML private TextField nodeNameField; @FXML private TextField cookieField; @FXML private CheckBox autoConnectField; @FXML private CheckBox showSourceInSystemEditorBox; @FXML private CheckBox hideProcesses; @FXML private CheckBox hideModules; @FXML private RadioButton erlangTermsButton; @FXML private RadioButton elixirTermsButton; @FXML private RadioButton lfeTermsButton; @Override public void initialize(URL url, ResourceBundle r) { selectFormattingButton(); final ToggleGroup group; group = new ToggleGroup(); group.selectedToggleProperty().addListener((Observable o) -> { storeFormattingPreferenceChange(); }); erlangTermsButton.setToggleGroup(group); elixirTermsButton.setToggleGroup(group); lfeTermsButton.setToggleGroup(group); PrefBind.bind("targetNodeName", nodeNameField.textProperty()); PrefBind.bind("cookieName", cookieField.textProperty()); PrefBind.bindBoolean("autoConnect", autoConnectField.selectedProperty()); PrefBind.bindBoolean("hideProcesses", hideProcesses.selectedProperty()); PrefBind.bindBoolean("hideModules", hideModules.selectedProperty()); PrefBind.bindBoolean("showSourceInSystemEditor", showSourceInSystemEditorBox.selectedProperty()); } private void storeFormattingPreferenceChange() { if(erlangTermsButton.isSelected()) { PrefBind.set("termFormatting", "erlang"); ErlyBerly.setTermFormatter(new ErlangFormatter()); } else if(elixirTermsButton.isSelected()) { PrefBind.set("termFormatting", "elixir"); ErlyBerly.setTermFormatter(new ElixirFormatter()); } else if(lfeTermsButton.isSelected()) { PrefBind.set("termFormatting", "lfe"); ErlyBerly.setTermFormatter(new LFEFormatter()); } selectFormattingButton(); } private void selectFormattingButton() { String formattingPref = PrefBind.getOrDefault("termFormatting", "erlang").toString(); if("erlang".equals(formattingPref)) { erlangTermsButton.setSelected(true); } else if("elixir".equals(formattingPref)) { elixirTermsButton.setSelected(true); } else if("lfe".equals(formattingPref)) { lfeTermsButton.setSelected(true); } else throw new RuntimeException("Invalid configuration for property 'termFormatting' it must be 'erlang' or 'lfe' but was " + formattingPref); } }