mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-08 00:53:57 -07:00
Add local game options dialog. Introduces LocalGameOptions struct and DlgLocalGameOptions dialog to replace the previous QInputDialog for starting local games. Encapsulates game configuration with a simple interface that prevents parameter explosion as options are added. The dialog provides UI with settings persistence via SettingsCache
This commit is contained in:
parent
14f1925edc
commit
789642aee3
4 changed files with 163 additions and 0 deletions
|
|
@ -39,6 +39,7 @@ set(cockatrice_SOURCES
|
||||||
src/interface/widgets/dialogs/dlg_load_deck_from_clipboard.cpp
|
src/interface/widgets/dialogs/dlg_load_deck_from_clipboard.cpp
|
||||||
src/interface/widgets/dialogs/dlg_load_deck_from_website.cpp
|
src/interface/widgets/dialogs/dlg_load_deck_from_website.cpp
|
||||||
src/interface/widgets/dialogs/dlg_load_remote_deck.cpp
|
src/interface/widgets/dialogs/dlg_load_remote_deck.cpp
|
||||||
|
src/interface/widgets/dialogs/dlg_local_game_options.cpp
|
||||||
src/interface/widgets/dialogs/dlg_manage_sets.cpp
|
src/interface/widgets/dialogs/dlg_manage_sets.cpp
|
||||||
src/interface/widgets/dialogs/dlg_register.cpp
|
src/interface/widgets/dialogs/dlg_register.cpp
|
||||||
src/interface/widgets/dialogs/dlg_select_set_for_cards.cpp
|
src/interface/widgets/dialogs/dlg_select_set_for_cards.cpp
|
||||||
|
|
|
||||||
23
cockatrice/src/game/local_game_options.h
Normal file
23
cockatrice/src/game/local_game_options.h
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
/**
|
||||||
|
* @file local_game_options.h
|
||||||
|
* @ingroup Game
|
||||||
|
* @brief Configuration options for local games.
|
||||||
|
*
|
||||||
|
* This struct encapsulates all settings that can be configured when starting
|
||||||
|
* a local game, providing a clean interface that prevents parameter explosion
|
||||||
|
* as more options are added in the future.
|
||||||
|
*
|
||||||
|
* @note User documentation: doc/doxygen/extra-pages/user_documentation/local_game/starting_a_local_game.md
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LOCAL_GAME_OPTIONS_H
|
||||||
|
#define LOCAL_GAME_OPTIONS_H
|
||||||
|
|
||||||
|
struct LocalGameOptions
|
||||||
|
{
|
||||||
|
int numberPlayers = 1;
|
||||||
|
int startingLifeTotal = 20;
|
||||||
|
bool spectatorsSeeEverything = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // LOCAL_GAME_OPTIONS_H
|
||||||
|
|
@ -0,0 +1,89 @@
|
||||||
|
#include "dlg_local_game_options.h"
|
||||||
|
|
||||||
|
#include "../../../client/settings/cache_settings.h"
|
||||||
|
|
||||||
|
#include <QCheckBox>
|
||||||
|
#include <QDialogButtonBox>
|
||||||
|
#include <QGridLayout>
|
||||||
|
#include <QGroupBox>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QSpinBox>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
|
DlgLocalGameOptions::DlgLocalGameOptions(QWidget *parent) : QDialog(parent)
|
||||||
|
{
|
||||||
|
numberPlayersLabel = new QLabel(tr("P&layers:"), this);
|
||||||
|
numberPlayersEdit = new QSpinBox(this);
|
||||||
|
numberPlayersEdit->setMinimum(1);
|
||||||
|
numberPlayersEdit->setMaximum(8);
|
||||||
|
numberPlayersEdit->setValue(1);
|
||||||
|
numberPlayersLabel->setBuddy(numberPlayersEdit);
|
||||||
|
|
||||||
|
auto *generalGrid = new QGridLayout;
|
||||||
|
generalGrid->addWidget(numberPlayersLabel, 0, 0);
|
||||||
|
generalGrid->addWidget(numberPlayersEdit, 0, 1);
|
||||||
|
generalGroupBox = new QGroupBox(tr("General"), this);
|
||||||
|
generalGroupBox->setLayout(generalGrid);
|
||||||
|
|
||||||
|
startingLifeTotalLabel = new QLabel(tr("Starting &life total:"), this);
|
||||||
|
startingLifeTotalEdit = new QSpinBox(this);
|
||||||
|
startingLifeTotalEdit->setMinimum(1);
|
||||||
|
startingLifeTotalEdit->setMaximum(99999);
|
||||||
|
startingLifeTotalEdit->setValue(20);
|
||||||
|
startingLifeTotalLabel->setBuddy(startingLifeTotalEdit);
|
||||||
|
|
||||||
|
spectatorsSeeEverythingCheckBox = new QCheckBox(tr("Spectators can see &everything"), this);
|
||||||
|
|
||||||
|
auto *gameSetupGrid = new QGridLayout;
|
||||||
|
gameSetupGrid->addWidget(startingLifeTotalLabel, 0, 0);
|
||||||
|
gameSetupGrid->addWidget(startingLifeTotalEdit, 0, 1);
|
||||||
|
gameSetupGrid->addWidget(spectatorsSeeEverythingCheckBox, 1, 0, 1, 2);
|
||||||
|
gameSetupOptionsGroupBox = new QGroupBox(tr("Game setup options"), this);
|
||||||
|
gameSetupOptionsGroupBox->setLayout(gameSetupGrid);
|
||||||
|
|
||||||
|
rememberSettingsCheckBox = new QCheckBox(tr("Re&member settings"), this);
|
||||||
|
|
||||||
|
buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
|
||||||
|
connect(buttonBox, &QDialogButtonBox::accepted, this, &DlgLocalGameOptions::actOK);
|
||||||
|
connect(buttonBox, &QDialogButtonBox::rejected, this, &DlgLocalGameOptions::reject);
|
||||||
|
|
||||||
|
auto *mainLayout = new QVBoxLayout;
|
||||||
|
mainLayout->addWidget(generalGroupBox);
|
||||||
|
mainLayout->addWidget(gameSetupOptionsGroupBox);
|
||||||
|
mainLayout->addWidget(rememberSettingsCheckBox);
|
||||||
|
mainLayout->addWidget(buttonBox);
|
||||||
|
setLayout(mainLayout);
|
||||||
|
|
||||||
|
rememberSettingsCheckBox->setChecked(SettingsCache::instance().getRememberGameSettings());
|
||||||
|
if (rememberSettingsCheckBox->isChecked()) {
|
||||||
|
numberPlayersEdit->setValue(SettingsCache::instance().getMaxPlayers());
|
||||||
|
startingLifeTotalEdit->setValue(SettingsCache::instance().getDefaultStartingLifeTotal());
|
||||||
|
spectatorsSeeEverythingCheckBox->setChecked(SettingsCache::instance().getSpectatorsCanSeeEverything());
|
||||||
|
}
|
||||||
|
|
||||||
|
setWindowTitle(tr("Local game options"));
|
||||||
|
setFixedHeight(sizeHint().height());
|
||||||
|
|
||||||
|
numberPlayersEdit->setFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DlgLocalGameOptions::actOK()
|
||||||
|
{
|
||||||
|
SettingsCache::instance().setRememberGameSettings(rememberSettingsCheckBox->isChecked());
|
||||||
|
if (rememberSettingsCheckBox->isChecked()) {
|
||||||
|
SettingsCache::instance().setMaxPlayers(numberPlayersEdit->value());
|
||||||
|
SettingsCache::instance().setDefaultStartingLifeTotal(startingLifeTotalEdit->value());
|
||||||
|
SettingsCache::instance().setSpectatorsCanSeeEverything(spectatorsSeeEverythingCheckBox->isChecked());
|
||||||
|
}
|
||||||
|
|
||||||
|
accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalGameOptions DlgLocalGameOptions::getOptions() const
|
||||||
|
{
|
||||||
|
return LocalGameOptions{
|
||||||
|
.numberPlayers = numberPlayersEdit->value(),
|
||||||
|
.startingLifeTotal = startingLifeTotalEdit->value(),
|
||||||
|
.spectatorsSeeEverything = spectatorsSeeEverythingCheckBox->isChecked(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,50 @@
|
||||||
|
/**
|
||||||
|
* @file dlg_local_game_options.h
|
||||||
|
* @ingroup RoomDialogs
|
||||||
|
* @brief Dialog for configuring local game options.
|
||||||
|
*
|
||||||
|
* Provides a user interface for setting up local games with configurable
|
||||||
|
* number of players, starting life total, and spectator visibility options.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DLG_LOCAL_GAME_OPTIONS_H
|
||||||
|
#define DLG_LOCAL_GAME_OPTIONS_H
|
||||||
|
|
||||||
|
#include "../../../game/local_game_options.h"
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
|
||||||
|
class QCheckBox;
|
||||||
|
class QDialogButtonBox;
|
||||||
|
class QGroupBox;
|
||||||
|
class QLabel;
|
||||||
|
class QSpinBox;
|
||||||
|
|
||||||
|
class DlgLocalGameOptions : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit DlgLocalGameOptions(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
[[nodiscard]] LocalGameOptions getOptions() const;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void actOK();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QGroupBox *generalGroupBox;
|
||||||
|
QGroupBox *gameSetupOptionsGroupBox;
|
||||||
|
|
||||||
|
QLabel *numberPlayersLabel;
|
||||||
|
QSpinBox *numberPlayersEdit;
|
||||||
|
|
||||||
|
QLabel *startingLifeTotalLabel;
|
||||||
|
QSpinBox *startingLifeTotalEdit;
|
||||||
|
|
||||||
|
QCheckBox *spectatorsSeeEverythingCheckBox;
|
||||||
|
QCheckBox *rememberSettingsCheckBox;
|
||||||
|
|
||||||
|
QDialogButtonBox *buttonBox;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DLG_LOCAL_GAME_OPTIONS_H
|
||||||
Loading…
Add table
Add a link
Reference in a new issue