mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 02:38:02 +00:00
1094 lines
57 KiB
Java
1094 lines
57 KiB
Java
package forge.screens.settings;
|
|
|
|
import com.badlogic.gdx.utils.Align;
|
|
import com.google.common.collect.Lists;
|
|
import forge.Forge;
|
|
import forge.Graphics;
|
|
import forge.MulliganDefs;
|
|
import forge.StaticData;
|
|
import forge.adventure.util.Config;
|
|
import forge.ai.AiProfileUtil;
|
|
import forge.assets.*;
|
|
import forge.game.GameLogEntryType;
|
|
import forge.gui.GuiBase;
|
|
import forge.localinstance.properties.ForgeConstants;
|
|
import forge.localinstance.properties.ForgeNetPreferences;
|
|
import forge.localinstance.properties.ForgePreferences;
|
|
import forge.localinstance.properties.ForgePreferences.FPref;
|
|
import forge.localinstance.properties.PreferencesStore;
|
|
import forge.model.FModel;
|
|
import forge.screens.FScreen;
|
|
import forge.screens.TabPageScreen;
|
|
import forge.screens.TabPageScreen.TabPage;
|
|
import forge.screens.home.HomeScreen;
|
|
import forge.screens.match.MatchController;
|
|
import forge.sound.MusicPlaylist;
|
|
import forge.sound.SoundSystem;
|
|
import forge.toolbox.FCheckBox;
|
|
import forge.toolbox.FGroupList;
|
|
import forge.toolbox.FList;
|
|
import forge.toolbox.FOptionPane;
|
|
import forge.util.Callback;
|
|
import forge.util.Utils;
|
|
|
|
import java.util.*;
|
|
|
|
public class SettingsPage extends TabPage<SettingsScreen> {
|
|
private final FGroupList<Setting> lstSettings = add(new FGroupList<>());
|
|
private final CustomSelectSetting settingSkins;
|
|
private final CustomSelectSetting settingCJKFonts;
|
|
|
|
public SettingsPage() {
|
|
super(Forge.getLocalizer().getMessage("lblSettings"), Forge.hdbuttons ? FSkinImage.HDPREFERENCE : FSkinImage.SETTINGS);
|
|
|
|
lstSettings.setListItemRenderer(new SettingRenderer());
|
|
|
|
lstSettings.addGroup(Forge.getLocalizer().getMessage("lblGeneralSettings"));
|
|
lstSettings.addGroup(Forge.getLocalizer().getMessage("lblGameplayOptions"));
|
|
lstSettings.addGroup(Forge.getLocalizer().getMessage("RandomDeckGeneration"));
|
|
lstSettings.addGroup(Forge.getLocalizer().getMessage("AdvancedSettings"));
|
|
lstSettings.addGroup(Forge.getLocalizer().getMessage("GraphicOptions"));
|
|
lstSettings.addGroup(Forge.getLocalizer().getMessage("lblCardOverlays"));
|
|
lstSettings.addGroup(Forge.getLocalizer().getMessage("lblVibrationOptions"));
|
|
lstSettings.addGroup(Forge.getLocalizer().getMessage("SoundOptions"));
|
|
lstSettings.addGroup(Forge.getLocalizer().getMessage("ServerPreferences"));
|
|
|
|
//General Settings
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.UI_LANGUAGE, Forge.getLocalizer().getMessage("cbpSelectLanguage"),
|
|
Forge.getLocalizer().getMessage("nlSelectLanguage"),
|
|
FLanguage.getAllLanguages()) {
|
|
@Override
|
|
public void valueChanged(String newValue) {
|
|
// if the new locale needs to use CJK font, disallow change if UI_CJK_FONT is not set yet
|
|
ForgePreferences prefs = FModel.getPreferences();
|
|
if (prefs.getPref(FPref.UI_CJK_FONT).isEmpty() &&
|
|
(newValue.equals("zh-CN") || newValue.equals("ja-JP"))) {
|
|
String message = "Please download CJK font (from \"Files\"), and set it before change language.";
|
|
if (newValue.equals("zh-CN")) {
|
|
message += "\nChinese please use \"SourceHanSansCN\".";
|
|
}
|
|
if (newValue.equals("ja-JP")) {
|
|
message += "\nJapanese please use \"SourceHanSansJP\".";
|
|
}
|
|
FOptionPane.showMessageDialog(message, "Please set CJK Font");
|
|
return;
|
|
}
|
|
|
|
FLanguage.changeLanguage(newValue);
|
|
|
|
FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblRestartForgeDescription"), Forge.getLocalizer().getMessage("lblRestartForge"), Forge.getLocalizer().getMessage("lblRestart"), Forge.getLocalizer().getMessage("lblLater"), new Callback<Boolean>() {
|
|
@Override
|
|
public void run(Boolean result) {
|
|
if (result) {
|
|
Forge.restart(true);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}, 0);
|
|
settingSkins = new CustomSelectSetting(FPref.UI_SKIN, Forge.getLocalizer().getMessage("lblTheme"),
|
|
Forge.getLocalizer().getMessage("nlTheme"),
|
|
FSkin.getAllSkins()) {
|
|
@Override
|
|
public void valueChanged(String newValue) {
|
|
FSkin.changeSkin(newValue);
|
|
}
|
|
};
|
|
lstSettings.addItem(settingSkins, 0);
|
|
settingCJKFonts = new CustomSelectSetting(FPref.UI_CJK_FONT, Forge.getLocalizer().getMessage("lblCJKFont"),
|
|
Forge.getLocalizer().getMessage("nlCJKFont"),
|
|
FSkinFont.getAllCJKFonts()) {
|
|
@Override
|
|
public void valueChanged(String newValue) {
|
|
ForgePreferences prefs = FModel.getPreferences();
|
|
if (newValue.equals("None")) {
|
|
// If locale needs to use CJK fonts, disallow change to None
|
|
String locale = prefs.getPref(FPref.UI_LANGUAGE);
|
|
if (locale.equals("zh-CN") || locale.equals("ja-JP")) {
|
|
return;
|
|
}
|
|
newValue = "";
|
|
}
|
|
if (newValue.equals(prefs.getPref(FPref.UI_CJK_FONT))) {
|
|
return;
|
|
}
|
|
super.valueChanged(newValue);
|
|
}
|
|
};
|
|
lstSettings.addItem(settingCJKFonts, 0);
|
|
if (GuiBase.isAndroid()) {
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_LANDSCAPE_MODE,
|
|
Forge.getLocalizer().getMessage("lblLandscapeMode"),
|
|
Forge.getLocalizer().getMessage("nlLandscapeMode")) {
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
boolean landscapeMode = FModel.getPreferences().getPrefBoolean(FPref.UI_LANDSCAPE_MODE);
|
|
Forge.getDeviceAdapter().setLandscapeMode(landscapeMode); //ensure device able to save off ini file so landscape change takes effect
|
|
if (Forge.isLandscapeMode() != landscapeMode) {
|
|
FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblRestartForgeDescription"), Forge.getLocalizer().getMessage("lblRestartForge"), Forge.getLocalizer().getMessage("lblRestart"), Forge.getLocalizer().getMessage("lblLater"), new Callback<Boolean>() {
|
|
@Override
|
|
public void run(Boolean result) {
|
|
if (result) {
|
|
Forge.restart(true);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}, 0);
|
|
/*lstSettings.addItem(new BooleanSetting(FPref.UI_ANDROID_MINIMIZE_ON_SCRLOCK,
|
|
Forge.getLocalizer().getMessage("lblMinimizeScreenLock"),
|
|
Forge.getLocalizer().getMessage("nlMinimizeScreenLock")),
|
|
0);*/
|
|
} else {
|
|
//fullscreen
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_FULLSCREEN_MODE,
|
|
Forge.getLocalizer().getMessage("lblFullScreenMode"),
|
|
Forge.getLocalizer().getMessage("nlFullScreenMode")){
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
Config.instance().getSettingData().fullScreen = FModel.getPreferences().getPrefBoolean(FPref.UI_FULLSCREEN_MODE);
|
|
Config.instance().saveSettings();
|
|
}
|
|
},0);
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.UI_VIDEO_MODE,
|
|
Forge.getLocalizer().getMessage("lblVideoMode"),
|
|
Forge.getLocalizer().getMessage("nlVideoMode"),
|
|
ForgeConstants.VIDEO_MODES) {
|
|
@Override
|
|
public void valueChanged(String newValue) {
|
|
super.valueChanged(newValue);
|
|
String mode = newValue;
|
|
Graphics.setVideoMode(mode);
|
|
}
|
|
}, 0);
|
|
}
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.UI_SELECTOR_MODE,
|
|
Forge.getLocalizer().getMessage("lblSelectorMode"),
|
|
Forge.getLocalizer().getMessage("nlSelectorMode"),
|
|
new String[]{"Default", "Classic", "Adventure"}) {
|
|
@Override
|
|
public void valueChanged(String newValue) {
|
|
super.valueChanged(newValue);
|
|
Forge.selector = FModel.getPreferences().getPref(FPref.UI_SELECTOR_MODE);
|
|
}
|
|
}, 0);
|
|
lstSettings.addItem(new BooleanSetting(FPref.USE_SENTRY,
|
|
Forge.getLocalizer().getMessage("lblAutomaticBugReports"),
|
|
Forge.getLocalizer().getMessage("nlAutomaticBugReports")),
|
|
0);
|
|
|
|
//Gameplay Options
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.MULLIGAN_RULE, Forge.getLocalizer().getMessage("cbpMulliganRule"),
|
|
Forge.getLocalizer().getMessage("nlpMulliganRule"),
|
|
MulliganDefs.getMulliganRuleNames()) {
|
|
@Override
|
|
public void valueChanged(String newValue) {
|
|
super.valueChanged(newValue);
|
|
StaticData.instance().setMulliganRule(MulliganDefs.GetRuleByName(FModel.getPreferences().getPref(FPref.MULLIGAN_RULE)));
|
|
}
|
|
}, 1);
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.UI_CURRENT_AI_PROFILE,
|
|
Forge.getLocalizer().getMessage("cbpAiProfiles"),
|
|
Forge.getLocalizer().getMessage("nlpAiProfiles"),
|
|
AiProfileUtil.getProfilesArray()),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ANTE,
|
|
Forge.getLocalizer().getMessage("cbAnte"),
|
|
Forge.getLocalizer().getMessage("nlAnte")),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ANTE_MATCH_RARITY,
|
|
Forge.getLocalizer().getMessage("cbAnteMatchRarity"),
|
|
Forge.getLocalizer().getMessage("nlAnteMatchRarity")),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.MATCH_HOT_SEAT_MODE,
|
|
Forge.getLocalizer().getMessage("lblHotSeatMode"),
|
|
Forge.getLocalizer().getMessage("nlHotSeatMode")),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ENABLE_AI_CHEATS,
|
|
Forge.getLocalizer().getMessage("cbEnableAICheats"),
|
|
Forge.getLocalizer().getMessage("nlEnableAICheats")),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_MANABURN,
|
|
Forge.getLocalizer().getMessage("cbManaBurn"),
|
|
Forge.getLocalizer().getMessage("nlManaBurn")),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.LEGACY_ORDER_COMBATANTS,
|
|
Forge.getLocalizer().getMessage("cbOrderCombatants"),
|
|
Forge.getLocalizer().getMessage("nlOrderCombatants")),
|
|
1);
|
|
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_MANA_LOST_PROMPT,
|
|
Forge.getLocalizer().getMessage("cbManaLostPrompt"),
|
|
Forge.getLocalizer().getMessage("nlManaLostPrompt")),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.ENFORCE_DECK_LEGALITY,
|
|
Forge.getLocalizer().getMessage("cbEnforceDeckLegality"),
|
|
Forge.getLocalizer().getMessage("nlEnforceDeckLegality")),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.PERFORMANCE_MODE,
|
|
Forge.getLocalizer().getMessage("cbPerformanceMode"),
|
|
Forge.getLocalizer().getMessage("nlPerformanceMode")),
|
|
1);
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.MATCH_AI_SIDEBOARDING_MODE, Forge.getLocalizer().getMessage("cbpAiSideboardingMode"),
|
|
Forge.getLocalizer().getMessage("nlpAiSideboardingMode"),
|
|
Lists.newArrayList("Off", "AI", "Human For AI")) {
|
|
@Override
|
|
public void valueChanged(String newValue) {
|
|
super.valueChanged(newValue);
|
|
AiProfileUtil.setAiSideboardingMode(AiProfileUtil.AISideboardingMode.normalizedValueOf(newValue));
|
|
}
|
|
}, 1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.MATCH_EXPERIMENTAL_RESTORE,
|
|
Forge.getLocalizer().getMessage("cbExperimentalRestore"),
|
|
Forge.getLocalizer().getMessage("nlExperimentalRestore")),
|
|
1);
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.MATCH_AI_TIMEOUT, Forge.getLocalizer().getMessage("cbAITimeout"),
|
|
Forge.getLocalizer().getMessage("nlAITimeout"),
|
|
Lists.newArrayList("5", "10", "60", "120", "240", "300", "600")),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ORDER_HAND,
|
|
Forge.getLocalizer().getMessage("cbOrderHand"),
|
|
Forge.getLocalizer().getMessage("nlOrderHand")),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.FILTERED_HANDS,
|
|
Forge.getLocalizer().getMessage("cbFilteredHands"),
|
|
Forge.getLocalizer().getMessage("nlFilteredHands")),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_CLONE_MODE_SOURCE,
|
|
Forge.getLocalizer().getMessage("cbCloneImgSource"),
|
|
Forge.getLocalizer().getMessage("nlCloneImgSource")),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_DETAILED_SPELLDESC_IN_PROMPT,
|
|
Forge.getLocalizer().getMessage("cbDetailedPaymentDesc"),
|
|
Forge.getLocalizer().getMessage("nlDetailedPaymentDesc")),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_GRAY_INACTIVE_TEXT,
|
|
Forge.getLocalizer().getMessage("cbGrayText"),
|
|
Forge.getLocalizer().getMessage("nlGrayText")),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_SHOW_STORM_COUNT_IN_PROMPT,
|
|
Forge.getLocalizer().getMessage("cbShowStormCount"),
|
|
Forge.getLocalizer().getMessage("nlShowStormCount")),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_PRESELECT_PREVIOUS_ABILITY_ORDER,
|
|
Forge.getLocalizer().getMessage("cbPreselectPrevAbOrder"),
|
|
Forge.getLocalizer().getMessage("nlPreselectPrevAbOrder")),
|
|
1);
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.UI_ALLOW_ORDER_GRAVEYARD_WHEN_NEEDED,
|
|
Forge.getLocalizer().getMessage("lblOrderGraveyard"),
|
|
Forge.getLocalizer().getMessage("nlOrderGraveyard"),
|
|
new String[]{
|
|
ForgeConstants.GRAVEYARD_ORDERING_NEVER, ForgeConstants.GRAVEYARD_ORDERING_OWN_CARDS,
|
|
ForgeConstants.GRAVEYARD_ORDERING_ALWAYS}),
|
|
1);
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.UI_AUTO_YIELD_MODE,
|
|
Forge.getLocalizer().getMessage("lblAutoYields"),
|
|
Forge.getLocalizer().getMessage("nlpAutoYieldMode"),
|
|
new String[]{ForgeConstants.AUTO_YIELD_PER_ABILITY, ForgeConstants.AUTO_YIELD_PER_CARD}),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ALLOW_ESC_TO_END_TURN,
|
|
Forge.getLocalizer().getMessage("cbEscapeEndsTurn"),
|
|
Forge.getLocalizer().getMessage("nlEscapeEndsTurn")),
|
|
1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ALT_PLAYERINFOLAYOUT,
|
|
Forge.getLocalizer().getMessage("lblAltLifeDisplay"),
|
|
Forge.getLocalizer().getMessage("nlAltLifeDisplay")){
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
//update
|
|
Forge.altPlayerLayout = FModel.getPreferences().getPrefBoolean(FPref.UI_ALT_PLAYERINFOLAYOUT);
|
|
if (MatchController.instance != null)
|
|
MatchController.instance.resetPlayerPanels();
|
|
}
|
|
},1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ALT_PLAYERZONETABS,
|
|
Forge.getLocalizer().getMessage("lblAltZoneTabs"),
|
|
Forge.getLocalizer().getMessage("nlAltZoneTabs")){
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
//update
|
|
Forge.altZoneTabs = FModel.getPreferences().getPrefBoolean(FPref.UI_ALT_PLAYERZONETABS);
|
|
if (MatchController.instance != null)
|
|
MatchController.instance.resetPlayerPanels();
|
|
}
|
|
},1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ANIMATED_CARD_TAPUNTAP,
|
|
Forge.getLocalizer().getMessage("lblAnimatedCardTapUntap"),
|
|
Forge.getLocalizer().getMessage("nlAnimatedCardTapUntap")){
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
//update
|
|
Forge.animatedCardTapUntap = FModel.getPreferences().getPrefBoolean(FPref.UI_ANIMATED_CARD_TAPUNTAP);
|
|
}
|
|
},1);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_STACK_CREATURES,
|
|
Forge.getLocalizer().getMessage("cbStackCreatures"),
|
|
Forge.getLocalizer().getMessage("nlStackCreatures")),
|
|
1);
|
|
|
|
//Random Deck Generation
|
|
lstSettings.addItem(new BooleanSetting(FPref.DECKGEN_NOSMALL,
|
|
Forge.getLocalizer().getMessage("cbRemoveSmall"),
|
|
Forge.getLocalizer().getMessage("nlRemoveSmall")),
|
|
2);
|
|
lstSettings.addItem(new BooleanSetting(FPref.DECKGEN_CARDBASED,
|
|
Forge.getLocalizer().getMessage("cbCardBased"),
|
|
Forge.getLocalizer().getMessage("nlCardBased")),
|
|
2);
|
|
lstSettings.addItem(new BooleanSetting(FPref.DECKGEN_SINGLETONS,
|
|
Forge.getLocalizer().getMessage("cbSingletons"),
|
|
Forge.getLocalizer().getMessage("nlSingletons")),
|
|
2);
|
|
lstSettings.addItem(new BooleanSetting(FPref.DECKGEN_ARTIFACTS,
|
|
Forge.getLocalizer().getMessage("cbRemoveArtifacts"),
|
|
Forge.getLocalizer().getMessage("nlRemoveArtifacts")),
|
|
2);
|
|
|
|
//Advanced Settings
|
|
lstSettings.addItem(new BooleanSetting(FPref.DEV_MODE_ENABLED,
|
|
Forge.getLocalizer().getMessage("cbDevMode"),
|
|
Forge.getLocalizer().getMessage("nlDevMode")) {
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
//update DEV_MODE flag when preference changes
|
|
ForgePreferences.DEV_MODE = FModel.getPreferences().getPrefBoolean(FPref.DEV_MODE_ENABLED);
|
|
}
|
|
}, 3);
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.DEV_LOG_ENTRY_TYPE,
|
|
Forge.getLocalizer().getMessage("cbpGameLogEntryType"),
|
|
Forge.getLocalizer().getMessage("nlGameLogEntryType"),
|
|
GameLogEntryType.class),
|
|
3);
|
|
lstSettings.addItem(new BooleanSetting(FPref.LOAD_CARD_SCRIPTS_LAZILY,
|
|
Forge.getLocalizer().getMessage("cbLoadCardsLazily"),
|
|
Forge.getLocalizer().getMessage("nlLoadCardsLazily")),
|
|
3);
|
|
lstSettings.addItem(new BooleanSetting(FPref.LOAD_ARCHIVED_FORMATS,
|
|
Forge.getLocalizer().getMessage("cbLoadArchivedFormats"),
|
|
Forge.getLocalizer().getMessage("nlLoadArchivedFormats")),
|
|
3);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_LOAD_UNKNOWN_CARDS,
|
|
Forge.getLocalizer().getMessage("lblEnableUnknownCards"),
|
|
Forge.getLocalizer().getMessage("nlEnableUnknownCards")) {
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
FOptionPane.showConfirmDialog(
|
|
Forge.getLocalizer().getMessage("lblRestartForgeDescription"),
|
|
Forge.getLocalizer().getMessage("lblRestartForge"),
|
|
Forge.getLocalizer().getMessage("lblRestart"),
|
|
Forge.getLocalizer().getMessage("lblLater"), new Callback<Boolean>() {
|
|
@Override
|
|
public void run(Boolean result) {
|
|
if (result) {
|
|
Forge.restart(true);
|
|
}
|
|
}
|
|
}
|
|
);
|
|
}
|
|
},
|
|
3);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_LOAD_NONLEGAL_CARDS,
|
|
Forge.getLocalizer().getMessage("lblEnableNonLegalCards"),
|
|
Forge.getLocalizer().getMessage("nlEnableNonLegalCards")) {
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
FOptionPane.showConfirmDialog(
|
|
Forge.getLocalizer().getMessage("lblRestartForgeDescription"),
|
|
Forge.getLocalizer().getMessage("lblRestartForge"),
|
|
Forge.getLocalizer().getMessage("lblRestart"),
|
|
Forge.getLocalizer().getMessage("lblLater"), new Callback<Boolean>() {
|
|
@Override
|
|
public void run(Boolean result) {
|
|
if (result) {
|
|
Forge.restart(true);
|
|
}
|
|
}
|
|
}
|
|
);
|
|
}
|
|
},
|
|
3);
|
|
lstSettings.addItem(new BooleanSetting(FPref.ALLOW_CUSTOM_CARDS_IN_DECKS_CONFORMANCE,
|
|
Forge.getLocalizer().getMessage("lblAllowCustomCardsInDecks"),
|
|
Forge.getLocalizer().getMessage("nlAllowCustomCardsInDecks")) {
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
FOptionPane.showConfirmDialog(
|
|
Forge.getLocalizer().getMessage("lblRestartForgeDescription"),
|
|
Forge.getLocalizer().getMessage("lblRestartForge"),
|
|
Forge.getLocalizer().getMessage("lblRestart"),
|
|
Forge.getLocalizer().getMessage("lblLater"), new Callback<Boolean>() {
|
|
@Override
|
|
public void run(Boolean result) {
|
|
if (result) {
|
|
Forge.restart(true);
|
|
}
|
|
}
|
|
}
|
|
);
|
|
}
|
|
},
|
|
3);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_NETPLAY_COMPAT,
|
|
Forge.getLocalizer().getMessage("lblExperimentalNetworkCompatibility"),
|
|
Forge.getLocalizer().getMessage("nlExperimentalNetworkCompatibility")) {
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
GuiBase.enablePropertyConfig(FModel.getPreferences().getPrefBoolean(FPref.UI_NETPLAY_COMPAT));
|
|
}
|
|
},
|
|
3);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ENABLE_DISPOSE_TEXTURES,
|
|
Forge.getLocalizer().getMessage("lblDisposeTextures"),
|
|
Forge.getLocalizer().getMessage("nlDisposeTextures")) {
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
Forge.disposeTextures = FModel.getPreferences().getPrefBoolean(FPref.UI_ENABLE_DISPOSE_TEXTURES);
|
|
}
|
|
},
|
|
3);
|
|
if (GuiBase.isAndroid()) { //this option does nothing except on Android
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_AUTO_CACHE_SIZE,
|
|
Forge.getLocalizer().getMessage("lblAutoCacheSize"),
|
|
Forge.getLocalizer().getMessage("nlAutoCacheSize")) {
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
FOptionPane.showConfirmDialog (
|
|
Forge.getLocalizer().getMessage("lblRestartForgeDescription"),
|
|
Forge.getLocalizer().getMessage("lblRestartForge"),
|
|
Forge.getLocalizer().getMessage("lblRestart"),
|
|
Forge.getLocalizer().getMessage("lblLater"), new Callback<Boolean>() {
|
|
@Override
|
|
public void run(Boolean result) {
|
|
if (result) {
|
|
Forge.restart(true);
|
|
}
|
|
}
|
|
}
|
|
);
|
|
}
|
|
},
|
|
3);
|
|
}
|
|
//Graphic Options
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_DISABLE_CARD_IMAGES,
|
|
Forge.getLocalizer().getMessage("lblDisableCardImages"),
|
|
Forge.getLocalizer().getMessage("nlDisableCardImages")) {
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
ImageCache.getInstance().disposeTextures();
|
|
}
|
|
},
|
|
4);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ENABLE_ONLINE_IMAGE_FETCHER,
|
|
Forge.getLocalizer().getMessage("cbImageFetcher"),
|
|
Forge.getLocalizer().getMessage("nlImageFetcher")),
|
|
4);
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.UI_PREFERRED_ART,
|
|
Forge.getLocalizer().getMessage("lblPreferredArt"),
|
|
Forge.getLocalizer().getMessage("nlPreferredArt"),
|
|
FModel.getMagicDb().getCardArtAvailablePreferences()) {
|
|
@Override
|
|
public void valueChanged(String newValue) {
|
|
super.valueChanged(newValue);
|
|
FOptionPane.showConfirmDialog (
|
|
Forge.getLocalizer().getMessage("lblRestartForgeDescription"),
|
|
Forge.getLocalizer().getMessage("lblRestartForge"),
|
|
Forge.getLocalizer().getMessage("lblRestart"),
|
|
Forge.getLocalizer().getMessage("lblLater"), new Callback<Boolean>() {
|
|
@Override
|
|
public void run(Boolean result) {
|
|
if (result) {
|
|
Forge.restart(true);
|
|
}
|
|
}
|
|
}
|
|
);
|
|
}
|
|
},
|
|
4);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_SMART_CARD_ART,
|
|
Forge.getLocalizer().getMessage("lblSmartCardArtOpt"),
|
|
Forge.getLocalizer().getMessage("nlSmartCardArtOpt") + "\n"
|
|
+ Forge.getLocalizer().getMessage("nlSmartCardArtOptNote")),
|
|
4);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_OVERLAY_FOIL_EFFECT,
|
|
Forge.getLocalizer().getMessage("cbDisplayFoil"),
|
|
Forge.getLocalizer().getMessage("nlDisplayFoil")),
|
|
4);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_RANDOM_FOIL,
|
|
Forge.getLocalizer().getMessage("cbRandomFoil"),
|
|
Forge.getLocalizer().getMessage("nlRandomFoil")),
|
|
4);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_RANDOM_ART_IN_POOLS,
|
|
Forge.getLocalizer().getMessage("cbRandomArtInPools"),
|
|
Forge.getLocalizer().getMessage("nlRandomArtInPools")),
|
|
4);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_COMPACT_TABS,
|
|
Forge.getLocalizer().getMessage("lblCompactTabs"),
|
|
Forge.getLocalizer().getMessage("nlCompactTabs")) {
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
//update layout of screen when this setting changes
|
|
TabPageScreen.COMPACT_TABS = FModel.getPreferences().getPrefBoolean(FPref.UI_COMPACT_TABS);
|
|
parentScreen.revalidate();
|
|
}
|
|
},4);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_COMPACT_LIST_ITEMS,
|
|
Forge.getLocalizer().getMessage("lblCompactListItems"),
|
|
Forge.getLocalizer().getMessage("nlCompactListItems")),
|
|
4);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_HIDE_REMINDER_TEXT,
|
|
Forge.getLocalizer().getMessage("cbHideReminderText"),
|
|
Forge.getLocalizer().getMessage("nlHideReminderText")),
|
|
4);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_MATCH_IMAGE_VISIBLE,
|
|
Forge.getLocalizer().getMessage("lblShowMatchBackground"),
|
|
Forge.getLocalizer().getMessage("nlShowMatchBackground")),
|
|
4);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_LIBGDX_TEXTURE_FILTERING,
|
|
Forge.getLocalizer().getMessage("lblBattlefieldTextureFiltering"),
|
|
Forge.getLocalizer().getMessage("nlBattlefieldTextureFiltering")),
|
|
4);
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.UI_DISPLAY_CURRENT_COLORS,
|
|
Forge.getLocalizer().getMessage("cbpDisplayCurrentCardColors"),
|
|
Forge.getLocalizer().getMessage("nlDisplayCurrentCardColors"),
|
|
new String[]{
|
|
ForgeConstants.DISP_CURRENT_COLORS_NEVER, ForgeConstants.DISP_CURRENT_COLORS_MULTICOLOR,
|
|
ForgeConstants.DISP_CURRENT_COLORS_CHANGED, ForgeConstants.DISP_CURRENT_COLORS_MULTI_OR_CHANGED,
|
|
ForgeConstants.DISP_CURRENT_COLORS_ALWAYS}),
|
|
4);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ROTATE_SPLIT_CARDS,
|
|
Forge.getLocalizer().getMessage("lblRotateZoomSplit"),
|
|
Forge.getLocalizer().getMessage("nlRotateZoomSplit")),
|
|
4);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ROTATE_PLANE_OR_PHENOMENON,
|
|
Forge.getLocalizer().getMessage("lblRotateZoomPlanesPhenomena"),
|
|
Forge.getLocalizer().getMessage("nlRotateZoomPlanesPhenomena")),
|
|
4);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_DISABLE_IMAGES_EFFECT_CARDS,
|
|
Forge.getLocalizer().getMessage("lblDisableCardEffect"),
|
|
Forge.getLocalizer().getMessage("nlDisableCardEffect")),
|
|
4);
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.UI_ENABLE_BORDER_MASKING,
|
|
Forge.getLocalizer().getMessage("lblBorderMaskOption"),
|
|
Forge.getLocalizer().getMessage("nlBorderMaskOption"),
|
|
new String[]{"Off", "Crop", "Full", "Art"}) {
|
|
@Override
|
|
public void valueChanged(String newValue) {
|
|
super.valueChanged(newValue);
|
|
Forge.enableUIMask = FModel.getPreferences().getPref(FPref.UI_ENABLE_BORDER_MASKING);
|
|
ImageCache.getInstance().disposeTextures();
|
|
}
|
|
}, 4);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ENABLE_PRELOAD_EXTENDED_ART,
|
|
Forge.getLocalizer().getMessage("lblPreloadExtendedArtCards"),
|
|
Forge.getLocalizer().getMessage("nlPreloadExtendedArtCards")){
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
//update
|
|
Forge.enablePreloadExtendedArt = FModel.getPreferences().getPrefBoolean(FPref.UI_ENABLE_PRELOAD_EXTENDED_ART);
|
|
}
|
|
},4);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ENABLE_MATCH_SCROLL_INDICATOR,
|
|
Forge.getLocalizer().getMessage("lblMatchScrollIndicator"),
|
|
Forge.getLocalizer().getMessage("nlMatchScrollIndicator")),
|
|
4);
|
|
if (!GuiBase.isAndroid()) {
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ENABLE_MAGNIFIER,
|
|
Forge.getLocalizer().getMessage("lblEnableMagnifier"),
|
|
Forge.getLocalizer().getMessage("nlEnableMagnifier")){
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
//set default
|
|
if (!FModel.getPreferences().getPrefBoolean(FPref.UI_ENABLE_MAGNIFIER)) {
|
|
Forge.setCursor(FSkin.getCursor().get(0), "0");
|
|
}
|
|
}
|
|
},4);
|
|
}
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_AUTO_AIDECK_SELECTION,
|
|
Forge.getLocalizer().getMessage("lblAutoAIDeck"),
|
|
Forge.getLocalizer().getMessage("nlAutoAIDeck")){
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
//update
|
|
Forge.autoAIDeckSelection = FModel.getPreferences().getPrefBoolean(FPref.UI_AUTO_AIDECK_SELECTION);
|
|
}
|
|
},4);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_SHOW_FPS,
|
|
Forge.getLocalizer().getMessage("lblShowFPSDisplay"),
|
|
Forge.getLocalizer().getMessage("nlShowFPSDisplay")){
|
|
@Override
|
|
public void select() {
|
|
super.select();
|
|
//update
|
|
Forge.showFPS = FModel.getPreferences().getPrefBoolean(FPref.UI_SHOW_FPS);
|
|
}
|
|
},4);
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.UI_CARD_COUNTER_DISPLAY_TYPE,
|
|
Forge.getLocalizer().getMessage("cbpCounterDisplayType"),
|
|
Forge.getLocalizer().getMessage("nlCounterDisplayType"),
|
|
new String[]{
|
|
ForgeConstants.CounterDisplayType.TEXT.getName(), ForgeConstants.CounterDisplayType.IMAGE.getName(),
|
|
ForgeConstants.CounterDisplayType.HYBRID.getName(), ForgeConstants.CounterDisplayType.OLD_WHEN_SMALL.getName()}),
|
|
4);
|
|
//Card Overlays
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_SHOW_CARD_OVERLAYS,
|
|
Forge.getLocalizer().getMessage("lblShowCardOverlays"),
|
|
Forge.getLocalizer().getMessage("nlShowCardOverlays")),
|
|
5);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_OVERLAY_CARD_NAME,
|
|
Forge.getLocalizer().getMessage("lblShowCardNameOverlays"),
|
|
Forge.getLocalizer().getMessage("nlShowCardNameOverlays")),
|
|
5);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_OVERLAY_CARD_MANA_COST,
|
|
Forge.getLocalizer().getMessage("lblShowCardManaCostOverlays"),
|
|
Forge.getLocalizer().getMessage("nlShowCardManaCostOverlays")),
|
|
5);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_OVERLAY_CARD_POWER,
|
|
Forge.getLocalizer().getMessage("lblShowCardPTOverlays"),
|
|
Forge.getLocalizer().getMessage("nlShowCardPTOverlays")),
|
|
5);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_OVERLAY_CARD_ID,
|
|
Forge.getLocalizer().getMessage("lblShowCardIDOverlays"),
|
|
Forge.getLocalizer().getMessage("nlShowCardIDOverlays")),
|
|
5);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_OVERLAY_DRAFT_RANKING,
|
|
Forge.getLocalizer().getMessage("lblShowDraftRankingOverlay"),
|
|
Forge.getLocalizer().getMessage("nlShowDraftRankingOverlay")),
|
|
5);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_OVERLAY_ABILITY_ICONS,
|
|
Forge.getLocalizer().getMessage("lblShowAbilityIconsOverlays"),
|
|
Forge.getLocalizer().getMessage("nlShowAbilityIconsOverlays")),
|
|
5);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_USE_LASER_ARROWS,
|
|
Forge.getLocalizer().getMessage("lblUseLaserArrows"),
|
|
Forge.getLocalizer().getMessage("nlUseLaserArrows")),
|
|
5);
|
|
//Vibration Options
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_VIBRATE_ON_LIFE_LOSS,
|
|
Forge.getLocalizer().getMessage("lblVibrateWhenLosingLife"),
|
|
Forge.getLocalizer().getMessage("nlVibrateWhenLosingLife")),
|
|
6);
|
|
lstSettings.addItem(new BooleanSetting(FPref.UI_VIBRATE_ON_LONG_PRESS,
|
|
Forge.getLocalizer().getMessage("lblVibrateAfterLongPress"),
|
|
Forge.getLocalizer().getMessage("nlVibrateAfterLongPress")),
|
|
6);
|
|
//Sound Options
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.UI_CURRENT_SOUND_SET,
|
|
Forge.getLocalizer().getMessage("cbpSoundSets"),
|
|
Forge.getLocalizer().getMessage("nlpSoundSets"),
|
|
SoundSystem.instance.getAvailableSoundSets()) {
|
|
@Override
|
|
public void valueChanged(String newValue) {
|
|
super.valueChanged(newValue);
|
|
SoundSystem.instance.invalidateSoundCache();
|
|
}
|
|
},
|
|
7);
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.UI_CURRENT_MUSIC_SET,
|
|
Forge.getLocalizer().getMessage("cbpMusicSets"),
|
|
Forge.getLocalizer().getMessage("nlpMusicSets"),
|
|
SoundSystem.getAvailableMusicSets()) {
|
|
@Override
|
|
public void valueChanged(String newValue) {
|
|
super.valueChanged(newValue);
|
|
MusicPlaylist.invalidateMusicPlaylist();
|
|
SoundSystem.instance.changeBackgroundTrack();
|
|
}
|
|
},
|
|
7);
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.UI_VOL_SOUNDS,
|
|
Forge.getLocalizer().getMessage("cbAdjustSoundsVolume"),
|
|
Forge.getLocalizer().getMessage("nlAdjustSoundsVolume"),
|
|
new String[]{"0", "10", "20", "30", "40", "50", "60", "70", "80", "90", "100"}),
|
|
7);
|
|
lstSettings.addItem(new CustomSelectSetting(FPref.UI_VOL_MUSIC,
|
|
Forge.getLocalizer().getMessage("cbAdjustMusicVolume"),
|
|
Forge.getLocalizer().getMessage("nlAdjustMusicVolume"),
|
|
new String[]{"0", "10", "20", "30", "40", "50", "60", "70", "80", "90", "100"}) {
|
|
@Override
|
|
public void valueChanged(String newValue) {
|
|
super.valueChanged(newValue);
|
|
//update background music when this setting changes
|
|
SoundSystem.instance.changeBackgroundTrack();
|
|
}
|
|
}, 7);
|
|
/*lstSettings.addItem(new BooleanSetting(FPref.UI_ALT_SOUND_SYSTEM,
|
|
"Use Alternate Sound System",
|
|
"Use the alternate sound system (only use if you have issues with sound not playing or disappearing)."),
|
|
7);*/
|
|
lstSettings.addItem(
|
|
new IntegerSelectSetting(
|
|
ForgeNetPreferences.FNetPref.NET_PORT,
|
|
Forge.getLocalizer().getMessage("lblServerPort"),
|
|
Forge.getLocalizer().getMessage("nlServerPort"),
|
|
1024, 65535 // min and max port values
|
|
),
|
|
8
|
|
);
|
|
lstSettings.addItem(new LocalizedSelectSetting(
|
|
ForgeNetPreferences.FNetPref.UPnP,
|
|
Forge.getLocalizer().getMessage("lblUPnPTitle"),
|
|
Forge.getLocalizer().getMessage("nlServerUPnPOptions"),
|
|
ForgeConstants.getUPnPPreferenceMapping()
|
|
), 8);
|
|
|
|
|
|
}
|
|
|
|
public void refreshSkinsList() {
|
|
settingSkins.updateOptions(FSkin.getAllSkins());
|
|
}
|
|
|
|
public void refreshCJKFontsList() {
|
|
settingCJKFonts.updateOptions(FSkinFont.getAllCJKFonts());
|
|
}
|
|
|
|
@Override
|
|
protected void doLayout(float width, float height) {
|
|
lstSettings.setBounds(0, 0, width, height);
|
|
}
|
|
|
|
private abstract class Setting {
|
|
protected String label;
|
|
protected String description;
|
|
protected PreferencesStore.IPref pref;
|
|
|
|
public Setting(PreferencesStore.IPref pref0, String label0, String description0) {
|
|
label = label0;
|
|
description = description0;
|
|
pref = pref0;
|
|
}
|
|
|
|
public abstract void select();
|
|
public abstract void drawPrefValue(Graphics g, FSkinFont font, FSkinColor color, float x, float y, float width, float height);
|
|
}
|
|
|
|
private class BooleanSetting extends Setting {
|
|
public BooleanSetting(FPref pref0, String label0, String description0) {
|
|
super(pref0, label0, description0);
|
|
}
|
|
|
|
@Override
|
|
public void select() {
|
|
if(pref instanceof FPref) {
|
|
FModel.getPreferences().setPref((FPref)pref, !FModel.getPreferences().getPrefBoolean((FPref)pref));
|
|
FModel.getPreferences().save();
|
|
} else if(pref instanceof ForgeNetPreferences.FNetPref) {
|
|
FModel.getNetPreferences().setPref((ForgeNetPreferences.FNetPref)pref, !FModel.getNetPreferences().getPrefBoolean((ForgeNetPreferences.FNetPref)pref));
|
|
FModel.getNetPreferences().save();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void drawPrefValue(Graphics g, FSkinFont font, FSkinColor color, float x, float y, float w, float h) {
|
|
x += w - h;
|
|
w = h;
|
|
boolean checked = false;
|
|
if(pref instanceof FPref) {
|
|
checked = FModel.getPreferences().getPrefBoolean((FPref) pref);
|
|
} else if(pref instanceof ForgeNetPreferences.FNetPref) {
|
|
checked = FModel.getNetPreferences().getPrefBoolean((ForgeNetPreferences.FNetPref) pref);
|
|
}
|
|
FCheckBox.drawCheckBox(g, SettingsScreen.DESC_COLOR, color, checked, x, y, w, h);
|
|
}
|
|
}
|
|
|
|
private class CustomSelectSetting extends Setting {
|
|
private final List<String> options = new ArrayList<>();
|
|
|
|
public CustomSelectSetting(PreferencesStore.IPref pref0, String label0, String description0, String[] options0) {
|
|
super(pref0, label0 + ":", description0);
|
|
|
|
options.addAll(Arrays.asList(options0));
|
|
}
|
|
public CustomSelectSetting(FPref pref0, String label0, String description0, Iterable<String> options0) {
|
|
super(pref0, label0 + ":", description0);
|
|
|
|
if (options0 != null) {
|
|
for (String option : options0) {
|
|
options.add(option);
|
|
}
|
|
}
|
|
}
|
|
public <E extends Enum<E>> CustomSelectSetting(FPref pref0, String label0, String description0, Class<E> enumData) {
|
|
super(pref0, label0 + ":", description0);
|
|
|
|
for (E option : enumData.getEnumConstants()) {
|
|
options.add(option.toString());
|
|
}
|
|
}
|
|
|
|
public void valueChanged(String newValue) {
|
|
if(pref instanceof FPref) {
|
|
FModel.getPreferences().setPref((FPref)pref, newValue);
|
|
FModel.getPreferences().save();
|
|
} else if(pref instanceof ForgeNetPreferences.FNetPref) {
|
|
FModel.getNetPreferences().setPref((ForgeNetPreferences.FNetPref)pref, newValue);
|
|
FModel.getNetPreferences().save();
|
|
}
|
|
|
|
}
|
|
|
|
public void updateOptions(Iterable<String> options0) {
|
|
options.clear();
|
|
if (options0 != null) {
|
|
for (String option : options0) {
|
|
options.add(option);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void select() {
|
|
Forge.openScreen(new CustomSelectScreen());
|
|
}
|
|
|
|
private class CustomSelectScreen extends FScreen {
|
|
private final FList<String> lstOptions;
|
|
private final String currentValue;
|
|
|
|
private CustomSelectScreen() {
|
|
super("Select " + label.substring(0, label.length() - 1));
|
|
if(pref instanceof FPref) {
|
|
currentValue = FModel.getPreferences().getPref((FPref) pref);
|
|
} else if(pref instanceof ForgeNetPreferences.FNetPref) {
|
|
currentValue = FModel.getNetPreferences().getPref((ForgeNetPreferences.FNetPref) pref);
|
|
} else {
|
|
currentValue = null;
|
|
}
|
|
lstOptions = add(new FList<>(options));
|
|
lstOptions.setListItemRenderer(new FList.DefaultListItemRenderer<String>() {
|
|
@Override
|
|
public boolean tap(Integer index, String value, float x, float y, int count) {
|
|
Forge.back();
|
|
if (!value.equals(currentValue)) {
|
|
valueChanged(value);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void drawValue(Graphics g, Integer index, String value, FSkinFont font, FSkinColor foreColor, FSkinColor backColor, boolean pressed, float x, float y, float w, float h) {
|
|
float offset = SettingsScreen.getInsets(w) - FList.PADDING; //increase padding for settings items
|
|
x += offset;
|
|
y += offset;
|
|
w -= 2 * offset;
|
|
h -= 2 * offset;
|
|
|
|
g.drawText(value, font, foreColor, x, y, w, h, false, Align.left, true);
|
|
|
|
float radius = h / 3;
|
|
x += w - radius;
|
|
y += h / 2;
|
|
g.drawCircle(Utils.scale(1), SettingsScreen.DESC_COLOR, x, y, radius);
|
|
if (value.equals(currentValue)) {
|
|
g.fillCircle(foreColor, x, y, radius / 2);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
@Override
|
|
protected void doLayout(float startY, float width, float height) {
|
|
lstOptions.setBounds(0, startY, width, height - startY);
|
|
}
|
|
|
|
@Override
|
|
public FScreen getLandscapeBackdropScreen() {
|
|
if (SettingsScreen.launchedFromHomeScreen()) {
|
|
return HomeScreen.instance;
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void drawPrefValue(Graphics g, FSkinFont font, FSkinColor color, float x, float y, float w, float h) {
|
|
String value;
|
|
if(pref instanceof FPref) {
|
|
value = FModel.getPreferences().getPref((FPref)pref);
|
|
} else if(pref instanceof ForgeNetPreferences.FNetPref) {
|
|
value = FModel.getNetPreferences().getPref((ForgeNetPreferences.FNetPref)pref);
|
|
} else {
|
|
value = "";
|
|
}
|
|
g.drawText(value, font, color, x, y, w, h, false, Align.right, false);
|
|
}
|
|
}
|
|
|
|
private class LocalizedSelectSetting extends CustomSelectSetting {
|
|
private final Map<String, String> localizedToBackingMap;
|
|
private final Map<String, String> backingToLocalizedMap = new HashMap<>();
|
|
|
|
public LocalizedSelectSetting(PreferencesStore.IPref pref0,
|
|
String label0,
|
|
String description0,
|
|
Map<String, String> localizationMap) {
|
|
super(pref0, label0, description0, localizationMap.keySet().toArray(new String[0]));
|
|
this.localizedToBackingMap = localizationMap;
|
|
|
|
// Create reverse lookup map
|
|
for (Map.Entry<String, String> entry : localizationMap.entrySet()) {
|
|
backingToLocalizedMap.put(entry.getValue(), entry.getKey());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void valueChanged(String newLocalizedValue) {
|
|
String backingValue = localizedToBackingMap.get(newLocalizedValue);
|
|
if (backingValue == null) return;
|
|
|
|
if (pref instanceof FPref) {
|
|
FModel.getPreferences().setPref((FPref) pref, backingValue);
|
|
FModel.getPreferences().save();
|
|
} else if (pref instanceof ForgeNetPreferences.FNetPref) {
|
|
FModel.getNetPreferences().setPref((ForgeNetPreferences.FNetPref) pref, backingValue);
|
|
FModel.getNetPreferences().save();
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public void drawPrefValue(Graphics g, FSkinFont font, FSkinColor color,
|
|
float x, float y, float w, float h) {
|
|
String currentBackingValue;
|
|
if (pref instanceof FPref) {
|
|
currentBackingValue = FModel.getPreferences().getPref((FPref) pref);
|
|
} else if (pref instanceof ForgeNetPreferences.FNetPref) {
|
|
currentBackingValue = FModel.getNetPreferences().getPref((ForgeNetPreferences.FNetPref) pref);
|
|
} else {
|
|
currentBackingValue = "";
|
|
}
|
|
|
|
String displayValue = backingToLocalizedMap.get(currentBackingValue);
|
|
g.drawText(displayValue, font, color, x, y, w, h, false, Align.right, false);
|
|
}
|
|
}
|
|
|
|
|
|
private class IntegerSelectSetting extends Setting {
|
|
private final int minValue;
|
|
private final int maxValue;
|
|
|
|
public IntegerSelectSetting(PreferencesStore.IPref pref0, String label0, String description0, int minValue, int maxValue) {
|
|
super(pref0, label0 + ":", description0);
|
|
this.minValue = minValue;
|
|
this.maxValue = maxValue;
|
|
}
|
|
|
|
public void valueChanged(String newValue) {
|
|
if (pref instanceof FPref) {
|
|
FModel.getPreferences().setPref((FPref) pref, newValue);
|
|
FModel.getPreferences().save();
|
|
} else if (pref instanceof ForgeNetPreferences.FNetPref) {
|
|
FModel.getNetPreferences().setPref((ForgeNetPreferences.FNetPref) pref, newValue);
|
|
FModel.getNetPreferences().save();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void select() {
|
|
String currentValue;
|
|
if (pref instanceof FPref) {
|
|
currentValue = FModel.getPreferences().getPref((FPref) pref);
|
|
} else if (pref instanceof ForgeNetPreferences.FNetPref) {
|
|
currentValue = FModel.getNetPreferences().getPref((ForgeNetPreferences.FNetPref) pref);
|
|
} else {
|
|
currentValue = "";
|
|
}
|
|
if (currentValue == null || currentValue.isEmpty()) {
|
|
currentValue = String.valueOf(minValue);
|
|
}
|
|
FOptionPane.showInputDialog(
|
|
label,
|
|
description,
|
|
currentValue,
|
|
null,
|
|
new Callback<String>() {
|
|
@Override
|
|
public void run(String input) {
|
|
if (input == null) return; // cancelled
|
|
if (!input.matches("\\d+")) {
|
|
FOptionPane.showMessageDialog("Please enter a valid number.", "Invalid Input");
|
|
return;
|
|
}
|
|
int value = Integer.parseInt(input);
|
|
if (value < minValue || value > maxValue) {
|
|
FOptionPane.showMessageDialog("Value must be between " + minValue + " and " + maxValue + ".", "Invalid Input");
|
|
return;
|
|
}
|
|
valueChanged(input);
|
|
}
|
|
},
|
|
true // isNumeric
|
|
);
|
|
}
|
|
|
|
@Override
|
|
public void drawPrefValue(Graphics g, FSkinFont font, FSkinColor color, float x, float y, float w, float h) {
|
|
String value;
|
|
if (pref instanceof FPref) {
|
|
value = FModel.getPreferences().getPref((FPref) pref);
|
|
} else if (pref instanceof ForgeNetPreferences.FNetPref) {
|
|
value = FModel.getNetPreferences().getPref((ForgeNetPreferences.FNetPref) pref);
|
|
} else {
|
|
value = "";
|
|
}
|
|
g.drawText(value, font, color, x, y, w, h, false, Align.right, false);
|
|
}
|
|
}
|
|
|
|
|
|
private class SettingRenderer extends FList.ListItemRenderer<Setting> {
|
|
@Override
|
|
public float getItemHeight() {
|
|
return SettingsScreen.SETTING_HEIGHT;
|
|
}
|
|
|
|
@Override
|
|
public boolean tap(Integer index, Setting value, float x, float y, int count) {
|
|
value.select();
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void drawValue(Graphics g, Integer index, Setting value, FSkinFont font, FSkinColor foreColor, FSkinColor backColor, boolean pressed, float x, float y, float w, float h) {
|
|
float offset = SettingsScreen.getInsets(w) - FList.PADDING; //increase padding for settings items
|
|
x += offset;
|
|
y += offset;
|
|
w -= 2 * offset;
|
|
h -= 2 * offset;
|
|
|
|
float totalHeight = h;
|
|
h = font.getMultiLineBounds(value.label).height + SettingsScreen.SETTING_PADDING;
|
|
|
|
g.drawText(value.label, font, foreColor, x, y, w, h, false, Align.left, false);
|
|
value.drawPrefValue(g, font, foreColor, x, y, w, h);
|
|
h += SettingsScreen.SETTING_PADDING;
|
|
g.drawText(value.description, SettingsScreen.DESC_FONT, SettingsScreen.DESC_COLOR, x, y + h, w, totalHeight - h + SettingsScreen.getInsets(w), true, Align.left, false);
|
|
}
|
|
}
|
|
}
|