package envoy.client.ui.settings; import javafx.scene.control.*; import dev.kske.eventbus.core.EventBus; import envoy.data.User.UserStatus; import envoy.client.data.SettingsItem; import envoy.client.event.ThemeChangeEvent; import envoy.client.ui.StatusTrayIcon; import envoy.client.util.UserUtil; /** * @author Kai S. K. Engelbart * @since Envoy Client v0.1-beta */ public final class GeneralSettingsPane extends SettingsPane { /** * @since Envoy Client v0.1-beta */ public GeneralSettingsPane() { super("General"); setSpacing(10); final var settingsItems = settings.getItems(); // Add hide on close if supported final var hideOnCloseCheckbox = new SettingsCheckbox((SettingsItem) settingsItems.get("hideOnClose")); final var hideOnCloseTooltip = new Tooltip(StatusTrayIcon.isSupported() ? "If selected, Envoy will still be present in the task bar when closed." : "status tray icon is not supported on your system."); hideOnCloseTooltip.setWrapText(true); hideOnCloseCheckbox.setTooltip(hideOnCloseTooltip); hideOnCloseCheckbox.setDisable(!StatusTrayIcon.isSupported()); getChildren().add(hideOnCloseCheckbox); final var enterToSendCheckbox = new SettingsCheckbox((SettingsItem) settingsItems.get("enterToSend")); final var enterToSendTooltip = new Tooltip( "When selected, messages can be sent pressing \"Enter\". A line break can be inserted by pressing \"Ctrl\" + \"Enter\". Else it will be the other way around."); enterToSendTooltip.setWrapText(true); enterToSendCheckbox.setTooltip(enterToSendTooltip); getChildren().add(enterToSendCheckbox); final var askForConfirmationCheckbox = new SettingsCheckbox((SettingsItem) settingsItems.get("askForConfirmation")); final var askForConfirmationTooltip = new Tooltip("When selected, nothing will prompt a confirmation dialog"); askForConfirmationTooltip.setWrapText(true); askForConfirmationCheckbox.setTooltip(askForConfirmationTooltip); getChildren().add(askForConfirmationCheckbox); final var combobox = new ComboBox(); combobox.getItems().add("dark"); combobox.getItems().add("light"); combobox .setTooltip(new Tooltip("Determines the current theme Envoy will be displayed in.")); combobox.setValue(settings.getCurrentTheme()); combobox.setOnAction(e -> { settings.setCurrentTheme(combobox.getValue()); EventBus.getInstance().dispatch(new ThemeChangeEvent()); }); getChildren().add(combobox); final var statusComboBox = new ComboBox(); statusComboBox.getItems().setAll(UserStatus.values()); statusComboBox.setValue(context.getLocalDB().getUser().getStatus()); statusComboBox.setTooltip(new Tooltip("Change your current status")); statusComboBox.setOnAction(e -> UserUtil.changeStatus(statusComboBox.getValue())); getChildren().add(statusComboBox); final var logoutButton = new Button("Logout"); logoutButton.setOnAction(e -> UserUtil.logout()); final var logoutTooltip = new Tooltip( "Brings you back to the login screen and removes \"remember me\" status from this account"); logoutTooltip.setWrapText(true); logoutButton.setTooltip(logoutTooltip); getChildren().add(logoutButton); } }