ModernUO/Projects/UOContent/Engines/Spawners
Kamron Batman 4fe5dd0eec
fix(spawners): lock column in the spawner gump, read-only locked entries, aligned totals (#2635)
## Summary

Follow-up to #2621, which added a per-entry `Disabled` flag to the spawner gump as a checkbox. The checkbox was placed between the Expand and Delete buttons at x=22, overlapping Expand (5–35), and Delete moved to 46, overlapping the creature text box at 71.

- **Lock column on the far left.** Each entry row gets a toggle at x 5–25: padlock `0x82C` when the entry is disabled (press to unlock), green orb `0x2C88/0x2C89` when enabled (press to lock). The client's gump art has only closed padlocks (`0x82C`, `0x0020`), so the orb marks the unlocked state; XmlSpawner uses the same padlock paired with a blue gem.
- **Expand and Delete are adjacent again** (28 / 61, the original 33px pitch), and everything to the right shifts 23px: creature/#/Max/Prb boxes, headers, the totals row, page arrows, Save/Cancel. The gump is now 369 wide (was 346). Params/Props boxes widen to match.
- **Locked entries are read-only.** Name, max, probability, and Params/Props (when expanded) render as `AddLabelCropped` on a grey tile (`0x23F4`) instead of `AddTextEntry`. There is no read-only text entry in the UO gump protocol, so omitting the entry is the only way to make the field truly non-editable. `CreateArray` already `continue`s on a null type entry, so Save leaves locked entries untouched.
- **Totals row aligned under its columns.** Spawned under `#`, a new total max under `Max`, total weight under `Prb`. Max and weight exclude locked entries, matching `BaseSpawner`, which skips `Disabled` entries when rolling.

## Test plan

- [x] `[props` a spawner with several entries: lock column is on the left, Expand/Delete sit side by side, no overlaps.
- [x] Lock an entry: padlock shows, fields go grey and cannot be typed into; unlock: orb shows, fields are editable again.
- [x] Edit an unlocked entry, lock another, Save: unlocked edits persist, locked entry keeps its values.
- [x] Expand a locked entry: Params/Props are grey and read-only.
- [x] Totals sit under `#` / `Max` / `Prb`; locking an entry drops it from the max and weight totals.
2026-09-11 20:30:02 -07:00
..
Commands refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
Json refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
BaseSpawner.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
BaseSpawner.Dto.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
BaseSpawner.Entries.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
BaseSpawner.Hooks.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
BaseSpawner.Migrations.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
ProximitySpawner.cs refactor(spawners): replace DynamicJson with typed SpawnerDto records (#2505) 2026-06-25 23:24:45 -07:00
ProximitySpawner.Dto.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
RegionSpawner.cs refactor(spawners): replace DynamicJson with typed SpawnerDto records (#2505) 2026-06-25 23:24:45 -07:00
RegionSpawner.Dto.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
SectorSpawnCache.cs fix: Bumps deps. Updates copyrights (#2353) 2026-03-05 19:36:54 -08:00
Spawner.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
Spawner.Dto.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
SpawnerControllerGump.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
SpawnerEntry.cs refactor(spawners): subclass-owned entries, lifecycle hooks, per-entry Disabled flag (#2621) 2026-09-11 17:41:08 -07:00
SpawnerGump.cs fix(spawners): lock column in the spawner gump, read-only locked entries, aligned totals (#2635) 2026-09-11 20:30:02 -07:00
SpawnerJsonSerializer.cs refactor(spawners): replace DynamicJson with typed SpawnerDto records (#2505) 2026-06-25 23:24:45 -07:00
SpawnPositionState.cs fix: Bumps deps. Updates copyrights (#2353) 2026-03-05 19:36:54 -08:00
SpawnPropsGump.cs feat: Consolidates staff gump layouts (#2404) 2026-04-08 11:42:46 -06:00