@@ -124,8 +124,7 @@ private void initialize() {
124124 AppState .clear ();
125125 configListView .getSelectionModel ().clearSelection ();
126126 }
127- canvasWidthSpinner .setDisable (false );
128- canvasHeightSpinner .setDisable (false );
127+ setConfigParamsDisabled (false );
129128 autoSetCanvasForMap (n );
130129 }
131130 refreshPreview ();
@@ -197,8 +196,7 @@ private void initialize() {
197196 if (success ) {
198197 // Config-backed maps own their dimensions, so clear the template selection.
199198 mapCombo .getSelectionModel ().clearSelection ();
200- canvasWidthSpinner .setDisable (true );
201- canvasHeightSpinner .setDisable (true );
199+ setConfigParamsDisabled (true );
202200 refreshPreview ();
203201 checkCanvasConstraint ();
204202 }
@@ -222,6 +220,9 @@ private void initialize() {
222220
223221 // Reset Actions
224222 @ FXML private void onResetMap () {
223+ AppState .clear ();
224+ configListView .getSelectionModel ().clearSelection ();
225+ setConfigParamsDisabled (false );
225226 mapCombo .getSelectionModel ().selectFirst ();
226227 refreshPreview ();
227228 checkCanvasConstraint ();
@@ -269,8 +270,7 @@ private void refreshPreview() {
269270 if (isConfigFile && previewMap != null ) {
270271 cw = previewMap .getWidth ();
271272 ch = previewMap .getHeight ();
272- canvasWidthSpinner .setDisable (true );
273- canvasHeightSpinner .setDisable (true );
273+ setConfigParamsDisabled (true );
274274 }
275275
276276 double padding = 16 ;
@@ -674,6 +674,8 @@ private boolean goToSimulationScreen() {
674674 @ FXML
675675 private void onLoadConfig () {
676676 if (promptAndLoadConfig ()) {
677+ mapCombo .getSelectionModel ().clearSelection ();
678+ setConfigParamsDisabled (true );
677679 refreshPreview ();
678680 checkCanvasConstraint ();
679681 }
@@ -1092,9 +1094,48 @@ private void makeSpinnerIntegerOnly(Spinner<Integer> spinner) {
10921094 }));
10931095 }
10941096
1097+ /**
1098+ * Disables or re-enables all user-editable parameters on the setup screen.
1099+ * Called with {@code true} whenever a config file is loaded and with {@code false} when switching back to a template map.
1100+ * The reservationK spinner has its own separate policy-driven disable logic
1101+ */
1102+ private void setConfigParamsDisabled (boolean disabled ) {
1103+
1104+ // Coordination policy
1105+ policyCombo .setDisable (disabled );
1106+ if (!disabled ) {
1107+ // Re-evaluate the policy-driven disable for reservationK
1108+ reservationKSpinner .setDisable (!"RESERVATION_K" .equals (policyCombo .getValue ()));
1109+ } else {
1110+ reservationKSpinner .setDisable (true );
1111+ }
1112+
1113+ // Task settings
1114+ if (autoTaskRadio != null ) autoTaskRadio .setDisable (disabled );
1115+ if (manualTaskRadio != null ) manualTaskRadio .setDisable (disabled );
1116+ maxTasksField .setDisable (disabled );
1117+ workloadSeedField .setDisable (disabled );
1118+
1119+ // Robot physics
1120+ setDisableIfPresent (batteryCapacityField , disabled );
1121+ setDisableIfPresent (lowBatteryField , disabled );
1122+ setDisableIfPresent (chargePerTickField , disabled );
1123+ setDisableIfPresent (energyPerMoveField , disabled );
1124+
1125+ // Run settings
1126+ maxTicksField .setDisable (disabled );
1127+ runNameField .setDisable (disabled );
1128+
1129+ // Canvas size
1130+ canvasWidthSpinner .setDisable (disabled );
1131+ canvasHeightSpinner .setDisable (disabled );
1132+ }
1133+
1134+ private void setDisableIfPresent (TextField field , boolean disabled ) {
1135+ if (field != null ) field .setDisable (disabled );
1136+ }
1137+
10951138 // Navigation
1096- @ FXML
1097- private void onTabEditor () { /* already on setup/editor screen */ }
10981139
10991140 @ FXML
11001141 private void onMenuWelcome () { ScreenNavigator .goToWelcome (); }
@@ -1114,4 +1155,4 @@ private void onExit() {
11141155 javafx .application .Platform .exit ();
11151156 }
11161157 }
1117- }
1158+ }
0 commit comments