/* * Copyright (c) 2014 tabletoptool.com team. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * rptools.com team - initial implementation * tabletoptool.com team - further development */ package com.t3.client; import java.awt.Color; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.ListIterator; import java.util.Set; import java.util.prefs.Preferences; import org.apache.log4j.Logger; import com.t3.client.walker.WalkerMetric; import com.t3.model.Token; import com.t3.model.Zone; import com.t3.model.grid.GridFactory; public class AppPreferences { private static final Logger log = Logger.getLogger(AppPreferences.class); private static Preferences prefs = Preferences.userRoot().node(AppConstants.APP_NAME + "/prefs"); private static final String KEY_ASSET_ROOTS = "assetRoots"; private static final String KEY_SAVE_DIR = "saveDir"; private static final String KEY_LOAD_DIR = "loadDir"; private static final String KEY_MRU_CAMPAIGNS = "mruCampaigns"; private static final String KEY_SAVED_PAINT_TEXTURES = "savedTextures"; private static final String KEY_SAVE_REMINDER = "autoSaveReminder"; private static final boolean DEFAULT_SAVE_REMINDER = true; private static final String KEY_TOKEN_NUMBER_DISPLAY = "tokenNumberDisplayg"; private static final String DEFAULT_TOKEN_NUMBER_DISPLAY = Token.NUM_ON_NAME; private static final String KEY_AUTO_SAVE_INCREMENT = "autoSaveIncrement"; private static final int DEFAULT_AUTO_SAVE_INCREMENT = 5; // Minutes // private static final String KEY_ENABLE_MAP_EXPORT_IMPORT = "enableMapExportImport"; // private static final boolean DEFAULT_ENABLE_MAP_EXPORT_IMPORT = false; private static final String KEY_CHAT_AUTOSAVE_TIME = "chatAutosaveTime"; private static final int DEFAULT_CHAT_AUTOSAVE_TIME = 0; // Minutes; zero=disabled private static final String KEY_CHAT_FILENAME_FORMAT = "chatFilenameFormat"; private static final String DEFAULT_CHAT_FILENAME_FORMAT = "chatlog-%1$tF-%1$tR.html"; // http://download.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html private static final String KEY_DUPLICATE_TOKEN_NUMBER = "duplicateTokenNumber"; private static final String DEFAULT_DUPLICATE_TOKEN_NUMBER = Token.NUM_INCREMENT; private static final String KEY_NEW_TOKEN_NAMING = "newTokenNaming"; private static final String DEFAULT_NEW_TOKEN_NAMING = Token.NAME_USE_FILENAME; private static final String KEY_USE_HALO_COLOR_ON_VISION_OVERLAY = "useHaloColorForVisionOverlay"; private static final boolean DEFAULT_USE_HALO_COLOR_ON_VISION_OVERLAY = false; private static final String KEY_HALO_OVERLAY_OPACITY = "haloOverlayOpacity"; private static final int DEFAULT_HALO_OVERLAY_OPACITY = 60; private static final String KEY_AURA_OVERLAY_OPACITY = "auraOverlayOpacity"; private static final int DEFAULT_AURA_OVERLAY_OPACITY = 60; private static final String KEY_LIGHT_OVERLAY_OPACITY = "lightOverlayOpacity"; private static final int DEFAULT_LIGHT_OVERLAY_OPACITY = 60; private static final String KEY_FOG_OVERLAY_OPACITY = "fogOverlayOpacity"; private static final int DEFAULT_FOG_OVERLAY_OPACITY = 100; private static final String KEY_HALO_LINE_WIDTH = "haloLineWidth"; private static final int DEFAULT_HALO_LINE_WIDTH = 2; private static final String KEY_AUTO_REVEAL_VISION_ON_GM_MOVEMENT = "autoRevealVisionOnGMMove"; private static final boolean DEFAULT_AUTO_REVEAL_VISION_ON_GM_MOVEMENT = false; private static final String KEY_USE_SOFT_FOG_EDGES = "useSoftFog"; private static final boolean DEFAULT_USE_SOFT_FOG_EDGES = true; private static final String KEY_NEW_MAPS_HAVE_FOW = "newMapsHaveFow"; private static final boolean DEFAULT_NEW_MAPS_HAVE_FOW = false; private static final String KEY_NEW_TOKENS_VISIBLE = "newTokensVisible"; private static final boolean DEFAULT_NEW_TOKENS_VISIBLE = true; private static final String KEY_NEW_MAPS_VISIBLE = "newMapsVisible"; private static final boolean DEFAULT_NEW_MAPS_VISIBLE = true; private static final String KEY_NEW_OBJECTS_VISIBLE = "newObjectsVisible"; private static final boolean DEFAULT_NEW_OBJECTS_VISIBLE = true; private static final String KEY_NEW_BACKGROUNDS_VISIBLE = "newBackgroundsVisible"; private static final boolean DEFAULT_NEW_BACKGROUNDS_VISIBLE = true; private static final String KEY_TOKENS_START_FREESIZE = "newTokensStartFreesize"; private static final boolean DEFAULT_TOKENS_START_FREESIZE = false; private static final String KEY_TOKENS_WARN_WHEN_DELETED = "tokensWarnWhenDeleted"; private static final boolean DEFAULT_TOKENS_WARN_WHEN_DELETED = true; private static final String KEY_TOKENS_START_SNAP_TO_GRID = "newTokensStartSnapToGrid"; private static final boolean DEFAULT_TOKENS_START_SNAP_TO_GRID = true; private static final String KEY_OBJECTS_START_SNAP_TO_GRID = "newStampsStartSnapToGrid"; private static final boolean DEFAULT_OBJECTS_START_SNAP_TO_GRID = false; private static final String KEY_OBJECTS_START_FREESIZE = "newStampsStartFreesize"; private static final boolean DEFAULT_OBJECTS_START_FREESIZE = true; private static final String KEY_BACKGROUNDS_START_SNAP_TO_GRID = "newBackgroundsStartSnapToGrid"; private static final boolean DEFAULT_BACKGROUNDS_START_SNAP_TO_GRID = false; private static final String KEY_BACKGROUNDS_START_FREESIZE = "newBackgroundsStartFreesize"; private static final boolean DEFAULT_BACKGROUNDS_START_FREESIZE = true; private static final String KEY_SOUNDS_ONLY_WHEN_NOT_FOCUSED = "playSystemSoundsOnlyWhenNotFocused"; private static final boolean DEFAULT_SOUNDS_ONLY_WHEN_NOT_FOCUSED = false; private static final String KEY_SHOW_AVATAR_IN_CHAT = "showAvatarInChat"; private static final boolean DEFAULT_SHOW_AVATAR_IN_CHAT = true; private static final String KEY_SHOW_DIALOG_ON_NEW_TOKEN = "showDialogOnNewToken"; private static final boolean DEFAULT_SHOW_DIALOG_ON_NEW_TOKEN = true; private static final String KEY_INSERT_SMILIES = "insertSmilies"; private static final boolean DEFAULT_SHOW_SMILIES = true; private static final String KEY_MOVEMENT_METRIC = "movementMetric"; private static final WalkerMetric DEFAULT_MOVEMENT_METRIC = WalkerMetric.ONE_TWO_ONE; private static final String KEY_SHOW_STAT_SHEET = "showStatSheet"; private static final boolean DEFAULT_SHOW_STAT_SHEET = true; private static final String KEY_FILL_SELECTION_BOX = "fillSelectionBox"; private static final boolean DEFAULT_FILL_SELECTION_BOX = true; private static final String KEY_SHOW_INIT_GAIN_MESSAGE = "showInitGainMessage"; private static final boolean DEFAULT_SHOW_INIT_GAIN_MESSAGE = true; public static void setFillSelectionBox(boolean fill) { prefs.putBoolean(KEY_FILL_SELECTION_BOX, fill); } public static boolean getFillSelectionBox() { return prefs.getBoolean(KEY_FILL_SELECTION_BOX, DEFAULT_FILL_SELECTION_BOX); } public static Color getChatColor() { return new Color(prefs.getInt(KEY_CHAT_COLOR, DEFAULT_CHAT_COLOR.getRGB())); } public static void setSaveReminder(boolean reminder) { prefs.putBoolean(KEY_SAVE_REMINDER, reminder); } public static boolean getSaveReminder() { return prefs.getBoolean(KEY_SAVE_REMINDER, DEFAULT_SAVE_REMINDER); } // public static void setEnabledMapExportImport(boolean reminder) { // prefs.putBoolean(KEY_ENABLE_MAP_EXPORT_IMPORT, reminder); // AppActions.updateActions(); // } // public static boolean isEnabledMapExportImport() { // return prefs.getBoolean(KEY_ENABLE_MAP_EXPORT_IMPORT, DEFAULT_ENABLE_MAP_EXPORT_IMPORT); // } public static void setAutoSaveIncrement(int increment) { prefs.putInt(KEY_AUTO_SAVE_INCREMENT, increment); } public static int getAutoSaveIncrement() { return prefs.getInt(KEY_AUTO_SAVE_INCREMENT, DEFAULT_AUTO_SAVE_INCREMENT); } public static void setChatAutosaveTime(int minutes) { if (minutes >= 0) { prefs.putInt(KEY_CHAT_AUTOSAVE_TIME, minutes); ChatAutoSave.changeTimeout(minutes); } } public static int getChatAutosaveTime() { return prefs.getInt(KEY_CHAT_AUTOSAVE_TIME, DEFAULT_CHAT_AUTOSAVE_TIME); } public static void setChatFilenameFormat(String pattern) { prefs.put(KEY_CHAT_FILENAME_FORMAT, pattern); } public static String getChatFilenameFormat() { return prefs.get(KEY_CHAT_FILENAME_FORMAT, DEFAULT_CHAT_FILENAME_FORMAT); } public static void clearChatFilenameFormat() { prefs.remove(KEY_CHAT_FILENAME_FORMAT); } public static void setTokenNumberDisplay(String display) { prefs.put(KEY_TOKEN_NUMBER_DISPLAY, display); } public static String getTokenNumberDisplay() { return prefs.get(KEY_TOKEN_NUMBER_DISPLAY, DEFAULT_TOKEN_NUMBER_DISPLAY); } public static void setDuplicateTokenNumber(String numbering) { prefs.put(KEY_DUPLICATE_TOKEN_NUMBER, numbering); } public static String getDuplicateTokenNumber() { return prefs.get(KEY_DUPLICATE_TOKEN_NUMBER, DEFAULT_DUPLICATE_TOKEN_NUMBER); } public static void setNewTokenNaming(String naming) { prefs.put(KEY_NEW_TOKEN_NAMING, naming); } public static String getNewTokenNaming() { return prefs.get(KEY_NEW_TOKEN_NAMING, DEFAULT_NEW_TOKEN_NAMING); } public static void setUseHaloColorOnVisionOverlay(boolean flag) { prefs.putBoolean(KEY_USE_HALO_COLOR_ON_VISION_OVERLAY, flag); } public static boolean getUseHaloColorOnVisionOverlay() { return prefs.getBoolean(KEY_USE_HALO_COLOR_ON_VISION_OVERLAY, DEFAULT_USE_HALO_COLOR_ON_VISION_OVERLAY); } public static void setAutoRevealVisionOnGMMovement(boolean flag) { prefs.putBoolean(KEY_AUTO_REVEAL_VISION_ON_GM_MOVEMENT, flag); } public static boolean getAutoRevealVisionOnGMMovement() { return prefs.getBoolean(KEY_AUTO_REVEAL_VISION_ON_GM_MOVEMENT, DEFAULT_AUTO_REVEAL_VISION_ON_GM_MOVEMENT); } private static int range0to255(int value) { return value < 1 ? 0 : value > 255 ? 255 : value; } public static void setHaloOverlayOpacity(int size) { prefs.putInt(KEY_HALO_OVERLAY_OPACITY, range0to255(size)); } public static int getHaloOverlayOpacity() { int value = prefs.getInt(KEY_HALO_OVERLAY_OPACITY, DEFAULT_HALO_OVERLAY_OPACITY); return range0to255(value); } public static void setAuraOverlayOpacity(int size) { prefs.putInt(KEY_AURA_OVERLAY_OPACITY, range0to255(size)); } public static int getAuraOverlayOpacity() { int value = prefs.getInt(KEY_AURA_OVERLAY_OPACITY, DEFAULT_AURA_OVERLAY_OPACITY); return range0to255(value); } public static void setLightOverlayOpacity(int size) { prefs.putInt(KEY_LIGHT_OVERLAY_OPACITY, range0to255(size)); } public static int getLightOverlayOpacity() { int value = prefs.getInt(KEY_LIGHT_OVERLAY_OPACITY, DEFAULT_LIGHT_OVERLAY_OPACITY); return range0to255(value); } public static void setFogOverlayOpacity(int size) { prefs.putInt(KEY_FOG_OVERLAY_OPACITY, range0to255(size)); // FIXME Force ModelChange event to flush fog from zone :( Zone zone = TabletopTool.getFrame().getCurrentZoneRenderer().getZone(); zone.setHasFog(zone.hasFog()); } public static int getFogOverlayOpacity() { int value = prefs.getInt(KEY_FOG_OVERLAY_OPACITY, DEFAULT_FOG_OVERLAY_OPACITY); return range0to255(value); } private static final String KEY_DEFAULT_GRID_TYPE = "defaultGridType"; private static final String DEFAULT_DEFAULT_GRID_TYPE = GridFactory.SQUARE; private static final String KEY_FACE_VERTEX = "faceVertex"; private static final boolean DEFAULT_FACE_VERTEX = false; private static final String KEY_FACE_EDGE = "faceEdge"; private static final boolean DEFAULT_FACE_EDGE = true; private static final String KEY_DEFAULT_GRID_SIZE = "defaultGridSize"; private static final int DEFAULT_DEFAULT_GRID_SIZE = 50; private static final String KEY_DEFAULT_GRID_COLOR = "defaultGridColor"; private static final int DEFAULT_DEFAULT_GRID_COLOR = Color.black.getRGB(); private static final String KEY_DEFAULT_UNITS_PER_CELL = "unitsPerCell"; private static final int DEFAULT_DEFAULT_UNITS_PER_CELL = 5; private static final String KEY_DEFAULT_VISION_DISTANCE = "defaultVisionDistance"; private static final int DEFAULT_DEFAULT_VISION_DISTANCE = 1000; private static final String KEY_FONT_SIZE = "fontSize"; private static final int DEFAULT_FONT_SIZE = 12; private static final String KEY_CHAT_COLOR = "chatColor"; private static final Color DEFAULT_CHAT_COLOR = Color.black; private static final String KEY_PLAY_SYSTEM_SOUNDS = "playSystemSounds"; private static final boolean DEFAULT_PLAY_SYSTEM_SOUNDS = true; public static void setHaloLineWidth(int size) { prefs.putInt(KEY_HALO_LINE_WIDTH, size); } public static int getHaloLineWidth() { return prefs.getInt(KEY_HALO_LINE_WIDTH, DEFAULT_HALO_LINE_WIDTH); } private static final String KEY_PORTRAIT_SIZE = "portraitSize"; private static final int DEFAULT_PORTRAIT_SIZE = 175; private static final String KEY_ALLOW_PLAYER_MACRO_EDITS_DEFAULT = "allowPlayerMacroEditsDefault"; private static final boolean DEFAULT_ALLOW_PLAYER_MACRO_EDITS_DEFAULT = true; private static final String KEY_TOOLTIP_INITIAL_DELAY = "toolTipInitialDelay"; private static final int DEFAULT_TOOLTIP_INITIAL_DELAY = 250; private static final String KEY_TOOLTIP_DISMISS_DELAY = "toolTipDismissDelay"; private static final int DEFAULT_TOOLTIP_DISMISS_DELAY = 30000; private static final String KEY_TOOLTIP_FOR_INLINE_ROLLS = "toolTipInlineRolls"; private static final boolean DEFAULT_TOOLTIP_FOR_INLINE_ROLLS = false; private static final String KEY_SUPPRESS_TOOLTIPS_FOR_MACROLINKS = "suppressToolTipsMacroLinks"; private static final boolean DEFAULT_SUPPRESS_TOOLTIPS_FOR_MACROLINKS = false; // chat notification colors private static final String KEY_CHAT_NOTIFICATION_COLOR_RED = "chatNotificationColorRed"; private static final int DEFAULT_CHAT_NOTIFICATION_COLOR_RED = 0xFF; private static final String KEY_CHAT_NOTIFICATION_COLOR_GREEN = "chatNotificationColorGreen"; private static final int DEFAULT_CHAT_NOTIFICATION_COLOR_GREEN = 0xFF; private static final String KEY_CHAT_NOTIFICATION_COLOR_BLUE = "chatNotificationColorBlue"; private static final int DEFAULT_CHAT_NOTIFICATION_COLOR_BLUE = 0xFF; // end chat notification colors private static final String KEY_CHAT_NOTIFICATION_SHOW_BACKGROUND = "chatNotificationShowBackground"; private static final boolean DEFAULT_CHAT_NOTIFICATION_SHOW_BACKGROUND = true; private static final String KEY_TRUSTED_PREFIX_BG_RED = "trustedPrefixBGRed"; private static final int DEFAULT_TRUSTED_PREFIX_BG_RED = 0xD8; private static final String KEY_TRUSTED_PREFIX_BG_GREEN = "trustedPrefixBGGreen"; private static final int DEFAULT_TRUSTED_PREFIX_BG_GREEN = 0xE9; private static final String KEY_TRUSTED_PREFIX_BG_BLUE = "trustedPrefixBBlue"; private static final int DEFAULT_TRUSTED_PREFIX_BG_BLUE = 0xF6; private static final String KEY_TRUSTED_PREFIX_FG_RED = "trustedPrefixFGRed"; private static final int DEFAULT_TRUSTED_PREFIX_FG_RED = 0x00; private static final String KEY_TRUSTED_PREFIX_FG_GREEN = "trustedPrefixFGGreen"; private static final int DEFAULT_TRUSTED_PREFIX_FG_GREEN = 0x00; private static final String KEY_TRUSTED_PREFIX_FG_BLUE = "trustedPrefixFBlue"; private static final int DEFAULT_TRUSTED_PREFIX_FG_BLUE = 0x00; private static final String KEY_FIT_GM_VIEW = "fitGMView"; private static final boolean DEFAULT_FIT_GM_VIEW = true; private static final String KEY_TYPING_NOTIFICATION_DURATION = "typingNotificationDuration"; private static final int DEFAULT_TYPING_NOTIFICATION_DURATION = 5000; public static void setTypingNotificationDuration(int ms) { prefs.putInt(KEY_TYPING_NOTIFICATION_DURATION, ms); TabletopTool.getFrame().setChatNotifyDuration(ms); } public static Integer getTypingNotificationDuration() { Integer value = Integer.valueOf(prefs.getInt(KEY_TYPING_NOTIFICATION_DURATION, DEFAULT_TYPING_NOTIFICATION_DURATION)); return value; } public static final void setUseToolTipForInlineRoll(boolean tooltip) { prefs.putBoolean(KEY_TOOLTIP_FOR_INLINE_ROLLS, tooltip); } public static final boolean getUseToolTipForInlineRoll() { return prefs.getBoolean(KEY_TOOLTIP_FOR_INLINE_ROLLS, DEFAULT_TOOLTIP_FOR_INLINE_ROLLS); } public static final void setSuppressToolTipsForMacroLinks(boolean tooltip) { prefs.putBoolean(KEY_SUPPRESS_TOOLTIPS_FOR_MACROLINKS, tooltip); } public static final boolean getSuppressToolTipsForMacroLinks() { return prefs.getBoolean(KEY_SUPPRESS_TOOLTIPS_FOR_MACROLINKS, DEFAULT_SUPPRESS_TOOLTIPS_FOR_MACROLINKS); } public static void setChatNotificationColor(Color color) { prefs.putInt(KEY_CHAT_NOTIFICATION_COLOR_RED, color.getRed()); prefs.putInt(KEY_CHAT_NOTIFICATION_COLOR_GREEN, color.getGreen()); prefs.putInt(KEY_CHAT_NOTIFICATION_COLOR_BLUE, color.getBlue()); } public static Color getChatNotificationColor() { return new Color(prefs.getInt(KEY_CHAT_NOTIFICATION_COLOR_RED, DEFAULT_CHAT_NOTIFICATION_COLOR_RED), prefs.getInt(KEY_CHAT_NOTIFICATION_COLOR_GREEN, DEFAULT_CHAT_NOTIFICATION_COLOR_GREEN), prefs.getInt(KEY_CHAT_NOTIFICATION_COLOR_BLUE, DEFAULT_CHAT_NOTIFICATION_COLOR_BLUE)); } public static void setTrustedPrefixBG(Color color) { prefs.putInt(KEY_TRUSTED_PREFIX_BG_RED, color.getRed()); prefs.putInt(KEY_TRUSTED_PREFIX_BG_RED, color.getRed()); prefs.putInt(KEY_TRUSTED_PREFIX_BG_RED, color.getRed()); } public static Color getTrustedPrefixBG() { return new Color(prefs.getInt(KEY_TRUSTED_PREFIX_BG_RED, DEFAULT_TRUSTED_PREFIX_BG_RED), prefs.getInt(KEY_TRUSTED_PREFIX_BG_GREEN, DEFAULT_TRUSTED_PREFIX_BG_GREEN), prefs.getInt( KEY_TRUSTED_PREFIX_BG_BLUE, DEFAULT_TRUSTED_PREFIX_BG_BLUE)); } public static void setTrustedPrefixFG(Color color) { prefs.putInt(KEY_TRUSTED_PREFIX_FG_RED, color.getRed()); prefs.putInt(KEY_TRUSTED_PREFIX_FG_RED, color.getRed()); prefs.putInt(KEY_TRUSTED_PREFIX_FG_RED, color.getRed()); } public static Color getTrustedPrefixFG() { return new Color(prefs.getInt(KEY_TRUSTED_PREFIX_FG_RED, DEFAULT_TRUSTED_PREFIX_FG_RED), prefs.getInt(KEY_TRUSTED_PREFIX_FG_GREEN, DEFAULT_TRUSTED_PREFIX_FG_GREEN), prefs.getInt( KEY_TRUSTED_PREFIX_FG_BLUE, DEFAULT_TRUSTED_PREFIX_FG_BLUE)); } public static void setToolTipInitialDelay(int ms) { prefs.putInt(KEY_TOOLTIP_INITIAL_DELAY, ms); } public static int getToolTipInitialDelay() { return prefs.getInt(KEY_TOOLTIP_INITIAL_DELAY, DEFAULT_TOOLTIP_INITIAL_DELAY); } public static void setToolTipDismissDelay(int ms) { prefs.putInt(KEY_TOOLTIP_DISMISS_DELAY, ms); } public static int getToolTipDismissDelay() { return prefs.getInt(KEY_TOOLTIP_DISMISS_DELAY, DEFAULT_TOOLTIP_DISMISS_DELAY); } public static void setAllowPlayerMacroEditsDefault(boolean show) { prefs.putBoolean(KEY_ALLOW_PLAYER_MACRO_EDITS_DEFAULT, show); } public static boolean getAllowPlayerMacroEditsDefault() { return prefs.getBoolean(KEY_ALLOW_PLAYER_MACRO_EDITS_DEFAULT, DEFAULT_ALLOW_PLAYER_MACRO_EDITS_DEFAULT); } public static void setPortraitSize(int size) { prefs.putInt(KEY_PORTRAIT_SIZE, size); } public static int getPortraitSize() { return prefs.getInt(KEY_PORTRAIT_SIZE, DEFAULT_PORTRAIT_SIZE); } public static void setShowSmilies(boolean show) { prefs.putBoolean(KEY_INSERT_SMILIES, show); } public static boolean getShowSmilies() { return prefs.getBoolean(KEY_INSERT_SMILIES, DEFAULT_SHOW_SMILIES); } public static void setShowDialogOnNewToken(boolean show) { prefs.putBoolean(KEY_SHOW_DIALOG_ON_NEW_TOKEN, show); } public static boolean getShowDialogOnNewToken() { return prefs.getBoolean(KEY_SHOW_DIALOG_ON_NEW_TOKEN, DEFAULT_SHOW_DIALOG_ON_NEW_TOKEN); } public static void setShowAvatarInChat(boolean show) { prefs.putBoolean(KEY_SHOW_AVATAR_IN_CHAT, show); } public static boolean getShowAvatarInChat() { return prefs.getBoolean(KEY_SHOW_AVATAR_IN_CHAT, DEFAULT_SHOW_AVATAR_IN_CHAT); } public static void setPlaySystemSounds(boolean play) { prefs.putBoolean(KEY_PLAY_SYSTEM_SOUNDS, play); } public static boolean getPlaySystemSounds() { return prefs.getBoolean(KEY_PLAY_SYSTEM_SOUNDS, DEFAULT_PLAY_SYSTEM_SOUNDS); } public static void setPlaySystemSoundsOnlyWhenNotFocused(boolean play) { prefs.putBoolean(KEY_SOUNDS_ONLY_WHEN_NOT_FOCUSED, play); } public static boolean getPlaySystemSoundsOnlyWhenNotFocused() { return prefs.getBoolean(KEY_SOUNDS_ONLY_WHEN_NOT_FOCUSED, DEFAULT_SOUNDS_ONLY_WHEN_NOT_FOCUSED); } public static void setChatColor(Color color) { prefs.putInt(KEY_CHAT_COLOR, color.getRGB()); } public static void setFontSize(int size) { prefs.putInt(KEY_FONT_SIZE, size); } public static int getFontSize() { return prefs.getInt(KEY_FONT_SIZE, DEFAULT_FONT_SIZE); } public static void setDefaultGridColor(Color color) { prefs.putInt(KEY_DEFAULT_GRID_COLOR, color.getRGB()); } public static Color getDefaultGridColor() { return new Color(prefs.getInt(KEY_DEFAULT_GRID_COLOR, DEFAULT_DEFAULT_GRID_COLOR)); } public static boolean getFaceVertex() { return prefs.getBoolean(KEY_FACE_VERTEX, DEFAULT_FACE_VERTEX); } public static void setFaceVertex(boolean yesNo) { prefs.putBoolean(KEY_FACE_VERTEX, yesNo); } public static boolean getFaceEdge() { return prefs.getBoolean(KEY_FACE_EDGE, DEFAULT_FACE_EDGE); } public static void setFaceEdge(boolean yesNo) { prefs.putBoolean(KEY_FACE_EDGE, yesNo); } public static void clearAssetRoots() { prefs.put(KEY_ASSET_ROOTS, ""); } public static void setSaveDir(File file) { prefs.put(KEY_SAVE_DIR, file.toString()); } public static void setDefaultGridSize(int size) { prefs.putInt(KEY_DEFAULT_GRID_SIZE, size); } public static int getDefaultGridSize() { return prefs.getInt(KEY_DEFAULT_GRID_SIZE, DEFAULT_DEFAULT_GRID_SIZE); } public static void setDefaultUnitsPerCell(int size) { prefs.putInt(KEY_DEFAULT_UNITS_PER_CELL, size); } public static int getDefaultUnitsPerCell() { return prefs.getInt(KEY_DEFAULT_UNITS_PER_CELL, DEFAULT_DEFAULT_UNITS_PER_CELL); } public static void setDefaultVisionDistance(int dist) { prefs.putInt(KEY_DEFAULT_VISION_DISTANCE, dist); } public static int getDefaultVisionDistance() { return prefs.getInt(KEY_DEFAULT_VISION_DISTANCE, DEFAULT_DEFAULT_VISION_DISTANCE); } public static void setUseSoftFogEdges(boolean flag) { prefs.putBoolean(KEY_USE_SOFT_FOG_EDGES, flag); } public static boolean getUseSoftFogEdges() { return prefs.getBoolean(KEY_USE_SOFT_FOG_EDGES, DEFAULT_USE_SOFT_FOG_EDGES); } public static void setNewMapsHaveFOW(boolean flag) { prefs.putBoolean(KEY_NEW_MAPS_HAVE_FOW, flag); } public static boolean getNewMapsHaveFOW() { return prefs.getBoolean(KEY_NEW_MAPS_HAVE_FOW, DEFAULT_NEW_MAPS_HAVE_FOW); } public static void setNewTokensVisible(boolean flag) { prefs.putBoolean(KEY_NEW_TOKENS_VISIBLE, flag); } public static boolean getNewTokensVisible() { return prefs.getBoolean(KEY_NEW_TOKENS_VISIBLE, DEFAULT_NEW_TOKENS_VISIBLE); } public static void setNewMapsVisible(boolean flag) { prefs.putBoolean(KEY_NEW_MAPS_VISIBLE, flag); } public static boolean getNewMapsVisible() { return prefs.getBoolean(KEY_NEW_MAPS_VISIBLE, DEFAULT_NEW_MAPS_VISIBLE); } public static void setNewObjectsVisible(boolean flag) { prefs.putBoolean(KEY_NEW_OBJECTS_VISIBLE, flag); } public static boolean getNewObjectsVisible() { return prefs.getBoolean(KEY_NEW_OBJECTS_VISIBLE, DEFAULT_NEW_OBJECTS_VISIBLE); } public static void setNewBackgroundsVisible(boolean flag) { prefs.putBoolean(KEY_NEW_BACKGROUNDS_VISIBLE, flag); } public static boolean getNewBackgroundsVisible() { return prefs.getBoolean(KEY_NEW_BACKGROUNDS_VISIBLE, DEFAULT_NEW_BACKGROUNDS_VISIBLE); } public static void setTokensWarnWhenDeleted(boolean flag) { prefs.putBoolean(KEY_TOKENS_WARN_WHEN_DELETED, flag); } public static boolean getTokensWarnWhenDeleted() { return prefs.getBoolean(KEY_TOKENS_WARN_WHEN_DELETED, DEFAULT_TOKENS_WARN_WHEN_DELETED); } public static void setTokensStartSnapToGrid(boolean flag) { prefs.putBoolean(KEY_TOKENS_START_SNAP_TO_GRID, flag); } public static boolean getTokensStartSnapToGrid() { return prefs.getBoolean(KEY_TOKENS_START_SNAP_TO_GRID, DEFAULT_TOKENS_START_SNAP_TO_GRID); } public static void setObjectsStartSnapToGrid(boolean flag) { prefs.putBoolean(KEY_OBJECTS_START_SNAP_TO_GRID, flag); } public static boolean getObjectsStartSnapToGrid() { return prefs.getBoolean(KEY_OBJECTS_START_SNAP_TO_GRID, DEFAULT_OBJECTS_START_SNAP_TO_GRID); } public static void setTokensStartFreesize(boolean flag) { prefs.putBoolean(KEY_TOKENS_START_FREESIZE, flag); } public static boolean getTokensStartFreesize() { return prefs.getBoolean(KEY_TOKENS_START_FREESIZE, DEFAULT_TOKENS_START_FREESIZE); } public static void setObjectsStartFreesize(boolean flag) { prefs.putBoolean(KEY_OBJECTS_START_FREESIZE, flag); } public static boolean getObjectsStartFreesize() { return prefs.getBoolean(KEY_OBJECTS_START_FREESIZE, DEFAULT_OBJECTS_START_FREESIZE); } public static void setBackgroundsStartSnapToGrid(boolean flag) { prefs.putBoolean(KEY_BACKGROUNDS_START_SNAP_TO_GRID, flag); } public static boolean getBackgroundsStartSnapToGrid() { return prefs.getBoolean(KEY_BACKGROUNDS_START_SNAP_TO_GRID, DEFAULT_BACKGROUNDS_START_SNAP_TO_GRID); } public static void setBackgroundsStartFreesize(boolean flag) { prefs.putBoolean(KEY_BACKGROUNDS_START_FREESIZE, flag); } public static boolean getBackgroundsStartFreesize() { return prefs.getBoolean(KEY_BACKGROUNDS_START_FREESIZE, DEFAULT_BACKGROUNDS_START_FREESIZE); } public static String getDefaultGridType() { return prefs.get(KEY_DEFAULT_GRID_TYPE, DEFAULT_DEFAULT_GRID_TYPE); } public static void setDefaultGridType(String type) { prefs.put(KEY_DEFAULT_GRID_TYPE, type); } public static boolean getShowStatSheet() { return prefs.getBoolean(KEY_SHOW_STAT_SHEET, DEFAULT_SHOW_STAT_SHEET); } public static void setShowStatSheet(boolean show) { prefs.putBoolean(KEY_SHOW_STAT_SHEET, show); } public static boolean getFitGMView() { return prefs.getBoolean(KEY_FIT_GM_VIEW, DEFAULT_FIT_GM_VIEW); } public static void setFitGMView(boolean fit) { prefs.putBoolean(KEY_FIT_GM_VIEW, fit); } public static void setMovementMetric(WalkerMetric metric) { prefs.put(KEY_MOVEMENT_METRIC, metric.toString()); } public static WalkerMetric getMovementMetric() { WalkerMetric metric; try { metric = WalkerMetric.valueOf(prefs.get(KEY_MOVEMENT_METRIC, DEFAULT_MOVEMENT_METRIC.toString())); } catch (Exception exc) { metric = DEFAULT_MOVEMENT_METRIC; } return metric; } public static File getSaveDir() { String filePath = prefs.get(KEY_SAVE_DIR, null); return filePath != null ? new File(filePath) : new File(File.separator); } public static void setLoadDir(File file) { prefs.put(KEY_LOAD_DIR, file.toString()); } public static File getLoadDir() { String filePath = prefs.get(KEY_LOAD_DIR, null); return filePath != null ? new File(filePath) : new File(File.separator); } public static void addAssetRoot(File root) { String list = prefs.get(KEY_ASSET_ROOTS, ""); if (!list.isEmpty()) { // Add the new one and then remove all duplicates. list += ";" + root.getPath(); String[] roots = list.split(";"); StringBuffer result = new StringBuffer(list.length() + root.getPath().length() + 10); Set<String> rootList = new HashSet<String>(roots.length); // This loop ensures that each path only appears once. If there are currently // duplicates in the list, only the first one is kept. for (String r : roots) { if (!rootList.contains(r)) { result.append(';').append(r); rootList.add(r); } } list = result.substring(1); } else { list += root.getPath(); } prefs.put(KEY_ASSET_ROOTS, list); } public static Set<File> getAssetRoots() { String list = prefs.get(KEY_ASSET_ROOTS, ""); String[] roots = list.split(";"); // FJE Probably should be File.path_separator ... Set<File> rootList = new HashSet<File>(); for (String root : roots) { File file = new File(root); // LATER: Should this actually remove it from the pref list ? if (!file.exists()) { continue; } if (!rootList.contains(file)) { rootList.add(file); } } return rootList; } public static void removeAssetRoot(File root) { String list = prefs.get(KEY_ASSET_ROOTS, ""); if (!list.isEmpty()) { // Add the new one and then remove all duplicates. String[] roots = list.split(";"); StringBuffer result = new StringBuffer(list.length()); Set<String> rootList = new HashSet<String>(roots.length); String rootPath = root.getPath(); // This loop ensures that each path only appears once. If there are // duplicates in the list, only the first one is kept. for (String r : roots) { if (!r.equals(rootPath) && !rootList.contains(r)) { result.append(';').append(r); rootList.add(r); } } list = result.substring(result.length() > 0 ? 1 : 0); prefs.put(KEY_ASSET_ROOTS, list); } } public static void setMruCampaigns(List<File> mruCampaigns) { StringBuilder combined = new StringBuilder(""); for (ListIterator<File> iter = mruCampaigns.listIterator(); iter.hasNext();) { File file = iter.next(); String path = null; try { path = file.getCanonicalPath(); } catch (IOException e) { // Probably pretty rare, but we want to know about it if (log.isInfoEnabled()) log.info("unexpected during file.getCanonicalPath()", e); // $NON-NLS-1$ path = file.getPath(); } // It's important that '%3A' is done last. Note that the pathSeparator may not be a colon on // the current platform, but it doesn't matter since it will be reconverted when read back in again. // THink of the '%3A' as a symbol of the separator, not an encoding of the character. combined.append(path.replaceAll("%", "%25").replaceAll(File.pathSeparator, "%3A")); combined.append(File.pathSeparator); } prefs.put(KEY_MRU_CAMPAIGNS, combined.toString()); } public static List<File> getMruCampaigns() { List<File> mruCampaigns = new ArrayList<File>(); String combined = prefs.get(KEY_MRU_CAMPAIGNS, null); if (combined != null) { // It's important that '%3A' is done first combined = combined.replaceAll("%3A", File.pathSeparator).replaceAll("%25", "%"); String[] all = combined.split(File.pathSeparator); for (int i = 0; i < all.length; i++) mruCampaigns.add(new File(all[i])); } return mruCampaigns; } public static void setSavedPaintTextures(List<File> savedTextures) { StringBuilder combined = new StringBuilder(""); for (ListIterator<File> iter = savedTextures.listIterator(); iter.hasNext();) { combined.append(iter.next().getPath()); combined.append(File.pathSeparator); } prefs.put(KEY_SAVED_PAINT_TEXTURES, combined.toString()); } public static List<File> getSavedPaintTextures() { List<File> savedTextures = new ArrayList<File>(); String combined = prefs.get(KEY_SAVED_PAINT_TEXTURES, null); if (combined != null) { String[] all = combined.split(File.pathSeparator); for (int i = 0; i < all.length; i++) savedTextures.add(new File(all[i])); } return savedTextures; } private static final String INIT_SHOW_TOKENS = "initShowTokens"; private static final boolean DEFAULT_INIT_SHOW_TOKENS = true; private static final String INIT_SHOW_TOKEN_STATES = "initShowTokenStates"; private static final boolean DEFAULT_INIT_SHOW_TOKEN_STATES = true; private static final String INIT_SHOW_INITIATIVE = "initShowInitiative"; private static final boolean DEFAULT_INIT_SHOW_INITIATIVE = true; private static final String INIT_SHOW_2ND_LINE = "initShow2ndLine"; private static final boolean DEFAULT_INIT_SHOW_2ND_LINE = false; private static final String INIT_HIDE_NPCS = "initHideNpcs"; private static final boolean DEFAULT_INIT_HIDE_NPCS = false; private static final String INIT_OWNER_PERMISSIONS = "initOwnerPermissions"; private static final boolean DEFAULT_INIT_OWNER_PERMISSIONS = false; private static final String INIT_LOCK_MOVEMENT = "initLockMovement"; private static final boolean DEFAULT_INIT_LOCK_MOVEMENT = false; public static boolean getInitShowTokens() { return prefs.getBoolean(INIT_SHOW_TOKENS, DEFAULT_INIT_SHOW_TOKENS); } public static void setInitShowTokens(boolean showTokens) { prefs.putBoolean(INIT_SHOW_TOKENS, showTokens); } public static boolean getInitShowTokenStates() { return prefs.getBoolean(INIT_SHOW_TOKEN_STATES, DEFAULT_INIT_SHOW_TOKEN_STATES); } public static void setInitShowTokenStates(boolean showTokenStates) { prefs.putBoolean(INIT_SHOW_TOKEN_STATES, showTokenStates); } public static boolean getInitShowInitiative() { return prefs.getBoolean(INIT_SHOW_INITIATIVE, DEFAULT_INIT_SHOW_INITIATIVE); } public static void setInitShowInitiative(boolean showInitiative) { prefs.putBoolean(INIT_SHOW_INITIATIVE, showInitiative); } public static boolean getInitShow2ndLine() { return prefs.getBoolean(INIT_SHOW_2ND_LINE, DEFAULT_INIT_SHOW_2ND_LINE); } public static void setInitShow2ndLine(boolean secondLine) { prefs.putBoolean(INIT_SHOW_2ND_LINE, secondLine); } public static boolean getInitHideNpcs() { return prefs.getBoolean(INIT_HIDE_NPCS, DEFAULT_INIT_HIDE_NPCS); } public static void setInitHideNpcs(boolean hideNpcs) { prefs.putBoolean(INIT_HIDE_NPCS, hideNpcs); } public static boolean getInitOwnerPermissions() { return prefs.getBoolean(INIT_OWNER_PERMISSIONS, DEFAULT_INIT_OWNER_PERMISSIONS); } public static void setInitOwnerPermissions(boolean ownerPermissions) { prefs.putBoolean(INIT_OWNER_PERMISSIONS, ownerPermissions); } public static boolean getInitLockMovement() { return prefs.getBoolean(INIT_LOCK_MOVEMENT, DEFAULT_INIT_LOCK_MOVEMENT); } public static void setInitLockMovement(boolean lockMovement) { prefs.putBoolean(INIT_LOCK_MOVEMENT, lockMovement); } public static boolean getChatNotificationShowBackground() { //System.out.println("Getting Value:" + prefs.getBoolean(KEY_CHAT_NOTIFICATION_SHOW_BACKGROUND, DEFAULT_CHAT_NOTIFICATION_SHOW_BACKGROUND)); return prefs.getBoolean(KEY_CHAT_NOTIFICATION_SHOW_BACKGROUND, DEFAULT_CHAT_NOTIFICATION_SHOW_BACKGROUND); } public static void setChatNotificationShowBackground(boolean flag) { prefs.putBoolean(KEY_CHAT_NOTIFICATION_SHOW_BACKGROUND, flag); } public static boolean isShowInitGainMessage() { //KEY_SHOW_INIT_GAIN_MESSAGE return prefs.getBoolean(KEY_SHOW_INIT_GAIN_MESSAGE, DEFAULT_SHOW_INIT_GAIN_MESSAGE); } public static void setShowInitGainMessage(boolean flag) { prefs.putBoolean(KEY_SHOW_INIT_GAIN_MESSAGE, flag); } }