Cockatrice/libcockatrice_deck_list/libcockatrice/deck_list
BruebachL 9677fad342
[Client] Add zone management to the deck state manager (#7204)
* [Client] Add zone management to the deck state manager

State-layer operations for custom deck zones, plus the shared prompt
dialog that later editor menus will call into.

- moveCardToZone relocates every copy of a card row into any zone,
  refusing non-card rows and tokens so miswired selections can never
  shred a group or turn tokens into deck cards. The current zone is
  found by walking ancestors, which also handles legacy top-level
  zones.
- createCustomZone, renameCustomZone, moveCustomZone and
  removeCustomZone wrap the tree API with memento history, model
  rebuilds and deck hash refreshes via modifyTree.
- Same-board zone moves return success without minting a history
  entry, keeping the undo log honest.
- promptForNewZone asks for a name and the parent zone, keeps Ok
  disabled until the trimmed name passes a caller-supplied validator
  (shown inline as an error), and reports its own translation context.

Took 14 minutes

# Commit time for manual adjustment:
# Took 6 minutes

# Commit time for manual adjustment:
# Took 33 seconds

* [DeckEditor] Address zone-management review feedback

- Expose DecklistNodeTree::hasZoneName and use it in validateNewZoneName
  so the uniqueness scan covers custom zones on every board, not just the
  standard ones.
- Hide the board selector in the rename dialog path where it is not used.
- Emit deckHashChanged after refreshDeckHash so the deck hash label stays
  current after zone create/rename/move/remove.

* [DeckEditor] Notify card set changes after zone edits and drop the board scan

- modifyTree emits cardNodesChanged alongside deckHashChanged so the
  banner-card combo and printing in-deck counts refresh after removing a
  zone that still holds cards
- DecklistNodeTree::findCustomZoneByName is public and moveCustomZone uses
  it, locating zones under non-standard boards (e.g. tokens) instead of
  scanning only main/side/maybeboard

---------

Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
2026-09-05 22:00:21 +02:00
..
tree [Client] Add zone management to the deck state manager (#7204) 2026-09-05 22:00:21 +02:00
deck_list.cpp [DeckList] Add maybeboard zone constant and skip it in exports (#7174) 2026-08-24 18:04:22 +02:00
deck_list.h [Game] Playmats (#7101) 2026-08-21 10:40:49 +02:00
deck_list_history_manager.cpp style: Add braces to all control flow statements (#6887) 2026-05-16 19:19:53 +02:00
deck_list_history_manager.h [Fix-Warnings] Mark const getters as [[nodiscard]] (#6365) 2025-11-28 21:38:54 +01:00
deck_list_memento.h [Fix-Warnings] Mark const getters as [[nodiscard]] (#6365) 2025-11-28 21:38:54 +01:00
deck_list_node_tree.cpp add a limit to the size of deckfiles cockatrice can load (#7163) 2026-08-29 15:21:04 +02:00
deck_list_node_tree.h [Client] Add zone management to the deck state manager (#7204) 2026-09-05 22:00:21 +02:00
playmat_resolver.cpp [Game] Playmats (#7101) 2026-08-21 10:40:49 +02:00
playmat_resolver.h [Game] Playmats (#7101) 2026-08-21 10:40:49 +02:00
sideboard_plan.cpp style: Add braces to all control flow statements (#6887) 2026-05-16 19:19:53 +02:00
sideboard_plan.h Standardize Doxygen documentation (#6885) 2026-05-21 22:58:07 +02:00