mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-05-22 04:31:27 +00:00
Split preferences into multiple tabs
This commit is contained in:
@@ -5,8 +5,8 @@ public enum FxmlFile {
|
||||
ADDVAULT_WELCOME("/fxml/addvault_welcome.fxml"), //
|
||||
ADDVAULT_EXISTING("/fxml/addvault_existing.fxml"), //
|
||||
ADDVAULT_NEW_NAME("/fxml/addvault_new_name.fxml"), //
|
||||
ADDVAULT_NEW_LOCATION("/fxml/addvault_new_location.fxml"),
|
||||
ADDVAULT_NEW_PASSWORD("/fxml/addvault_new_password.fxml"),
|
||||
ADDVAULT_NEW_LOCATION("/fxml/addvault_new_location.fxml"), //
|
||||
ADDVAULT_NEW_PASSWORD("/fxml/addvault_new_password.fxml"), //
|
||||
PREFERENCES("/fxml/preferences.fxml"), //
|
||||
UNLOCK("/fxml/unlock2.fxml"), // TODO rename
|
||||
UNLOCK_SUCCESS("/fxml/unlock_success.fxml");
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
package org.cryptomator.ui.preferences;
|
||||
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.binding.BooleanBinding;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.CheckBox;
|
||||
import javafx.scene.control.ChoiceBox;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.util.StringConverter;
|
||||
import org.cryptomator.common.settings.Settings;
|
||||
import org.cryptomator.common.settings.UiTheme;
|
||||
import org.cryptomator.common.settings.VolumeImpl;
|
||||
import org.cryptomator.common.settings.WebDavUrlScheme;
|
||||
import org.cryptomator.common.vaults.Volume;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@PreferencesScoped
|
||||
public class GeneralPreferencesController implements FxController {
|
||||
|
||||
private final Settings settings;
|
||||
private final BooleanBinding showWebDavSettings;
|
||||
public ChoiceBox<UiTheme> themeChoiceBox;
|
||||
public CheckBox startHiddenCheckbox;
|
||||
public CheckBox debugModeCheckbox;
|
||||
public ChoiceBox<VolumeImpl> volumeTypeChoicBox;
|
||||
public TextField webDavPortField;
|
||||
public Button changeWebDavPortButton;
|
||||
public ChoiceBox<WebDavUrlScheme> webDavUrlSchemeChoiceBox;
|
||||
|
||||
@Inject
|
||||
GeneralPreferencesController(Settings settings) {
|
||||
this.settings = settings;
|
||||
this.showWebDavSettings = Bindings.equal(settings.preferredVolumeImpl(), VolumeImpl.WEBDAV);
|
||||
}
|
||||
|
||||
public void initialize() {
|
||||
themeChoiceBox.getItems().addAll(UiTheme.values());
|
||||
themeChoiceBox.valueProperty().bindBidirectional(settings.theme());
|
||||
themeChoiceBox.setConverter(new UiThemeConverter());
|
||||
|
||||
startHiddenCheckbox.selectedProperty().bindBidirectional(settings.startHidden());
|
||||
|
||||
debugModeCheckbox.selectedProperty().bindBidirectional(settings.debugMode());
|
||||
|
||||
volumeTypeChoicBox.getItems().addAll(Volume.getCurrentSupportedAdapters());
|
||||
volumeTypeChoicBox.valueProperty().bindBidirectional(settings.preferredVolumeImpl());
|
||||
volumeTypeChoicBox.setConverter(new VolumeImplConverter());
|
||||
|
||||
webDavPortField.setText(String.valueOf(settings.port().get()));
|
||||
changeWebDavPortButton.visibleProperty().bind(settings.port().asString().isNotEqualTo(webDavPortField.textProperty()));
|
||||
changeWebDavPortButton.disableProperty().bind(Bindings.createBooleanBinding(this::validateWebDavPort, webDavPortField.textProperty()).not());
|
||||
|
||||
webDavUrlSchemeChoiceBox.getItems().addAll(WebDavUrlScheme.values());
|
||||
webDavUrlSchemeChoiceBox.valueProperty().bindBidirectional(settings.preferredGvfsScheme());
|
||||
webDavUrlSchemeChoiceBox.setConverter(new WebDavUrlSchemeConverter());
|
||||
}
|
||||
|
||||
private boolean validateWebDavPort() {
|
||||
try {
|
||||
int port = Integer.parseInt(webDavPortField.getText());
|
||||
return port == 0 // choose port automatically
|
||||
|| port >= Settings.MIN_PORT && port <= Settings.MAX_PORT; // port within range
|
||||
} catch (NumberFormatException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void doChangeWebDavPort() {
|
||||
settings.port().set(Integer.parseInt(webDavPortField.getText()));
|
||||
}
|
||||
|
||||
/* Property Getters */
|
||||
|
||||
public BooleanBinding showWebDavSettingsProperty() {
|
||||
return showWebDavSettings;
|
||||
}
|
||||
|
||||
public Boolean getShowWebDavSettings() {
|
||||
return showWebDavSettings.get();
|
||||
}
|
||||
|
||||
/* Helper classes */
|
||||
|
||||
private static class UiThemeConverter extends StringConverter<UiTheme> {
|
||||
|
||||
@Override
|
||||
public String toString(UiTheme impl) {
|
||||
return impl.getDisplayName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public UiTheme fromString(String string) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
private static class WebDavUrlSchemeConverter extends StringConverter<WebDavUrlScheme> {
|
||||
|
||||
@Override
|
||||
public String toString(WebDavUrlScheme scheme) {
|
||||
return scheme.getDisplayName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public WebDavUrlScheme fromString(String string) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
private static class VolumeImplConverter extends StringConverter<VolumeImpl> {
|
||||
|
||||
@Override
|
||||
public String toString(VolumeImpl impl) {
|
||||
return impl.getDisplayName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public VolumeImpl fromString(String string) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,128 +1,13 @@
|
||||
package org.cryptomator.ui.preferences;
|
||||
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.beans.binding.BooleanBinding;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.CheckBox;
|
||||
import javafx.scene.control.ChoiceBox;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.util.StringConverter;
|
||||
import org.cryptomator.common.settings.Settings;
|
||||
import org.cryptomator.common.settings.UiTheme;
|
||||
import org.cryptomator.common.settings.VolumeImpl;
|
||||
import org.cryptomator.common.settings.WebDavUrlScheme;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
import org.cryptomator.common.vaults.Volume;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@PreferencesScoped
|
||||
public class PreferencesController implements FxController {
|
||||
|
||||
private final Settings settings;
|
||||
private final BooleanBinding showWebDavSettings;
|
||||
public ChoiceBox<UiTheme> themeChoiceBox;
|
||||
public CheckBox startHiddenCheckbox;
|
||||
public CheckBox checkForUpdatesCheckbox;
|
||||
public CheckBox debugModeCheckbox;
|
||||
public ChoiceBox<VolumeImpl> volumeTypeChoicBox;
|
||||
public TextField webDavPortField;
|
||||
public Button changeWebDavPortButton;
|
||||
public ChoiceBox<WebDavUrlScheme> webDavUrlSchemeChoiceBox;
|
||||
|
||||
@Inject
|
||||
PreferencesController(Settings settings) {
|
||||
this.settings = settings;
|
||||
this.showWebDavSettings = Bindings.equal(settings.preferredVolumeImpl(), VolumeImpl.WEBDAV);
|
||||
}
|
||||
|
||||
public void initialize() {
|
||||
themeChoiceBox.getItems().addAll(UiTheme.values());
|
||||
themeChoiceBox.valueProperty().bindBidirectional(settings.theme());
|
||||
themeChoiceBox.setConverter(new UiThemeConverter());
|
||||
|
||||
startHiddenCheckbox.selectedProperty().bindBidirectional(settings.startHidden());
|
||||
|
||||
checkForUpdatesCheckbox.selectedProperty().bindBidirectional(settings.checkForUpdates());
|
||||
|
||||
debugModeCheckbox.selectedProperty().bindBidirectional(settings.debugMode());
|
||||
|
||||
volumeTypeChoicBox.getItems().addAll(Volume.getCurrentSupportedAdapters());
|
||||
volumeTypeChoicBox.valueProperty().bindBidirectional(settings.preferredVolumeImpl());
|
||||
volumeTypeChoicBox.setConverter(new VolumeImplConverter());
|
||||
|
||||
webDavPortField.setText(String.valueOf(settings.port().get()));
|
||||
changeWebDavPortButton.visibleProperty().bind(settings.port().asString().isNotEqualTo(webDavPortField.textProperty()));
|
||||
changeWebDavPortButton.disableProperty().bind(Bindings.createBooleanBinding(this::validateWebDavPort, webDavPortField.textProperty()).not());
|
||||
|
||||
webDavUrlSchemeChoiceBox.getItems().addAll(WebDavUrlScheme.values());
|
||||
webDavUrlSchemeChoiceBox.valueProperty().bindBidirectional(settings.preferredGvfsScheme());
|
||||
webDavUrlSchemeChoiceBox.setConverter(new WebDavUrlSchemeConverter());
|
||||
}
|
||||
|
||||
private boolean validateWebDavPort() {
|
||||
try {
|
||||
int port = Integer.parseInt(webDavPortField.getText());
|
||||
return port == 0 // choose port automatically
|
||||
|| port >= Settings.MIN_PORT && port <= Settings.MAX_PORT; // port within range
|
||||
} catch (NumberFormatException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void doChangeWebDavPort() {
|
||||
settings.port().set(Integer.parseInt(webDavPortField.getText()));
|
||||
}
|
||||
|
||||
/* Property Getters */
|
||||
|
||||
public BooleanBinding showWebDavSettingsProperty() {
|
||||
return showWebDavSettings;
|
||||
}
|
||||
|
||||
public Boolean getShowWebDavSettings() {
|
||||
return showWebDavSettings.get();
|
||||
}
|
||||
|
||||
/* Helper classes */
|
||||
|
||||
private static class UiThemeConverter extends StringConverter<UiTheme> {
|
||||
|
||||
@Override
|
||||
public String toString(UiTheme impl) {
|
||||
return impl.getDisplayName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public UiTheme fromString(String string) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
private static class WebDavUrlSchemeConverter extends StringConverter<WebDavUrlScheme> {
|
||||
|
||||
@Override
|
||||
public String toString(WebDavUrlScheme scheme) {
|
||||
return scheme.getDisplayName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public WebDavUrlScheme fromString(String string) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
private static class VolumeImplConverter extends StringConverter<VolumeImpl> {
|
||||
|
||||
@Override
|
||||
public String toString(VolumeImpl impl) {
|
||||
return impl.getDisplayName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public VolumeImpl fromString(String string) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
public PreferencesController() {}
|
||||
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import dagger.multibindings.IntoMap;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
import org.cryptomator.ui.common.FXMLLoaderFactory;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
@@ -52,5 +51,14 @@ abstract class PreferencesModule {
|
||||
@FxControllerKey(PreferencesController.class)
|
||||
abstract FxController bindPreferencesController(PreferencesController controller);
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@FxControllerKey(GeneralPreferencesController.class)
|
||||
abstract FxController bindGeneralPreferencesController(GeneralPreferencesController controller);
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@FxControllerKey(UpdatesPreferencesController.class)
|
||||
abstract FxController bindUpdatesPreferencesController(UpdatesPreferencesController controller);
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package org.cryptomator.ui.preferences;
|
||||
|
||||
import javafx.scene.control.CheckBox;
|
||||
import org.cryptomator.common.settings.Settings;
|
||||
import org.cryptomator.ui.common.FxController;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@PreferencesScoped
|
||||
public class UpdatesPreferencesController implements FxController {
|
||||
|
||||
private final Settings settings;
|
||||
public CheckBox checkForUpdatesCheckbox;
|
||||
|
||||
@Inject
|
||||
UpdatesPreferencesController(Settings settings) {
|
||||
this.settings = settings;
|
||||
}
|
||||
|
||||
public void initialize() {
|
||||
checkForUpdatesCheckbox.selectedProperty().bindBidirectional(settings.checkForUpdates());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -90,6 +90,33 @@
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* TabPane *
|
||||
* *
|
||||
******************************************************************************/
|
||||
|
||||
.tab-pane {
|
||||
-fx-tab-min-height: 24;
|
||||
}
|
||||
.tab-pane > .tab-header-area {
|
||||
-fx-padding: 6px 12px 0 12px;
|
||||
-fx-background-color: CONTROL_BORDER_FOCUSED, MAIN_BG;
|
||||
-fx-background-insets: 0, 0 0 1 0;
|
||||
}
|
||||
.tab-pane > .tab-header-area > .headers-region > .tab {
|
||||
-fx-text-fill: TEXT_FILL;
|
||||
-fx-alignment: CENTER;
|
||||
-fx-background-color: CONTROL_BORDER_NORMAL, CONTROL_BORDER_FOCUSED, MAIN_BG;
|
||||
-fx-background-insets: 0, 1px 1px 0 1px, 1px;
|
||||
-fx-background-radius: 4px 4px 0 0;
|
||||
-fx-padding: 0.2em 0.4em 0.2em 0.4em;
|
||||
}
|
||||
.tab-pane > .tab-header-area > .headers-region > .tab:selected {
|
||||
-fx-background-color: CONTROL_BORDER_FOCUSED, MAIN_BG;
|
||||
-fx-background-insets: 0, 1px 1px 0 1px;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* SplitPane *
|
||||
|
||||
@@ -90,6 +90,33 @@
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* TabPane *
|
||||
* *
|
||||
******************************************************************************/
|
||||
|
||||
.tab-pane {
|
||||
-fx-tab-min-height: 24;
|
||||
}
|
||||
.tab-pane > .tab-header-area {
|
||||
-fx-padding: 6px 12px 0 12px;
|
||||
-fx-background-color: CONTROL_BORDER_FOCUSED, MAIN_BG;
|
||||
-fx-background-insets: 0, 0 0 1 0;
|
||||
}
|
||||
.tab-pane > .tab-header-area > .headers-region > .tab {
|
||||
-fx-text-fill: TEXT_FILL;
|
||||
-fx-alignment: CENTER;
|
||||
-fx-background-color: CONTROL_BORDER_NORMAL, CONTROL_BORDER_FOCUSED, MAIN_BG;
|
||||
-fx-background-insets: 0, 1px 1px 0 1px, 1px;
|
||||
-fx-background-radius: 4px 4px 0 0;
|
||||
-fx-padding: 0.2em 0.4em 0.2em 0.4em;
|
||||
}
|
||||
.tab-pane > .tab-header-area > .headers-region > .tab:selected {
|
||||
-fx-background-color: CONTROL_BORDER_FOCUSED, MAIN_BG;
|
||||
-fx-background-insets: 0, 1px 1px 0 1px;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* SplitPane *
|
||||
|
||||
@@ -1,47 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.CheckBox?>
|
||||
<?import javafx.scene.control.ChoiceBox?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import org.cryptomator.ui.controls.NumericTextField?>
|
||||
<VBox xmlns="http://javafx.com/javafx"
|
||||
xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="org.cryptomator.ui.preferences.PreferencesController"
|
||||
styleClass="preferences-window"
|
||||
spacing="6">
|
||||
<padding>
|
||||
<Insets bottom="12" left="12" right="12" top="12"/>
|
||||
</padding>
|
||||
<children>
|
||||
<HBox spacing="6" alignment="BASELINE_LEFT">
|
||||
<Label text="%preferences.theme"/>
|
||||
<ChoiceBox fx:id="themeChoiceBox"/>
|
||||
</HBox>
|
||||
|
||||
<CheckBox fx:id="startHiddenCheckbox" text="%preferences.startHidden"/>
|
||||
|
||||
<CheckBox fx:id="checkForUpdatesCheckbox" text="%preferences.autoUpdateCheck"/>
|
||||
|
||||
<CheckBox fx:id="debugModeCheckbox" text="%preferences.debugLogging"/>
|
||||
|
||||
<HBox spacing="6" alignment="BASELINE_LEFT">
|
||||
<Label text="%preferences.volumeType"/>
|
||||
<ChoiceBox fx:id="volumeTypeChoicBox"/>
|
||||
</HBox>
|
||||
|
||||
<HBox spacing="6" alignment="BASELINE_LEFT" visible="${controller.showWebDavSettings}">
|
||||
<Label text="TODO WebDAV Port"/>
|
||||
<NumericTextField fx:id="webDavPortField"/>
|
||||
<Button text="TODO Apply" fx:id="changeWebDavPortButton" onAction="#doChangeWebDavPort"/>
|
||||
</HBox>
|
||||
|
||||
<HBox spacing="6" alignment="BASELINE_LEFT" visible="${controller.showWebDavSettings}">
|
||||
<Label text="TODO WebDAV Scheme"/>
|
||||
<ChoiceBox fx:id="webDavUrlSchemeChoiceBox" maxWidth="Infinity"/>
|
||||
</HBox>
|
||||
</children>
|
||||
</VBox>
|
||||
<?import javafx.scene.control.Tab?>
|
||||
<?import javafx.scene.control.TabPane?>
|
||||
<TabPane xmlns="http://javafx.com/javafx"
|
||||
xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="org.cryptomator.ui.preferences.PreferencesController"
|
||||
side="TOP"
|
||||
tabClosingPolicy="UNAVAILABLE"
|
||||
tabDragPolicy="FIXED">
|
||||
<tabs>
|
||||
<Tab text="TODO General">
|
||||
<content>
|
||||
<fx:include source="/fxml/preferences_general.fxml"/>
|
||||
</content>
|
||||
</Tab>
|
||||
<Tab text="TODO Updates">
|
||||
<content>
|
||||
<fx:include source="/fxml/preferences_updates.fxml"/>
|
||||
</content>
|
||||
</Tab>
|
||||
</tabs>
|
||||
</TabPane>
|
||||
|
||||
44
main/ui/src/main/resources/fxml/preferences_general.fxml
Normal file
44
main/ui/src/main/resources/fxml/preferences_general.fxml
Normal file
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.CheckBox?>
|
||||
<?import javafx.scene.control.ChoiceBox?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import org.cryptomator.ui.controls.NumericTextField?>
|
||||
<VBox xmlns="http://javafx.com/javafx"
|
||||
xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="org.cryptomator.ui.preferences.GeneralPreferencesController"
|
||||
spacing="6">
|
||||
<padding>
|
||||
<Insets bottom="12" left="12" right="12" top="12"/>
|
||||
</padding>
|
||||
<children>
|
||||
<HBox spacing="6" alignment="BASELINE_LEFT">
|
||||
<Label text="%preferences.theme"/>
|
||||
<ChoiceBox fx:id="themeChoiceBox"/>
|
||||
</HBox>
|
||||
|
||||
<CheckBox fx:id="startHiddenCheckbox" text="%preferences.startHidden"/>
|
||||
|
||||
<CheckBox fx:id="debugModeCheckbox" text="%preferences.debugLogging"/>
|
||||
|
||||
<HBox spacing="6" alignment="BASELINE_LEFT">
|
||||
<Label text="%preferences.volumeType"/>
|
||||
<ChoiceBox fx:id="volumeTypeChoicBox"/>
|
||||
</HBox>
|
||||
|
||||
<HBox spacing="6" alignment="BASELINE_LEFT" visible="${controller.showWebDavSettings}">
|
||||
<Label text="TODO WebDAV Port"/>
|
||||
<NumericTextField fx:id="webDavPortField"/>
|
||||
<Button text="TODO Apply" fx:id="changeWebDavPortButton" onAction="#doChangeWebDavPort"/>
|
||||
</HBox>
|
||||
|
||||
<HBox spacing="6" alignment="BASELINE_LEFT" visible="${controller.showWebDavSettings}">
|
||||
<Label text="TODO WebDAV Scheme"/>
|
||||
<ChoiceBox fx:id="webDavUrlSchemeChoiceBox" maxWidth="Infinity"/>
|
||||
</HBox>
|
||||
</children>
|
||||
</VBox>
|
||||
16
main/ui/src/main/resources/fxml/preferences_updates.fxml
Normal file
16
main/ui/src/main/resources/fxml/preferences_updates.fxml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.CheckBox?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<VBox xmlns="http://javafx.com/javafx"
|
||||
xmlns:fx="http://javafx.com/fxml"
|
||||
fx:controller="org.cryptomator.ui.preferences.UpdatesPreferencesController"
|
||||
spacing="6">
|
||||
<padding>
|
||||
<Insets bottom="12" left="12" right="12" top="12"/>
|
||||
</padding>
|
||||
<children>
|
||||
<CheckBox fx:id="checkForUpdatesCheckbox" text="%preferences.autoUpdateCheck"/>
|
||||
</children>
|
||||
</VBox>
|
||||
Reference in New Issue
Block a user