From 6312ef6a0ad2de353b48f7fe0e9048866a84a055 Mon Sep 17 00:00:00 2001 From: Jmr3366 Date: Thu, 21 May 2026 09:10:17 -0400 Subject: [PATCH 1/6] Fulfills #5966, this is a broader approach mention in #1762, #1909, #2002 --- .../main/proto/data_transfer_objects.proto | 1 + .../rptools/maptool/client/AppActions.java | 25 +++++++++++++++++++ .../maptool/client/tool/PointerTool.java | 7 +++++- .../rptools/maptool/client/ui/AppMenuBar.java | 1 + .../maptool/client/ui/MapToolFrame.java | 4 +++ .../buttongroups/AbstractButtonGroup.java | 7 +++++- .../macrobuttons/buttongroups/AreaGroup.java | 4 ++- .../ui/macrobuttons/buttons/MacroButton.java | 3 +++ .../panels/AbstractMacroPanel.java | 4 ++- .../startserverdialog/StartServerDialog.java | 4 +++ .../StartServerDialogPreferences.java | 8 +++++- .../StartServerDialogView.form | 24 +++++++++++++----- .../rptools/maptool/server/ServerPolicy.java | 14 +++++++++++ .../rptools/maptool/language/i18n.properties | 2 ++ 14 files changed, 97 insertions(+), 11 deletions(-) diff --git a/messages/src/main/proto/data_transfer_objects.proto b/messages/src/main/proto/data_transfer_objects.proto index 27bedf1b16..b2d8bcc0d1 100644 --- a/messages/src/main/proto/data_transfer_objects.proto +++ b/messages/src/main/proto/data_transfer_objects.proto @@ -31,6 +31,7 @@ message ServerPolicyDto { bool vbl_blocks_move = 15; bool hide_map_select_ui = 16; bool lock_player_library = 17; + bool is_token_context_locked = 18; } message CampaignDto { diff --git a/src/main/java/net/rptools/maptool/client/AppActions.java b/src/main/java/net/rptools/maptool/client/AppActions.java index 9a500f2f2a..eeb04bf939 100644 --- a/src/main/java/net/rptools/maptool/client/AppActions.java +++ b/src/main/java/net/rptools/maptool/client/AppActions.java @@ -1944,7 +1944,31 @@ protected void executeAction() { client.getServerCommand().setServerPolicy(policy); } }; + /** Toggle to enable / disable player use of the token context menu. */ + public static final Action TOGGLE_TOKEN_CONTEXT_LOCK = + new TranslatedClientAction("action.toggleTokenContextMenuLock") { + @Override + public boolean isAvailable() { + return MapTool.getPlayer().isGM(); + } + + @Override + public boolean isSelected() { + return MapTool.getServerPolicy().isTokenContextLocked(); + } + + @Override + protected void executeAction() { + var client = MapTool.getClient(); + + ServerPolicy policy = client.getServerPolicy(); + policy.setIsTokenContextLocked(!policy.isTokenContextLocked()); + + client.setServerPolicy(policy); + client.getServerCommand().setServerPolicy(policy); + } + }; public static final Action START_SERVER = new TranslatedClientAction("action.serverStart") { @@ -1985,6 +2009,7 @@ protected void executeAction() { policy.setPlayersReceiveCampaignMacros(serverProps.getPlayersReceiveCampaignMacros()); policy.setHiddenMapSelectUI(serverProps.getMapSelectUIHidden()); policy.setIsTokenEditorLocked(serverProps.getLockTokenEditOnStart()); + policy.setIsTokenContextLocked(serverProps.getLockTokenContextOnStart()); policy.setIsMovementLocked(serverProps.getLockPlayerMovementOnStart()); policy.setDisablePlayerAssetPanel(serverProps.getPlayerLibraryLock()); diff --git a/src/main/java/net/rptools/maptool/client/tool/PointerTool.java b/src/main/java/net/rptools/maptool/client/tool/PointerTool.java index 774a4e1f65..9e4e1e0896 100644 --- a/src/main/java/net/rptools/maptool/client/tool/PointerTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/PointerTool.java @@ -281,7 +281,9 @@ public void handleMousePressed(MouseEvent event) { } if (SwingUtilities.isRightMouseButton(event)) { Token token = getTokenAt(event.getX(), event.getY()); - if (token == null || !AppUtil.playerOwns(token)) { + if (token == null + || !AppUtil.playerOwns(token) + || (!MapTool.getPlayer().isGM() && MapTool.getServerPolicy().isTokenContextLocked())) { return; } tokenUnderMouse = token; @@ -568,6 +570,9 @@ public void mouseReleased(MouseEvent e) { // POPUP MENU if (SwingUtilities.isRightMouseButton(e) && tokenDragOp == null && !isDraggingMap) { + if (!MapTool.getPlayer().isGM() && MapTool.getServerPolicy().isTokenContextLocked()) { + return; + } final var selectionModel = renderer.getSelectionModel(); if (tokenUnderMouse != null && !selectionModel.isSelected(tokenUnderMouse.getId())) { if (!SwingUtil.isShiftDown(e)) { diff --git a/src/main/java/net/rptools/maptool/client/ui/AppMenuBar.java b/src/main/java/net/rptools/maptool/client/ui/AppMenuBar.java index 7b850a78bb..0fda468132 100644 --- a/src/main/java/net/rptools/maptool/client/ui/AppMenuBar.java +++ b/src/main/java/net/rptools/maptool/client/ui/AppMenuBar.java @@ -191,6 +191,7 @@ protected JMenu createToolsMenu() { menu.add(new RPCheckBoxMenuItem(AppActions.TOGGLE_LINK_PLAYER_VIEW, menu)); menu.add(new RPCheckBoxMenuItem(AppActions.TOGGLE_MOVEMENT_LOCK, menu)); menu.add(new RPCheckBoxMenuItem(AppActions.TOGGLE_TOKEN_EDITOR_LOCK, menu)); + menu.add(new RPCheckBoxMenuItem(AppActions.TOGGLE_TOKEN_CONTEXT_LOCK, menu)); menu.add(new RPCheckBoxMenuItem(AppActions.TOGGLE_ZOOM_LOCK, menu)); menu.add(new RPCheckBoxMenuItem(AppActions.TOGGLE_ENFORCE_NOTIFICATION, menu)); diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index bef898650f..0e9edc1d15 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -1399,6 +1399,10 @@ public void mousePressed(MouseEvent e) { } } if (!selectedTokenSet.isEmpty()) { + if (!MapTool.getPlayer().isGM() + && MapTool.getServerPolicy().isTokenContextLocked()) { + return; + } try { if (firstToken.getLayer().isStampLayer()) { new StampPopupMenu( diff --git a/src/main/java/net/rptools/maptool/client/ui/macrobuttons/buttongroups/AbstractButtonGroup.java b/src/main/java/net/rptools/maptool/client/ui/macrobuttons/buttongroups/AbstractButtonGroup.java index 4addb4d104..3e45336c7d 100644 --- a/src/main/java/net/rptools/maptool/client/ui/macrobuttons/buttongroups/AbstractButtonGroup.java +++ b/src/main/java/net/rptools/maptool/client/ui/macrobuttons/buttongroups/AbstractButtonGroup.java @@ -185,7 +185,9 @@ public void mousePressed(MouseEvent event) {} public void mouseReleased(MouseEvent event) { Token token = getToken(); if (SwingUtilities.isRightMouseButton(event)) { - if (getPanelClass().equals("CampaignPanel") && !MapTool.getPlayer().isGM()) { + if (!MapTool.getPlayer().isGM() + && ("CampaignPanel".equals(getPanelClass()) + || MapTool.getServerPolicy().isTokenContextLocked())) { return; } // open button group menu @@ -280,6 +282,9 @@ public void mouseReleased(MouseEvent event) { MapTool.getFrame() .showTokenPropertiesDialog(token, MapTool.getFrame().getCurrentZoneRenderer()); } else if (SwingUtilities.isRightMouseButton(event)) { + if (!MapTool.getPlayer().isGM() && MapTool.getServerPolicy().isTokenContextLocked()) { + return; + } // open token popup menu Set GUIDSet = new HashSet(); GUIDSet.add(tokenId); diff --git a/src/main/java/net/rptools/maptool/client/ui/macrobuttons/buttongroups/AreaGroup.java b/src/main/java/net/rptools/maptool/client/ui/macrobuttons/buttongroups/AreaGroup.java index ef2d0f594f..76bd89d7d4 100644 --- a/src/main/java/net/rptools/maptool/client/ui/macrobuttons/buttongroups/AreaGroup.java +++ b/src/main/java/net/rptools/maptool/client/ui/macrobuttons/buttongroups/AreaGroup.java @@ -145,7 +145,9 @@ public Dimension getPreferredSize() { public void mouseReleased(MouseEvent event) { Token token = getToken(); if (SwingUtilities.isRightMouseButton(event)) { - if ("CampaignPanel".equals(getPanelClass()) && !MapTool.getPlayer().isGM()) { + if (!MapTool.getPlayer().isGM() + && ("CampaignPanel".equals(getPanelClass()) + || MapTool.getServerPolicy().isTokenContextLocked())) { return; } // open button group menu diff --git a/src/main/java/net/rptools/maptool/client/ui/macrobuttons/buttons/MacroButton.java b/src/main/java/net/rptools/maptool/client/ui/macrobuttons/buttons/MacroButton.java index 27973d492a..efdc729143 100644 --- a/src/main/java/net/rptools/maptool/client/ui/macrobuttons/buttons/MacroButton.java +++ b/src/main/java/net/rptools/maptool/client/ui/macrobuttons/buttons/MacroButton.java @@ -204,6 +204,9 @@ public void mouseReleased(MouseEvent event) { properties.executeMacro(); } } else if (SwingUtilities.isRightMouseButton(event)) { + if (!MapTool.getPlayer().isGM() && MapTool.getServerPolicy().isTokenContextLocked()) { + return; + } if (getPanelClass().equals("GlobalPanel")) { new MacroButtonPopupMenu(this, panelClass, false).show(this, event.getX(), event.getY()); } else if (getPanelClass().equals("CampaignPanel")) { diff --git a/src/main/java/net/rptools/maptool/client/ui/macrobuttons/panels/AbstractMacroPanel.java b/src/main/java/net/rptools/maptool/client/ui/macrobuttons/panels/AbstractMacroPanel.java index d8dfa9bf3a..705a8130b5 100644 --- a/src/main/java/net/rptools/maptool/client/ui/macrobuttons/panels/AbstractMacroPanel.java +++ b/src/main/java/net/rptools/maptool/client/ui/macrobuttons/panels/AbstractMacroPanel.java @@ -173,7 +173,9 @@ public void mousePressed(MouseEvent event) {} public void mouseReleased(MouseEvent event) { if (SwingUtilities.isRightMouseButton(event)) { - if ("CampaignPanel".equals(getPanelClass()) && !MapTool.getPlayer().isGM()) { + if (!MapTool.getPlayer().isGM() + && ("CampaignPanel".equals(getPanelClass()) + || MapTool.getServerPolicy().isTokenContextLocked())) { return; } // open button group menu diff --git a/src/main/java/net/rptools/maptool/client/ui/startserverdialog/StartServerDialog.java b/src/main/java/net/rptools/maptool/client/ui/startserverdialog/StartServerDialog.java index 7adb56b6a5..de8dddd635 100644 --- a/src/main/java/net/rptools/maptool/client/ui/startserverdialog/StartServerDialog.java +++ b/src/main/java/net/rptools/maptool/client/ui/startserverdialog/StartServerDialog.java @@ -49,6 +49,7 @@ public class StartServerDialog extends AbeillePanel - + @@ -196,7 +196,7 @@ - + @@ -249,7 +249,7 @@ - + @@ -260,7 +260,7 @@ - + @@ -282,7 +282,7 @@ - + @@ -292,9 +292,21 @@ - + + + + + + + + + + + + + diff --git a/src/main/java/net/rptools/maptool/server/ServerPolicy.java b/src/main/java/net/rptools/maptool/server/ServerPolicy.java index 11300be34b..286c0f5974 100644 --- a/src/main/java/net/rptools/maptool/server/ServerPolicy.java +++ b/src/main/java/net/rptools/maptool/server/ServerPolicy.java @@ -30,6 +30,7 @@ public class ServerPolicy { private boolean strictTokenMovement; private boolean isMovementLocked; private boolean isTokenEditorLocked; + private boolean isTokenContextLocked; private boolean playersCanRevealVision; private boolean gmRevealsVisionForUnownedTokens; private boolean useIndividualViews; @@ -57,6 +58,7 @@ public ServerPolicy(ServerPolicy other) { this.strictTokenMovement = other.strictTokenMovement; this.isMovementLocked = other.isMovementLocked; this.isTokenEditorLocked = other.isTokenEditorLocked; + this.isTokenContextLocked = other.isTokenContextLocked; this.playersCanRevealVision = other.playersCanRevealVision; this.gmRevealsVisionForUnownedTokens = other.gmRevealsVisionForUnownedTokens; this.useIndividualViews = other.useIndividualViews; @@ -98,10 +100,18 @@ public boolean isTokenEditorLocked() { return isTokenEditorLocked; } + public boolean isTokenContextLocked() { + return isTokenContextLocked; + } + public void setIsTokenEditorLocked(boolean locked) { isTokenEditorLocked = locked; } + public void setIsTokenContextLocked(boolean locked) { + isTokenContextLocked = locked; + } + public void setPlayersCanRevealVision(boolean flag) { playersCanRevealVision = flag; } @@ -273,6 +283,8 @@ public JsonObject toJSON() { sinfo.addProperty("movement locked", isMovementLocked() ? BigDecimal.ONE : BigDecimal.ZERO); sinfo.addProperty( "token editor locked", isTokenEditorLocked() ? BigDecimal.ONE : BigDecimal.ZERO); + sinfo.addProperty( + "token context locked", isTokenContextLocked() ? BigDecimal.ONE : BigDecimal.ZERO); sinfo.addProperty( "restricted impersonation", isRestrictedImpersonation() ? BigDecimal.ONE : BigDecimal.ZERO); sinfo.addProperty( @@ -325,6 +337,7 @@ public static ServerPolicy fromDto(ServerPolicyDto dto) { policy.strictTokenMovement = dto.getUseStrictTokenManagement(); policy.isMovementLocked = dto.getIsMovementLocked(); policy.isTokenEditorLocked = dto.getIsTokenEditorLocked(); + policy.isTokenContextLocked = dto.getIsTokenContextLocked(); policy.playersCanRevealVision = dto.getPlayersCanRevealVision(); policy.gmRevealsVisionForUnownedTokens = dto.getGmRevealsVisionForUnownedTokens(); policy.useIndividualViews = dto.getUseIndividualViews(); @@ -347,6 +360,7 @@ public ServerPolicyDto toDto() { dto.setUseStrictTokenManagement(strictTokenMovement); dto.setIsMovementLocked(isMovementLocked); dto.setIsTokenEditorLocked(isTokenEditorLocked); + dto.setIsTokenContextLocked(isTokenContextLocked); dto.setPlayersCanRevealVision(playersCanRevealVision); dto.setGmRevealsVisionForUnownedTokens(gmRevealsVisionForUnownedTokens); dto.setUseIndividualViews(useIndividualViews); diff --git a/src/main/resources/net/rptools/maptool/language/i18n.properties b/src/main/resources/net/rptools/maptool/language/i18n.properties index 8c4cd026d8..95a8b54742 100644 --- a/src/main/resources/net/rptools/maptool/language/i18n.properties +++ b/src/main/resources/net/rptools/maptool/language/i18n.properties @@ -1645,6 +1645,8 @@ action.toggleMovementLock = &Lock Player Movement action.toggleMovementLock.description = Locks movement for player-owned tokens. action.toggleTokenEditorLock = Lock Player Token Editor action.toggleTokenEditorLock.description = Locks access to the Token Editor. +action.toggleTokenContextMenuLock = Lock Player Token Context Menu +action.toggleTokenContextMenuLock.description = Locks access to the Context Menu. action.toggleNewZonesHaveFOW = New Maps have Fog of War action.toggleTokensStartSnapToGrid = Tokens Start Snap to Grid # Edit Menu From dd404a33f5fed9254fe3efe5af06b19bc6e35b2a Mon Sep 17 00:00:00 2001 From: Jmr3366 Date: Thu, 21 May 2026 10:16:05 -0400 Subject: [PATCH 2/6] Fulfills #5966, this is a broader approach mentioned in #1762, #1909, #2002 Spotless round 2 --- .../rptools/maptool/client/AppActions.java | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/AppActions.java b/src/main/java/net/rptools/maptool/client/AppActions.java index eeb04bf939..e272577dd2 100644 --- a/src/main/java/net/rptools/maptool/client/AppActions.java +++ b/src/main/java/net/rptools/maptool/client/AppActions.java @@ -1944,31 +1944,29 @@ protected void executeAction() { client.getServerCommand().setServerPolicy(policy); } }; - /** Toggle to enable / disable player use of the token context menu. */ - public static final Action TOGGLE_TOKEN_CONTEXT_LOCK = - new TranslatedClientAction("action.toggleTokenContextMenuLock") { - @Override - public boolean isAvailable() { - return MapTool.getPlayer().isGM(); - } + public static final Action TOGGLE_TOKEN_CONTEXT_LOCK = + new TranslatedClientAction("action.toggleTokenContextMenuLock") { - @Override - public boolean isSelected() { - return MapTool.getServerPolicy().isTokenContextLocked(); - } + @Override + public boolean isAvailable() { return MapTool.getPlayer().isGM(); } + + @Override + public boolean isSelected() { + return MapTool.getServerPolicy().isTokenContextLocked(); + } - @Override - protected void executeAction() { - var client = MapTool.getClient(); + @Override + protected void executeAction() { + var client = MapTool.getClient(); - ServerPolicy policy = client.getServerPolicy(); - policy.setIsTokenContextLocked(!policy.isTokenContextLocked()); + ServerPolicy policy = client.getServerPolicy(); + policy.setIsTokenContextLocked(!policy.isTokenContextLocked()); - client.setServerPolicy(policy); - client.getServerCommand().setServerPolicy(policy); - } - }; + client.setServerPolicy(policy); + client.getServerCommand().setServerPolicy(policy); + } + }; public static final Action START_SERVER = new TranslatedClientAction("action.serverStart") { From a67046be46f3ee08f4cc31dd528dc21294ebcc80 Mon Sep 17 00:00:00 2001 From: Jmr3366 Date: Wed, 27 May 2026 09:09:59 -0400 Subject: [PATCH 3/6] Fulfills #5966, this is a broader approach mentioned in #1762, #1909, #2002 Spotless round 3 --- src/main/java/net/rptools/maptool/client/AppActions.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/rptools/maptool/client/AppActions.java b/src/main/java/net/rptools/maptool/client/AppActions.java index e272577dd2..12c660730e 100644 --- a/src/main/java/net/rptools/maptool/client/AppActions.java +++ b/src/main/java/net/rptools/maptool/client/AppActions.java @@ -1949,7 +1949,9 @@ protected void executeAction() { new TranslatedClientAction("action.toggleTokenContextMenuLock") { @Override - public boolean isAvailable() { return MapTool.getPlayer().isGM(); } + public boolean isAvailable() { + return MapTool.getPlayer().isGM(); + } @Override public boolean isSelected() { From 0ef0e22ae5b897f7704fdcc8097d24513a414267 Mon Sep 17 00:00:00 2001 From: Jmr3366 Date: Wed, 27 May 2026 09:09:59 -0400 Subject: [PATCH 4/6] Fulfills #5966, this is a broader approach mentioned in #1762, #1909, #2002 Spotless round 4 --- src/main/java/net/rptools/maptool/client/AppActions.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/rptools/maptool/client/AppActions.java b/src/main/java/net/rptools/maptool/client/AppActions.java index e272577dd2..12c660730e 100644 --- a/src/main/java/net/rptools/maptool/client/AppActions.java +++ b/src/main/java/net/rptools/maptool/client/AppActions.java @@ -1949,7 +1949,9 @@ protected void executeAction() { new TranslatedClientAction("action.toggleTokenContextMenuLock") { @Override - public boolean isAvailable() { return MapTool.getPlayer().isGM(); } + public boolean isAvailable() { + return MapTool.getPlayer().isGM(); + } @Override public boolean isSelected() { From d65fa0e6fe6d2b5a901574c17052c8c8d6947e49 Mon Sep 17 00:00:00 2001 From: Jmr3366 Date: Wed, 27 May 2026 09:41:03 -0400 Subject: [PATCH 5/6] Fulfills #5966, this is a broader approach mentioned in #1762, #1909, #2002 Spotless round 4 --- .../StartServerDialogPreferences.java | 512 +++++++++--------- 1 file changed, 258 insertions(+), 254 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/startserverdialog/StartServerDialogPreferences.java b/src/main/java/net/rptools/maptool/client/ui/startserverdialog/StartServerDialogPreferences.java index e6f5710cc5..78eca4a984 100644 --- a/src/main/java/net/rptools/maptool/client/ui/startserverdialog/StartServerDialogPreferences.java +++ b/src/main/java/net/rptools/maptool/client/ui/startserverdialog/StartServerDialogPreferences.java @@ -14,265 +14,269 @@ */ package net.rptools.maptool.client.ui.startserverdialog; -import java.util.Objects; -import java.util.prefs.Preferences; import net.rptools.maptool.client.AppConstants; import net.rptools.maptool.client.AppPreferences; import net.rptools.maptool.client.walker.WalkerMetric; import net.rptools.maptool.model.player.Player; import net.rptools.maptool.server.ServerConfig; +import java.util.Objects; +import java.util.prefs.Preferences; + public class StartServerDialogPreferences { - private static Preferences prefs = - Preferences.userRoot().node(AppConstants.APP_NAME + "/prefs/server"); - - private static final String KEY_USERNAME = "name"; - private static final String KEY_ROLE = "playerRole"; - private static final String KEY_PORT = "port"; - private static final String KEY_GM_PASSWORD = "gmPassword"; - private static final String KEY_PLAYER_PASSWORD = "playerPassword"; - private static final String KEY_STRICT_TOKEN_OWNERSHIP = "strictTokenOwnership"; - private static final String KEY_REGISTER_SERVER = "registerServer"; - private static final String KEY_RPTOOLS_NAME = "rptoolsName"; - private static final String KEY_RPTOOLS_PRIVATE = "rptoolsPrivate"; - private static final String KEY_PLAYERS_CAN_REVEAL_VISION = "playersCanRevealVisionCheckbox"; - private static final String KEY_GM_REVEALS_VISION = "gmRevealsVisionForUnownedTokens"; - private static final String KEY_USE_INDIVIDUAL_VIEWS = "useIndividualViews"; - private static final String KEY_USE_UPNP = "useUPnP"; - private static final String KEY_RESTRICTED_IMPERSONATION = "restrictedImpersonation"; - private static final String KEY_PLAYERS_RECEIVE_CAMPAIGN_MACROS = "playersReceiveCampaignMacros"; - private static final String KEY_WALKER_METRIC = "movementMetric"; - private static final String KEY_USE_INDIVIDUAL_FOW = "useIndividualFOW"; - private static final String KEY_AUTO_REVEAL_ON_MOVE = "autoRevealOnMovement"; - - private static final String KEY_USE_EASY_CONNECT = "useEasyConnect"; - private static final String KEY_USE_PASSWORD_FILE = "usePasswordFile"; - private static final String KEY_HIDE_MAP_SELECT_UI = "hideMapSelectUI"; - private static final String KEY_START_LOCKED_TOKEN_EDIT = "lockTokenEditOnStartup"; - private static final String KEY_START_LOCKED_TOKEN_CONTEXT = "lockTokenContextOnStartup"; - private static final String KEY_START_LOCKED_PLAYER_MOVEMENT = "lockPlayerMovementOnStartup"; - private static final String KEY_LOCK_PLAYER_LIBRARY = "lockPlayerLibrary"; - - private static final String KEY_USE_WEBRTC = "useWebRTC"; - - private static Boolean useToolTipsForUnformattedRolls = null; - - public Player.Role getRole() { - return Player.Role.valueOf(prefs.get(KEY_ROLE, Player.Role.GM.name())); - } - - public void setRole(Player.Role role) { - prefs.put(KEY_ROLE, role.name()); - } - - public String getUsername() { - return prefs.get(KEY_USERNAME, ""); - } - - public void setUsername(String name) { - prefs.put(KEY_USERNAME, name.trim()); - } - - public void setGMPassword(String password) { - prefs.put(KEY_GM_PASSWORD, password.trim()); - } - - public String getGMPassword() { - return prefs.get(KEY_GM_PASSWORD, ""); - } - - public void setPlayerPassword(String password) { - prefs.put(KEY_PLAYER_PASSWORD, password.trim()); - } - - public String getPlayerPassword() { - return prefs.get(KEY_PLAYER_PASSWORD, ""); - } - - public int getPort() { - return prefs.getInt(KEY_PORT, ServerConfig.DEFAULT_PORT); - } - - public void setPort(int port) { - prefs.putInt(KEY_PORT, port); - } - - public boolean getUseStrictTokenOwnership() { - return prefs.getBoolean(KEY_STRICT_TOKEN_OWNERSHIP, false); - } - - public void setUseStrictTokenOwnership(boolean use) { - prefs.putBoolean(KEY_STRICT_TOKEN_OWNERSHIP, use); - } - - // my addition - public boolean getRestrictedImpersonation() { - return prefs.getBoolean(KEY_RESTRICTED_IMPERSONATION, false); - } - - public void setRestrictedImpersonation(boolean impersonation) { - prefs.putBoolean(KEY_RESTRICTED_IMPERSONATION, impersonation); - } - - public boolean registerServer() { - return prefs.getBoolean(KEY_REGISTER_SERVER, false); - } - - public void setRegisterServer(boolean register) { - prefs.putBoolean(KEY_REGISTER_SERVER, register); - } - - public void setRPToolsName(String name) { - prefs.put(KEY_RPTOOLS_NAME, name.trim()); - } - - public String getRPToolsName() { - return prefs.get(KEY_RPTOOLS_NAME, ""); - } - - public void setRPToolsPrivate(boolean flag) { - prefs.putBoolean(KEY_RPTOOLS_PRIVATE, flag); - } - - public boolean getRPToolsPrivate() { - return prefs.getBoolean(KEY_RPTOOLS_PRIVATE, false); - } - - public void setPlayersCanRevealVision(boolean flag) { - prefs.putBoolean(KEY_PLAYERS_CAN_REVEAL_VISION, flag); - } - - public boolean getPlayersCanRevealVision() { - return prefs.getBoolean(KEY_PLAYERS_CAN_REVEAL_VISION, false); - } - - public void setGmRevealsVisionForUnownedTokens(boolean flag) { - prefs.putBoolean(KEY_GM_REVEALS_VISION, flag); - } - - public boolean getGmRevealsVisionForUnownedTokens() { - return prefs.getBoolean(KEY_GM_REVEALS_VISION, false); - } - - public void setUseIndividualViews(boolean flag) { - prefs.putBoolean(KEY_USE_INDIVIDUAL_VIEWS, flag); - } - - public boolean getUseIndividualViews() { - return prefs.getBoolean(KEY_USE_INDIVIDUAL_VIEWS, false); - } - - public void setUseUPnP(boolean op) { - prefs.putBoolean(KEY_USE_UPNP, op); - } - - public boolean getUseUPnP() { - return prefs.getBoolean(KEY_USE_UPNP, false); - } - - public void setPlayersReceiveCampaignMacros(boolean flag) { - prefs.putBoolean(KEY_PLAYERS_RECEIVE_CAMPAIGN_MACROS, flag); - } - - public boolean getPlayersReceiveCampaignMacros() { - return prefs.getBoolean(KEY_PLAYERS_RECEIVE_CAMPAIGN_MACROS, false); - } - - public boolean getUseToolTipsForUnformattedRolls() { - // Tool tips works slightly differently as its a setting that has to be available - // to the user to configure before the start server dialog. So if it has not been - // specified we default to the users preferences. - return Objects.requireNonNullElseGet( - useToolTipsForUnformattedRolls, AppPreferences.useToolTipForInlineRoll::get); - } - - public void setUseToolTipsForUnformattedRolls(boolean flag) { - useToolTipsForUnformattedRolls = flag; - } - - public WalkerMetric getMovementMetric() { - String metric = prefs.get(KEY_WALKER_METRIC, "ONE_ONE_ONE"); - return WalkerMetric.valueOf(metric); - } - - public void setMovementMetric(WalkerMetric metric) { - prefs.put(KEY_WALKER_METRIC, metric.name()); - } - - public boolean getUseIndividualFOW() { - return prefs.getBoolean(KEY_USE_INDIVIDUAL_FOW, false); - } - - public void setUseIndividualFOW(boolean flag) { - prefs.putBoolean(KEY_USE_INDIVIDUAL_FOW, flag); - } - - public boolean isAutoRevealOnMovement() { - return prefs.getBoolean(KEY_AUTO_REVEAL_ON_MOVE, false); - } - - public void setAutoRevealOnMovement(boolean flag) { - prefs.putBoolean(KEY_AUTO_REVEAL_ON_MOVE, flag); - } - - public boolean getUsePasswordFile() { - return prefs.getBoolean(KEY_USE_PASSWORD_FILE, false); - } - - public void setUsePasswordFile(boolean flag) { - prefs.putBoolean(KEY_USE_PASSWORD_FILE, flag); - } - - public boolean getUseEasyConnect() { - return prefs.getBoolean(KEY_USE_EASY_CONNECT, false); - } - - public void setUseEasyConnect(boolean flag) { - prefs.putBoolean(KEY_USE_EASY_CONNECT, flag); - } - - public boolean getMapSelectUIHidden() { - return prefs.getBoolean(KEY_HIDE_MAP_SELECT_UI, false); - } - - public void setMapSelectUIHidden(boolean flag) { - prefs.putBoolean(KEY_HIDE_MAP_SELECT_UI, flag); - } - - public boolean getLockTokenEditOnStart() { - return prefs.getBoolean(KEY_START_LOCKED_TOKEN_EDIT, false); - } - - public boolean getLockTokenContextOnStart() { - return prefs.getBoolean(KEY_START_LOCKED_TOKEN_CONTEXT, false); - } - public void setLockTokenEditOnStart(boolean flag) { - prefs.putBoolean(KEY_START_LOCKED_TOKEN_EDIT, flag); - } - public void setLockTokenContextOnStart(boolean flag) { - prefs.putBoolean(KEY_START_LOCKED_TOKEN_CONTEXT, flag); - } - public boolean getLockPlayerMovementOnStart() { - return prefs.getBoolean(KEY_START_LOCKED_PLAYER_MOVEMENT, false); - } - - public void setLockPlayerMovementOnStart(boolean flag) { - prefs.putBoolean(KEY_START_LOCKED_PLAYER_MOVEMENT, flag); - } - - public boolean getPlayerLibraryLock() { - return prefs.getBoolean(KEY_LOCK_PLAYER_LIBRARY, false); - } - - public void setPlayerLibraryLock(boolean flag) { - prefs.putBoolean(KEY_LOCK_PLAYER_LIBRARY, flag); - } - - public boolean getUseWebRtc() { - return prefs.getBoolean(KEY_USE_WEBRTC, false); - } - - public void setKeyUseWebrtc(boolean flag) { - prefs.putBoolean(KEY_USE_WEBRTC, flag); - } + private static Preferences prefs = + Preferences.userRoot().node(AppConstants.APP_NAME + "/prefs/server"); + + private static final String KEY_USERNAME = "name"; + private static final String KEY_ROLE = "playerRole"; + private static final String KEY_PORT = "port"; + private static final String KEY_GM_PASSWORD = "gmPassword"; + private static final String KEY_PLAYER_PASSWORD = "playerPassword"; + private static final String KEY_STRICT_TOKEN_OWNERSHIP = "strictTokenOwnership"; + private static final String KEY_REGISTER_SERVER = "registerServer"; + private static final String KEY_RPTOOLS_NAME = "rptoolsName"; + private static final String KEY_RPTOOLS_PRIVATE = "rptoolsPrivate"; + private static final String KEY_PLAYERS_CAN_REVEAL_VISION = "playersCanRevealVisionCheckbox"; + private static final String KEY_GM_REVEALS_VISION = "gmRevealsVisionForUnownedTokens"; + private static final String KEY_USE_INDIVIDUAL_VIEWS = "useIndividualViews"; + private static final String KEY_USE_UPNP = "useUPnP"; + private static final String KEY_RESTRICTED_IMPERSONATION = "restrictedImpersonation"; + private static final String KEY_PLAYERS_RECEIVE_CAMPAIGN_MACROS = "playersReceiveCampaignMacros"; + private static final String KEY_WALKER_METRIC = "movementMetric"; + private static final String KEY_USE_INDIVIDUAL_FOW = "useIndividualFOW"; + private static final String KEY_AUTO_REVEAL_ON_MOVE = "autoRevealOnMovement"; + + private static final String KEY_USE_EASY_CONNECT = "useEasyConnect"; + private static final String KEY_USE_PASSWORD_FILE = "usePasswordFile"; + private static final String KEY_HIDE_MAP_SELECT_UI = "hideMapSelectUI"; + private static final String KEY_START_LOCKED_TOKEN_EDIT = "lockTokenEditOnStartup"; + private static final String KEY_START_LOCKED_TOKEN_CONTEXT = "lockTokenContextOnStartup"; + private static final String KEY_START_LOCKED_PLAYER_MOVEMENT = "lockPlayerMovementOnStartup"; + private static final String KEY_LOCK_PLAYER_LIBRARY = "lockPlayerLibrary"; + + private static final String KEY_USE_WEBRTC = "useWebRTC"; + + private static Boolean useToolTipsForUnformattedRolls = null; + + public Player.Role getRole() { + return Player.Role.valueOf(prefs.get(KEY_ROLE, Player.Role.GM.name())); + } + + public void setRole(Player.Role role) { + prefs.put(KEY_ROLE, role.name()); + } + + public String getUsername() { + return prefs.get(KEY_USERNAME, ""); + } + + public void setUsername(String name) { + prefs.put(KEY_USERNAME, name.trim()); + } + + public void setGMPassword(String password) { + prefs.put(KEY_GM_PASSWORD, password.trim()); + } + + public String getGMPassword() { + return prefs.get(KEY_GM_PASSWORD, ""); + } + + public void setPlayerPassword(String password) { + prefs.put(KEY_PLAYER_PASSWORD, password.trim()); + } + + public String getPlayerPassword() { + return prefs.get(KEY_PLAYER_PASSWORD, ""); + } + + public int getPort() { + return prefs.getInt(KEY_PORT, ServerConfig.DEFAULT_PORT); + } + + public void setPort(int port) { + prefs.putInt(KEY_PORT, port); + } + + public boolean getUseStrictTokenOwnership() { + return prefs.getBoolean(KEY_STRICT_TOKEN_OWNERSHIP, false); + } + + public void setUseStrictTokenOwnership(boolean use) { + prefs.putBoolean(KEY_STRICT_TOKEN_OWNERSHIP, use); + } + + // my addition + public boolean getRestrictedImpersonation() { + return prefs.getBoolean(KEY_RESTRICTED_IMPERSONATION, false); + } + + public void setRestrictedImpersonation(boolean impersonation) { + prefs.putBoolean(KEY_RESTRICTED_IMPERSONATION, impersonation); + } + + public boolean registerServer() { + return prefs.getBoolean(KEY_REGISTER_SERVER, false); + } + + public void setRegisterServer(boolean register) { + prefs.putBoolean(KEY_REGISTER_SERVER, register); + } + + public void setRPToolsName(String name) { + prefs.put(KEY_RPTOOLS_NAME, name.trim()); + } + + public String getRPToolsName() { + return prefs.get(KEY_RPTOOLS_NAME, ""); + } + + public void setRPToolsPrivate(boolean flag) { + prefs.putBoolean(KEY_RPTOOLS_PRIVATE, flag); + } + + public boolean getRPToolsPrivate() { + return prefs.getBoolean(KEY_RPTOOLS_PRIVATE, false); + } + + public void setPlayersCanRevealVision(boolean flag) { + prefs.putBoolean(KEY_PLAYERS_CAN_REVEAL_VISION, flag); + } + + public boolean getPlayersCanRevealVision() { + return prefs.getBoolean(KEY_PLAYERS_CAN_REVEAL_VISION, false); + } + + public void setGmRevealsVisionForUnownedTokens(boolean flag) { + prefs.putBoolean(KEY_GM_REVEALS_VISION, flag); + } + + public boolean getGmRevealsVisionForUnownedTokens() { + return prefs.getBoolean(KEY_GM_REVEALS_VISION, false); + } + + public void setUseIndividualViews(boolean flag) { + prefs.putBoolean(KEY_USE_INDIVIDUAL_VIEWS, flag); + } + + public boolean getUseIndividualViews() { + return prefs.getBoolean(KEY_USE_INDIVIDUAL_VIEWS, false); + } + + public void setUseUPnP(boolean op) { + prefs.putBoolean(KEY_USE_UPNP, op); + } + + public boolean getUseUPnP() { + return prefs.getBoolean(KEY_USE_UPNP, false); + } + + public void setPlayersReceiveCampaignMacros(boolean flag) { + prefs.putBoolean(KEY_PLAYERS_RECEIVE_CAMPAIGN_MACROS, flag); + } + + public boolean getPlayersReceiveCampaignMacros() { + return prefs.getBoolean(KEY_PLAYERS_RECEIVE_CAMPAIGN_MACROS, false); + } + + public boolean getUseToolTipsForUnformattedRolls() { + // Tool tips works slightly differently as its a setting that has to be available + // to the user to configure before the start server dialog. So if it has not been + // specified we default to the users preferences. + return Objects.requireNonNullElseGet( + useToolTipsForUnformattedRolls, AppPreferences.useToolTipForInlineRoll::get); + } + + public void setUseToolTipsForUnformattedRolls(boolean flag) { + useToolTipsForUnformattedRolls = flag; + } + + public WalkerMetric getMovementMetric() { + String metric = prefs.get(KEY_WALKER_METRIC, "ONE_ONE_ONE"); + return WalkerMetric.valueOf(metric); + } + + public void setMovementMetric(WalkerMetric metric) { + prefs.put(KEY_WALKER_METRIC, metric.name()); + } + + public boolean getUseIndividualFOW() { + return prefs.getBoolean(KEY_USE_INDIVIDUAL_FOW, false); + } + + public void setUseIndividualFOW(boolean flag) { + prefs.putBoolean(KEY_USE_INDIVIDUAL_FOW, flag); + } + + public boolean isAutoRevealOnMovement() { + return prefs.getBoolean(KEY_AUTO_REVEAL_ON_MOVE, false); + } + + public void setAutoRevealOnMovement(boolean flag) { + prefs.putBoolean(KEY_AUTO_REVEAL_ON_MOVE, flag); + } + + public boolean getUsePasswordFile() { + return prefs.getBoolean(KEY_USE_PASSWORD_FILE, false); + } + + public void setUsePasswordFile(boolean flag) { + prefs.putBoolean(KEY_USE_PASSWORD_FILE, flag); + } + + public boolean getUseEasyConnect() { + return prefs.getBoolean(KEY_USE_EASY_CONNECT, false); + } + + public void setUseEasyConnect(boolean flag) { + prefs.putBoolean(KEY_USE_EASY_CONNECT, flag); + } + + public boolean getMapSelectUIHidden() { + return prefs.getBoolean(KEY_HIDE_MAP_SELECT_UI, false); + } + + public void setMapSelectUIHidden(boolean flag) { + prefs.putBoolean(KEY_HIDE_MAP_SELECT_UI, flag); + } + + public boolean getLockTokenEditOnStart() { + return prefs.getBoolean(KEY_START_LOCKED_TOKEN_EDIT, false); + } + + public boolean getLockTokenContextOnStart() { + return prefs.getBoolean(KEY_START_LOCKED_TOKEN_CONTEXT, false); + } + + public void setLockTokenEditOnStart(boolean flag) { + prefs.putBoolean(KEY_START_LOCKED_TOKEN_EDIT, flag); + } + + public void setLockTokenContextOnStart(boolean flag) { + prefs.putBoolean(KEY_START_LOCKED_TOKEN_CONTEXT, flag); + } + + public boolean getLockPlayerMovementOnStart() { + return prefs.getBoolean(KEY_START_LOCKED_PLAYER_MOVEMENT, false); + } + + public void setLockPlayerMovementOnStart(boolean flag) { + prefs.putBoolean(KEY_START_LOCKED_PLAYER_MOVEMENT, flag); + } + + public boolean getPlayerLibraryLock() { + return prefs.getBoolean(KEY_LOCK_PLAYER_LIBRARY, false); + } + + public void setPlayerLibraryLock(boolean flag) { + prefs.putBoolean(KEY_LOCK_PLAYER_LIBRARY, flag); + } + + public boolean getUseWebRtc() { + return prefs.getBoolean(KEY_USE_WEBRTC, false); + } + + public void setKeyUseWebrtc(boolean flag) { + prefs.putBoolean(KEY_USE_WEBRTC, flag); + } } From 4e8a4c25f7ecaca6828721b793e10a31d67c715d Mon Sep 17 00:00:00 2001 From: Jmr3366 Date: Wed, 27 May 2026 10:35:52 -0400 Subject: [PATCH 6/6] Fulfills #5966, this is a broader approach mentioned in #1762, #1909, #2002 Spotless round 6 --- .../StartServerDialogPreferences.java | 515 +++++++++--------- 1 file changed, 257 insertions(+), 258 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/startserverdialog/StartServerDialogPreferences.java b/src/main/java/net/rptools/maptool/client/ui/startserverdialog/StartServerDialogPreferences.java index 78eca4a984..b9694cb220 100644 --- a/src/main/java/net/rptools/maptool/client/ui/startserverdialog/StartServerDialogPreferences.java +++ b/src/main/java/net/rptools/maptool/client/ui/startserverdialog/StartServerDialogPreferences.java @@ -14,269 +14,268 @@ */ package net.rptools.maptool.client.ui.startserverdialog; +import java.util.Objects; +import java.util.prefs.Preferences; import net.rptools.maptool.client.AppConstants; import net.rptools.maptool.client.AppPreferences; import net.rptools.maptool.client.walker.WalkerMetric; import net.rptools.maptool.model.player.Player; import net.rptools.maptool.server.ServerConfig; -import java.util.Objects; -import java.util.prefs.Preferences; - public class StartServerDialogPreferences { - private static Preferences prefs = - Preferences.userRoot().node(AppConstants.APP_NAME + "/prefs/server"); - - private static final String KEY_USERNAME = "name"; - private static final String KEY_ROLE = "playerRole"; - private static final String KEY_PORT = "port"; - private static final String KEY_GM_PASSWORD = "gmPassword"; - private static final String KEY_PLAYER_PASSWORD = "playerPassword"; - private static final String KEY_STRICT_TOKEN_OWNERSHIP = "strictTokenOwnership"; - private static final String KEY_REGISTER_SERVER = "registerServer"; - private static final String KEY_RPTOOLS_NAME = "rptoolsName"; - private static final String KEY_RPTOOLS_PRIVATE = "rptoolsPrivate"; - private static final String KEY_PLAYERS_CAN_REVEAL_VISION = "playersCanRevealVisionCheckbox"; - private static final String KEY_GM_REVEALS_VISION = "gmRevealsVisionForUnownedTokens"; - private static final String KEY_USE_INDIVIDUAL_VIEWS = "useIndividualViews"; - private static final String KEY_USE_UPNP = "useUPnP"; - private static final String KEY_RESTRICTED_IMPERSONATION = "restrictedImpersonation"; - private static final String KEY_PLAYERS_RECEIVE_CAMPAIGN_MACROS = "playersReceiveCampaignMacros"; - private static final String KEY_WALKER_METRIC = "movementMetric"; - private static final String KEY_USE_INDIVIDUAL_FOW = "useIndividualFOW"; - private static final String KEY_AUTO_REVEAL_ON_MOVE = "autoRevealOnMovement"; - - private static final String KEY_USE_EASY_CONNECT = "useEasyConnect"; - private static final String KEY_USE_PASSWORD_FILE = "usePasswordFile"; - private static final String KEY_HIDE_MAP_SELECT_UI = "hideMapSelectUI"; - private static final String KEY_START_LOCKED_TOKEN_EDIT = "lockTokenEditOnStartup"; - private static final String KEY_START_LOCKED_TOKEN_CONTEXT = "lockTokenContextOnStartup"; - private static final String KEY_START_LOCKED_PLAYER_MOVEMENT = "lockPlayerMovementOnStartup"; - private static final String KEY_LOCK_PLAYER_LIBRARY = "lockPlayerLibrary"; - - private static final String KEY_USE_WEBRTC = "useWebRTC"; - - private static Boolean useToolTipsForUnformattedRolls = null; - - public Player.Role getRole() { - return Player.Role.valueOf(prefs.get(KEY_ROLE, Player.Role.GM.name())); - } - - public void setRole(Player.Role role) { - prefs.put(KEY_ROLE, role.name()); - } - - public String getUsername() { - return prefs.get(KEY_USERNAME, ""); - } - - public void setUsername(String name) { - prefs.put(KEY_USERNAME, name.trim()); - } - - public void setGMPassword(String password) { - prefs.put(KEY_GM_PASSWORD, password.trim()); - } - - public String getGMPassword() { - return prefs.get(KEY_GM_PASSWORD, ""); - } - - public void setPlayerPassword(String password) { - prefs.put(KEY_PLAYER_PASSWORD, password.trim()); - } - - public String getPlayerPassword() { - return prefs.get(KEY_PLAYER_PASSWORD, ""); - } - - public int getPort() { - return prefs.getInt(KEY_PORT, ServerConfig.DEFAULT_PORT); - } - - public void setPort(int port) { - prefs.putInt(KEY_PORT, port); - } - - public boolean getUseStrictTokenOwnership() { - return prefs.getBoolean(KEY_STRICT_TOKEN_OWNERSHIP, false); - } - - public void setUseStrictTokenOwnership(boolean use) { - prefs.putBoolean(KEY_STRICT_TOKEN_OWNERSHIP, use); - } - - // my addition - public boolean getRestrictedImpersonation() { - return prefs.getBoolean(KEY_RESTRICTED_IMPERSONATION, false); - } - - public void setRestrictedImpersonation(boolean impersonation) { - prefs.putBoolean(KEY_RESTRICTED_IMPERSONATION, impersonation); - } - - public boolean registerServer() { - return prefs.getBoolean(KEY_REGISTER_SERVER, false); - } - - public void setRegisterServer(boolean register) { - prefs.putBoolean(KEY_REGISTER_SERVER, register); - } - - public void setRPToolsName(String name) { - prefs.put(KEY_RPTOOLS_NAME, name.trim()); - } - - public String getRPToolsName() { - return prefs.get(KEY_RPTOOLS_NAME, ""); - } - - public void setRPToolsPrivate(boolean flag) { - prefs.putBoolean(KEY_RPTOOLS_PRIVATE, flag); - } - - public boolean getRPToolsPrivate() { - return prefs.getBoolean(KEY_RPTOOLS_PRIVATE, false); - } - - public void setPlayersCanRevealVision(boolean flag) { - prefs.putBoolean(KEY_PLAYERS_CAN_REVEAL_VISION, flag); - } - - public boolean getPlayersCanRevealVision() { - return prefs.getBoolean(KEY_PLAYERS_CAN_REVEAL_VISION, false); - } - - public void setGmRevealsVisionForUnownedTokens(boolean flag) { - prefs.putBoolean(KEY_GM_REVEALS_VISION, flag); - } - - public boolean getGmRevealsVisionForUnownedTokens() { - return prefs.getBoolean(KEY_GM_REVEALS_VISION, false); - } - - public void setUseIndividualViews(boolean flag) { - prefs.putBoolean(KEY_USE_INDIVIDUAL_VIEWS, flag); - } - - public boolean getUseIndividualViews() { - return prefs.getBoolean(KEY_USE_INDIVIDUAL_VIEWS, false); - } - - public void setUseUPnP(boolean op) { - prefs.putBoolean(KEY_USE_UPNP, op); - } - - public boolean getUseUPnP() { - return prefs.getBoolean(KEY_USE_UPNP, false); - } - - public void setPlayersReceiveCampaignMacros(boolean flag) { - prefs.putBoolean(KEY_PLAYERS_RECEIVE_CAMPAIGN_MACROS, flag); - } - - public boolean getPlayersReceiveCampaignMacros() { - return prefs.getBoolean(KEY_PLAYERS_RECEIVE_CAMPAIGN_MACROS, false); - } - - public boolean getUseToolTipsForUnformattedRolls() { - // Tool tips works slightly differently as its a setting that has to be available - // to the user to configure before the start server dialog. So if it has not been - // specified we default to the users preferences. - return Objects.requireNonNullElseGet( - useToolTipsForUnformattedRolls, AppPreferences.useToolTipForInlineRoll::get); - } - - public void setUseToolTipsForUnformattedRolls(boolean flag) { - useToolTipsForUnformattedRolls = flag; - } - - public WalkerMetric getMovementMetric() { - String metric = prefs.get(KEY_WALKER_METRIC, "ONE_ONE_ONE"); - return WalkerMetric.valueOf(metric); - } - - public void setMovementMetric(WalkerMetric metric) { - prefs.put(KEY_WALKER_METRIC, metric.name()); - } - - public boolean getUseIndividualFOW() { - return prefs.getBoolean(KEY_USE_INDIVIDUAL_FOW, false); - } - - public void setUseIndividualFOW(boolean flag) { - prefs.putBoolean(KEY_USE_INDIVIDUAL_FOW, flag); - } - - public boolean isAutoRevealOnMovement() { - return prefs.getBoolean(KEY_AUTO_REVEAL_ON_MOVE, false); - } - - public void setAutoRevealOnMovement(boolean flag) { - prefs.putBoolean(KEY_AUTO_REVEAL_ON_MOVE, flag); - } - - public boolean getUsePasswordFile() { - return prefs.getBoolean(KEY_USE_PASSWORD_FILE, false); - } - - public void setUsePasswordFile(boolean flag) { - prefs.putBoolean(KEY_USE_PASSWORD_FILE, flag); - } - - public boolean getUseEasyConnect() { - return prefs.getBoolean(KEY_USE_EASY_CONNECT, false); - } - - public void setUseEasyConnect(boolean flag) { - prefs.putBoolean(KEY_USE_EASY_CONNECT, flag); - } - - public boolean getMapSelectUIHidden() { - return prefs.getBoolean(KEY_HIDE_MAP_SELECT_UI, false); - } - - public void setMapSelectUIHidden(boolean flag) { - prefs.putBoolean(KEY_HIDE_MAP_SELECT_UI, flag); - } - - public boolean getLockTokenEditOnStart() { - return prefs.getBoolean(KEY_START_LOCKED_TOKEN_EDIT, false); - } - - public boolean getLockTokenContextOnStart() { - return prefs.getBoolean(KEY_START_LOCKED_TOKEN_CONTEXT, false); - } - - public void setLockTokenEditOnStart(boolean flag) { - prefs.putBoolean(KEY_START_LOCKED_TOKEN_EDIT, flag); - } - - public void setLockTokenContextOnStart(boolean flag) { - prefs.putBoolean(KEY_START_LOCKED_TOKEN_CONTEXT, flag); - } - - public boolean getLockPlayerMovementOnStart() { - return prefs.getBoolean(KEY_START_LOCKED_PLAYER_MOVEMENT, false); - } - - public void setLockPlayerMovementOnStart(boolean flag) { - prefs.putBoolean(KEY_START_LOCKED_PLAYER_MOVEMENT, flag); - } - - public boolean getPlayerLibraryLock() { - return prefs.getBoolean(KEY_LOCK_PLAYER_LIBRARY, false); - } - - public void setPlayerLibraryLock(boolean flag) { - prefs.putBoolean(KEY_LOCK_PLAYER_LIBRARY, flag); - } - - public boolean getUseWebRtc() { - return prefs.getBoolean(KEY_USE_WEBRTC, false); - } - - public void setKeyUseWebrtc(boolean flag) { - prefs.putBoolean(KEY_USE_WEBRTC, flag); - } + private static Preferences prefs = + Preferences.userRoot().node(AppConstants.APP_NAME + "/prefs/server"); + + private static final String KEY_USERNAME = "name"; + private static final String KEY_ROLE = "playerRole"; + private static final String KEY_PORT = "port"; + private static final String KEY_GM_PASSWORD = "gmPassword"; + private static final String KEY_PLAYER_PASSWORD = "playerPassword"; + private static final String KEY_STRICT_TOKEN_OWNERSHIP = "strictTokenOwnership"; + private static final String KEY_REGISTER_SERVER = "registerServer"; + private static final String KEY_RPTOOLS_NAME = "rptoolsName"; + private static final String KEY_RPTOOLS_PRIVATE = "rptoolsPrivate"; + private static final String KEY_PLAYERS_CAN_REVEAL_VISION = "playersCanRevealVisionCheckbox"; + private static final String KEY_GM_REVEALS_VISION = "gmRevealsVisionForUnownedTokens"; + private static final String KEY_USE_INDIVIDUAL_VIEWS = "useIndividualViews"; + private static final String KEY_USE_UPNP = "useUPnP"; + private static final String KEY_RESTRICTED_IMPERSONATION = "restrictedImpersonation"; + private static final String KEY_PLAYERS_RECEIVE_CAMPAIGN_MACROS = "playersReceiveCampaignMacros"; + private static final String KEY_WALKER_METRIC = "movementMetric"; + private static final String KEY_USE_INDIVIDUAL_FOW = "useIndividualFOW"; + private static final String KEY_AUTO_REVEAL_ON_MOVE = "autoRevealOnMovement"; + + private static final String KEY_USE_EASY_CONNECT = "useEasyConnect"; + private static final String KEY_USE_PASSWORD_FILE = "usePasswordFile"; + private static final String KEY_HIDE_MAP_SELECT_UI = "hideMapSelectUI"; + private static final String KEY_START_LOCKED_TOKEN_EDIT = "lockTokenEditOnStartup"; + private static final String KEY_START_LOCKED_TOKEN_CONTEXT = "lockTokenContextOnStartup"; + private static final String KEY_START_LOCKED_PLAYER_MOVEMENT = "lockPlayerMovementOnStartup"; + private static final String KEY_LOCK_PLAYER_LIBRARY = "lockPlayerLibrary"; + + private static final String KEY_USE_WEBRTC = "useWebRTC"; + + private static Boolean useToolTipsForUnformattedRolls = null; + + public Player.Role getRole() { + return Player.Role.valueOf(prefs.get(KEY_ROLE, Player.Role.GM.name())); + } + + public void setRole(Player.Role role) { + prefs.put(KEY_ROLE, role.name()); + } + + public String getUsername() { + return prefs.get(KEY_USERNAME, ""); + } + + public void setUsername(String name) { + prefs.put(KEY_USERNAME, name.trim()); + } + + public void setGMPassword(String password) { + prefs.put(KEY_GM_PASSWORD, password.trim()); + } + + public String getGMPassword() { + return prefs.get(KEY_GM_PASSWORD, ""); + } + + public void setPlayerPassword(String password) { + prefs.put(KEY_PLAYER_PASSWORD, password.trim()); + } + + public String getPlayerPassword() { + return prefs.get(KEY_PLAYER_PASSWORD, ""); + } + + public int getPort() { + return prefs.getInt(KEY_PORT, ServerConfig.DEFAULT_PORT); + } + + public void setPort(int port) { + prefs.putInt(KEY_PORT, port); + } + + public boolean getUseStrictTokenOwnership() { + return prefs.getBoolean(KEY_STRICT_TOKEN_OWNERSHIP, false); + } + + public void setUseStrictTokenOwnership(boolean use) { + prefs.putBoolean(KEY_STRICT_TOKEN_OWNERSHIP, use); + } + + // my addition + public boolean getRestrictedImpersonation() { + return prefs.getBoolean(KEY_RESTRICTED_IMPERSONATION, false); + } + + public void setRestrictedImpersonation(boolean impersonation) { + prefs.putBoolean(KEY_RESTRICTED_IMPERSONATION, impersonation); + } + + public boolean registerServer() { + return prefs.getBoolean(KEY_REGISTER_SERVER, false); + } + + public void setRegisterServer(boolean register) { + prefs.putBoolean(KEY_REGISTER_SERVER, register); + } + + public void setRPToolsName(String name) { + prefs.put(KEY_RPTOOLS_NAME, name.trim()); + } + + public String getRPToolsName() { + return prefs.get(KEY_RPTOOLS_NAME, ""); + } + + public void setRPToolsPrivate(boolean flag) { + prefs.putBoolean(KEY_RPTOOLS_PRIVATE, flag); + } + + public boolean getRPToolsPrivate() { + return prefs.getBoolean(KEY_RPTOOLS_PRIVATE, false); + } + + public void setPlayersCanRevealVision(boolean flag) { + prefs.putBoolean(KEY_PLAYERS_CAN_REVEAL_VISION, flag); + } + + public boolean getPlayersCanRevealVision() { + return prefs.getBoolean(KEY_PLAYERS_CAN_REVEAL_VISION, false); + } + + public void setGmRevealsVisionForUnownedTokens(boolean flag) { + prefs.putBoolean(KEY_GM_REVEALS_VISION, flag); + } + + public boolean getGmRevealsVisionForUnownedTokens() { + return prefs.getBoolean(KEY_GM_REVEALS_VISION, false); + } + + public void setUseIndividualViews(boolean flag) { + prefs.putBoolean(KEY_USE_INDIVIDUAL_VIEWS, flag); + } + + public boolean getUseIndividualViews() { + return prefs.getBoolean(KEY_USE_INDIVIDUAL_VIEWS, false); + } + + public void setUseUPnP(boolean op) { + prefs.putBoolean(KEY_USE_UPNP, op); + } + + public boolean getUseUPnP() { + return prefs.getBoolean(KEY_USE_UPNP, false); + } + + public void setPlayersReceiveCampaignMacros(boolean flag) { + prefs.putBoolean(KEY_PLAYERS_RECEIVE_CAMPAIGN_MACROS, flag); + } + + public boolean getPlayersReceiveCampaignMacros() { + return prefs.getBoolean(KEY_PLAYERS_RECEIVE_CAMPAIGN_MACROS, false); + } + + public boolean getUseToolTipsForUnformattedRolls() { + // Tool tips works slightly differently as its a setting that has to be available + // to the user to configure before the start server dialog. So if it has not been + // specified we default to the users preferences. + return Objects.requireNonNullElseGet( + useToolTipsForUnformattedRolls, AppPreferences.useToolTipForInlineRoll::get); + } + + public void setUseToolTipsForUnformattedRolls(boolean flag) { + useToolTipsForUnformattedRolls = flag; + } + + public WalkerMetric getMovementMetric() { + String metric = prefs.get(KEY_WALKER_METRIC, "ONE_ONE_ONE"); + return WalkerMetric.valueOf(metric); + } + + public void setMovementMetric(WalkerMetric metric) { + prefs.put(KEY_WALKER_METRIC, metric.name()); + } + + public boolean getUseIndividualFOW() { + return prefs.getBoolean(KEY_USE_INDIVIDUAL_FOW, false); + } + + public void setUseIndividualFOW(boolean flag) { + prefs.putBoolean(KEY_USE_INDIVIDUAL_FOW, flag); + } + + public boolean isAutoRevealOnMovement() { + return prefs.getBoolean(KEY_AUTO_REVEAL_ON_MOVE, false); + } + + public void setAutoRevealOnMovement(boolean flag) { + prefs.putBoolean(KEY_AUTO_REVEAL_ON_MOVE, flag); + } + + public boolean getUsePasswordFile() { + return prefs.getBoolean(KEY_USE_PASSWORD_FILE, false); + } + + public void setUsePasswordFile(boolean flag) { + prefs.putBoolean(KEY_USE_PASSWORD_FILE, flag); + } + + public boolean getUseEasyConnect() { + return prefs.getBoolean(KEY_USE_EASY_CONNECT, false); + } + + public void setUseEasyConnect(boolean flag) { + prefs.putBoolean(KEY_USE_EASY_CONNECT, flag); + } + + public boolean getMapSelectUIHidden() { + return prefs.getBoolean(KEY_HIDE_MAP_SELECT_UI, false); + } + + public void setMapSelectUIHidden(boolean flag) { + prefs.putBoolean(KEY_HIDE_MAP_SELECT_UI, flag); + } + + public boolean getLockTokenEditOnStart() { + return prefs.getBoolean(KEY_START_LOCKED_TOKEN_EDIT, false); + } + + public boolean getLockTokenContextOnStart() { + return prefs.getBoolean(KEY_START_LOCKED_TOKEN_CONTEXT, false); + } + + public void setLockTokenEditOnStart(boolean flag) { + prefs.putBoolean(KEY_START_LOCKED_TOKEN_EDIT, flag); + } + + public void setLockTokenContextOnStart(boolean flag) { + prefs.putBoolean(KEY_START_LOCKED_TOKEN_CONTEXT, flag); + } + + public boolean getLockPlayerMovementOnStart() { + return prefs.getBoolean(KEY_START_LOCKED_PLAYER_MOVEMENT, false); + } + + public void setLockPlayerMovementOnStart(boolean flag) { + prefs.putBoolean(KEY_START_LOCKED_PLAYER_MOVEMENT, flag); + } + + public boolean getPlayerLibraryLock() { + return prefs.getBoolean(KEY_LOCK_PLAYER_LIBRARY, false); + } + + public void setPlayerLibraryLock(boolean flag) { + prefs.putBoolean(KEY_LOCK_PLAYER_LIBRARY, flag); + } + + public boolean getUseWebRtc() { + return prefs.getBoolean(KEY_USE_WEBRTC, false); + } + + public void setKeyUseWebrtc(boolean flag) { + prefs.putBoolean(KEY_USE_WEBRTC, flag); + } }