/* * This file is part of the Illarion project. * * Copyright © 2015 - Illarion e.V. * * Illarion is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Illarion 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. */ package illarion.common.config.entries; import illarion.common.config.Config; import illarion.common.types.Range; import illarion.common.util.FastMath; import org.jetbrains.annotations.Contract; import javax.annotation.Nonnull; import javax.annotation.Nullable; /** * This is a configuration entry that is used to display a number range entry in * the configuration dialog. So a simple yes/no option. * * @author Martin Karing <nitram@illarion.org> */ public final class NumberEntry implements ConfigEntry { /** * The configuration that is controlled by this text entry. */ @Nullable private Config cfg; /** * The key in the configuration that is handled by this configuration. */ @Nonnull private final String configEntry; /** * The range the value is allowed to work in. */ @Nonnull private final Range range; /** * Create a new configuration entry that is handled by this entry. * * @param entry the configuration key that is handled by this text entry * @param minLimit the minimal value that is allowed for this entry * @param maxLimit the maximal value that is allowed for this entry */ public NumberEntry(@Nonnull String entry, int minLimit, int maxLimit) { configEntry = entry; range = new Range(minLimit, maxLimit); } /** * Get the range this number entry is allowed to use. * * @return the range of this number entry */ @Nonnull @Contract(pure = true) public Range getRange() { return range; } /** * Get the value set in the configuration for this check entry. * * @return the configuration stored for this check entry */ @Contract(pure = true) public int getValue() { if (cfg == null) { throw new IllegalStateException("Reference to configuration system is not set."); } return FastMath.clamp(cfg.getInteger(configEntry), range); } /** * Set the configuration handled by this configuration entry. * * @param config the configuration that is supposed to be handled by this * configuration entry */ @Override public void setConfig(@Nonnull Config config) { cfg = config; } /** * Set the new value of the configuration entry that is controlled by this. * * @param newValue the new configuration value */ public void setValue(int newValue) { if (cfg == null) { throw new IllegalStateException("Reference to configuration system is not set."); } cfg.set(configEntry, FastMath.clamp(newValue, range)); } }