Search in sources :

Example 1 with UICheckbox

use of org.terasology.nui.widgets.UICheckbox in project Terasology by MovingBlocks.

the class TelemetryScreen method addTelemetryField.

/**
 * Add a new row in the menu, the new row includes the field name and value.
 *
 * @param type the type(name) of the this field
 * @param value the value of this field
 * @param layout the layout where the new line will be added
 * @param isWithCheckbox whether add a check box in the line
 * @param telemetryCategory the TelemetryCategory that this field belongs to
 */
private void addTelemetryField(String type, Object value, ColumnLayout layout, boolean isWithCheckbox, TelemetryCategory telemetryCategory) {
    RowLayout newRow;
    if (isWithCheckbox) {
        String fieldName = telemetryCategory.id() + ":" + type;
        UICheckbox uiCheckbox = new UICheckbox(fieldName);
        Map<String, Boolean> bindingMap = config.getTelemetryConfig().getMetricsUserPermissionConfig().getBindingMap();
        if (!bindingMap.containsKey(fieldName)) {
            bindingMap.put(fieldName, config.getTelemetryConfig().isTelemetryEnabled());
        }
        Binding<Boolean> binding = getBindingFromBooleanMap(bindingMap, fieldName);
        uiCheckbox.bindChecked(binding);
        uiCheckbox.subscribe((checkbox) -> {
            if (bindingMap.get(fieldName)) {
                bindingMap.put(telemetryCategory.id(), true);
            } else {
                Set<Field> fields = ReflectionUtils.getFields(telemetryCategories.get(telemetryCategory), ReflectionUtils.withAnnotation(TelemetryField.class));
                boolean isOneEnabled = false;
                for (Field field : fields) {
                    isOneEnabled = isOneEnabled || bindingMap.get(telemetryCategory.id() + ":" + field.getName());
                }
                if (!isOneEnabled) {
                    bindingMap.put(telemetryCategory.id(), false);
                }
            }
        });
        newRow = new RowLayout(new UILabel(type), new UILabel(value.toString()), uiCheckbox).setColumnRatios(0.4f, 0.5f, 0.1f).setHorizontalSpacing(horizontalSpacing);
    } else {
        newRow = new RowLayout(new UILabel(type), new UILabel(value.toString())).setColumnRatios(0.4f, 0.5f).setHorizontalSpacing(horizontalSpacing);
    }
    layout.addWidget(newRow);
}
Also used : UILabel(org.terasology.nui.widgets.UILabel) Field(java.lang.reflect.Field) RowLayout(org.terasology.nui.layouts.RowLayout) UICheckbox(org.terasology.nui.widgets.UICheckbox)

Example 2 with UICheckbox

use of org.terasology.nui.widgets.UICheckbox in project Terasology by MovingBlocks.

the class TelemetryScreen method addTelemetrySection.

/**
 * Add a new section with represents a new metrics type.
 *
 * @param telemetryCategory the annotation of the new metric
 * @param layout the layout where the new section will be added
 * @param map the map which includes the telemetry field name and value
 */
private void addTelemetrySection(TelemetryCategory telemetryCategory, ColumnLayout layout, Map<String, ?> map) {
    UILabel categoryHeader = new UILabel(translationSystem.translate(telemetryCategory.displayName()));
    categoryHeader.setFamily("subheading");
    UICheckbox uiCheckbox = new UICheckbox(telemetryCategory.id());
    Map<String, Boolean> bindingMap = config.getTelemetryConfig().getMetricsUserPermissionConfig().getBindingMap();
    if (!bindingMap.containsKey(telemetryCategory.id())) {
        bindingMap.put(telemetryCategory.id(), config.getTelemetryConfig().isTelemetryEnabled());
    }
    Binding<Boolean> binding = getBindingFromBooleanMap(bindingMap, telemetryCategory.id());
    uiCheckbox.bindChecked(binding);
    RowLayout newRow = new RowLayout(categoryHeader, new UISpace(), uiCheckbox).setColumnRatios(0.4f, 0.5f, 0.1f).setHorizontalSpacing(horizontalSpacing);
    layout.addWidget(newRow);
    List<Map.Entry<String, ?>> telemetryFields = sortFields(map);
    for (Map.Entry entry : telemetryFields) {
        Object value = entry.getValue();
        if (value == null) {
            value = "Value unknown yet";
        }
        boolean isWithCheckbox = !telemetryCategory.isOneMapMetric();
        if (value instanceof List) {
            List list = (List) value;
            addTelemetryField(entry.getKey().toString(), list, layout, isWithCheckbox, telemetryCategory);
        } else {
            addTelemetryField(entry.getKey().toString(), value, layout, isWithCheckbox, telemetryCategory);
        }
    }
}
Also used : UILabel(org.terasology.nui.widgets.UILabel) UICheckbox(org.terasology.nui.widgets.UICheckbox) RowLayout(org.terasology.nui.layouts.RowLayout) ArrayList(java.util.ArrayList) List(java.util.List) UISpace(org.terasology.nui.widgets.UISpace) Map(java.util.Map)

Example 3 with UICheckbox

use of org.terasology.nui.widgets.UICheckbox in project Terasology by MovingBlocks.

the class TelemetryScreen method addEnablingAllTelemetryListener.

/**
 * Add a listener to the telemetryEnable checkbox. If the checkbox os enabled/disabled, it will enable/disable all
 * the telemetry field.
 */
private void addEnablingAllTelemetryListener() {
    UICheckbox uiCheckbox = this.find("telemetryEnabled", UICheckbox.class);
    if (uiCheckbox != null) {
        uiCheckbox.subscribe((checkbox) -> {
            boolean telemetryEnabled = config.getTelemetryConfig().isTelemetryEnabled();
            Map<String, Boolean> bindingMap = config.getTelemetryConfig().getMetricsUserPermissionConfig().getBindingMap();
            for (Map.Entry<String, Boolean> entry : bindingMap.entrySet()) {
                entry.setValue(telemetryEnabled);
            }
            fetchTelemetryCategoriesFromEngineOnlyEnvironment();
            for (Map.Entry<TelemetryCategory, Class> telemetryCategory : telemetryCategories.entrySet()) {
                UICheckbox categoryBox = this.find(telemetryCategory.getKey().id(), UICheckbox.class);
                if (categoryBox != null) {
                    categoryBox.setEnabled(telemetryEnabled);
                }
                Set<Field> fields = ReflectionUtils.getFields(telemetryCategory.getValue(), ReflectionUtils.withAnnotation(TelemetryField.class));
                for (Field field : fields) {
                    String fieldName = telemetryCategory.getKey().id() + ":" + field.getName();
                    UICheckbox fieldBox = this.find(fieldName, UICheckbox.class);
                    if (fieldBox != null) {
                        fieldBox.setEnabled(telemetryEnabled);
                    }
                }
            }
        });
    }
}
Also used : UICheckbox(org.terasology.nui.widgets.UICheckbox) Field(java.lang.reflect.Field) Map(java.util.Map)

Example 4 with UICheckbox

use of org.terasology.nui.widgets.UICheckbox in project Terasology by MovingBlocks.

the class TelemetryScreen method addGroupEnablingListener.

/**
 * Add a listener to the checkbox in the telemetry category row. If this checkbox is checked, all the sub telemetry
 * fields will be enabled/disabled.
 */
private void addGroupEnablingListener() {
    fetchTelemetryCategoriesFromEngineOnlyEnvironment();
    for (Map.Entry<TelemetryCategory, Class> telemetryCategory : telemetryCategories.entrySet()) {
        if (!telemetryCategory.getKey().isOneMapMetric()) {
            UICheckbox uiCheckbox = this.find(telemetryCategory.getKey().id(), UICheckbox.class);
            if (uiCheckbox == null) {
                continue;
            }
            uiCheckbox.subscribe((checkbox) -> {
                Map<String, Boolean> bindingMap = config.getTelemetryConfig().getMetricsUserPermissionConfig().getBindingMap();
                if (bindingMap.containsKey(telemetryCategory.getKey().id())) {
                    boolean isGroupEnable = bindingMap.get(telemetryCategory.getKey().id());
                    Set<Field> fields = ReflectionUtils.getFields(telemetryCategory.getValue(), ReflectionUtils.withAnnotation(TelemetryField.class));
                    for (Field field : fields) {
                        String fieldName = telemetryCategory.getKey().id() + ":" + field.getName();
                        bindingMap.put(fieldName, isGroupEnable);
                    }
                }
            });
        }
    }
}
Also used : Field(java.lang.reflect.Field) UICheckbox(org.terasology.nui.widgets.UICheckbox) Map(java.util.Map)

Example 5 with UICheckbox

use of org.terasology.nui.widgets.UICheckbox in project Terasology by MovingBlocks.

the class InputSettingsScreen method addInputSection.

private void addInputSection(ColumnLayout layout, String name, ControllerInfo info) {
    UILabel categoryHeader = new UILabel(name);
    categoryHeader.setFamily("subheading");
    layout.addWidget(categoryHeader);
    float columnRatio = 0.4f;
    UICheckbox invertX = new UICheckbox();
    invertX.bindChecked(BindHelper.bindBeanProperty("invertX", info, Boolean.TYPE));
    layout.addWidget(new RowLayout(new UILabel(translationSystem.translate("${engine:menu#invert-x}")), invertX).setColumnRatios(columnRatio).setHorizontalSpacing(horizontalSpacing));
    UICheckbox invertY = new UICheckbox();
    invertY.bindChecked(BindHelper.bindBeanProperty("invertY", info, Boolean.TYPE));
    layout.addWidget(new RowLayout(new UILabel(translationSystem.translate("${engine:menu#invert-y}")), invertY).setColumnRatios(columnRatio).setHorizontalSpacing(horizontalSpacing));
    UICheckbox invertZ = new UICheckbox();
    invertZ.bindChecked(BindHelper.bindBeanProperty("invertZ", info, Boolean.TYPE));
    layout.addWidget(new RowLayout(new UILabel(translationSystem.translate("${engine:menu#invert-z}")), invertZ).setColumnRatios(columnRatio).setHorizontalSpacing(horizontalSpacing));
    UISlider mvmtDeadZone = new UISlider();
    mvmtDeadZone.setIncrement(0.01f);
    mvmtDeadZone.setMinimum(0);
    mvmtDeadZone.setRange(1);
    mvmtDeadZone.setPrecision(2);
    mvmtDeadZone.bindValue(BindHelper.bindBeanProperty("movementDeadZone", info, Float.TYPE));
    layout.addWidget(new RowLayout(new UILabel(translationSystem.translate("${engine:menu#movement-dead-zone}")), mvmtDeadZone).setColumnRatios(columnRatio).setHorizontalSpacing(horizontalSpacing));
    UISlider rotDeadZone = new UISlider();
    rotDeadZone.setIncrement(0.01f);
    rotDeadZone.setMinimum(0);
    rotDeadZone.setRange(1);
    rotDeadZone.setPrecision(2);
    rotDeadZone.bindValue(BindHelper.bindBeanProperty("rotationDeadZone", info, Float.TYPE));
    layout.addWidget(new RowLayout(new UILabel(translationSystem.translate("${engine:menu#rotation-dead-zone}")), rotDeadZone).setColumnRatios(columnRatio).setHorizontalSpacing(horizontalSpacing));
    layout.addWidget(new UISpace(new Vector2i(0, 16)));
}
Also used : UILabel(org.terasology.nui.widgets.UILabel) UISlider(org.terasology.nui.widgets.UISlider) RowLayout(org.terasology.nui.layouts.RowLayout) UISpace(org.terasology.nui.widgets.UISpace) Vector2i(org.joml.Vector2i) UICheckbox(org.terasology.nui.widgets.UICheckbox)

Aggregations

UICheckbox (org.terasology.nui.widgets.UICheckbox)8 Map (java.util.Map)4 RowLayout (org.terasology.nui.layouts.RowLayout)4 UILabel (org.terasology.nui.widgets.UILabel)4 Field (java.lang.reflect.Field)3 Vector2i (org.joml.Vector2i)3 UISpace (org.terasology.nui.widgets.UISpace)3 ArrayList (java.util.ArrayList)2 List (java.util.List)2 SimpleUri (org.terasology.engine.core.SimpleUri)2 UISlider (org.terasology.nui.widgets.UISlider)2 TargetLengthBasedClassNameAbbreviator (ch.qos.logback.classic.pattern.TargetLengthBasedClassNameAbbreviator)1 ImmutableSet (com.google.common.collect.ImmutableSet)1 Lists (com.google.common.collect.Lists)1 Maps (com.google.common.collect.Maps)1 ThreadFactoryBuilder (com.google.common.util.concurrent.ThreadFactoryBuilder)1 URL (java.net.URL)1 Collection (java.util.Collection)1 Comparator (java.util.Comparator)1 Iterator (java.util.Iterator)1