- Drop the in-game tournament-settings button: Command_TournamentSettingsSelect
has no server handler (RespContextError), the host-ness decision was evaluated
once at tab construction, and the button never received a label on first show.
The dialog can be re-added together with a working Server_Player override.
- Pass PlayerManager::isSpectator() to TournamentWidget instead of relying on
localPlayerId == -1, which never holds for spectators.
- Report games per match as the total series length (Best of %1) to match the
DlgTournamentSettings hint and the server's use of the value; the previous
gamesPerMatch * 2 - 1 mislabeled Bo3 as Best of 5.
- Block signals around read-only tournamentCheckBox setChecked so the disabled
settings button is not re-enabled, and seed Command_CreateGame through
mutable_tournament_settings() (field 15 became the settings message).
- return after closing a sub-game that routed to its parent tab.
Wires the tournament protocol into the client:
- DlgCreateGame gains a tournament checkbox with a games-per-match
settings sub-dialog; both values are sent with Command_CreateGame and
mirrored in the join-info variant of the dialog
- TournamentWidget renders live standings (with deck-submission state)
and pairings for the local player's perspective, and asks to open the
current match game via openMatchGameRequested()
- TournamentTabGameExtension attaches an overview page to TabGame's
stacked views, mirrors phase and submission progress onto a deck-view
status strip, and provides round-trip navigation between game view and
standings; hosts get an in-game settings dialog during deck building
- Open-match falls back to joining as spectator through TabSupervisor;
sub-games now return to their parent tab on close, falling back to
the normal leave-game flow when the parent is gone