radio buttons for game types

This commit is contained in:
poixen 2016-07-27 09:15:34 +02:00
parent 8644016d3c
commit 0df4b34fe4
2 changed files with 27 additions and 32 deletions

View file

@ -3,24 +3,21 @@
#include <QCheckBox> #include <QCheckBox>
#include <QPushButton> #include <QPushButton>
#include <QGridLayout> #include <QGridLayout>
#include <QVBoxLayout> #include <QRadioButton>
#include <QHBoxLayout>
#include <QSpinBox> #include <QSpinBox>
#include <QGroupBox> #include <QGroupBox>
#include <QDialogButtonBox> #include <QDialogButtonBox>
#include <QMessageBox> #include <QMessageBox>
#include <QSet> #include <QSet>
#include <QWizard>
#include "dlg_creategame.h" #include "dlg_creategame.h"
#include "tab_room.h" #include "tab_room.h"
#include "settingscache.h" #include "settingscache.h"
#include "pending_command.h" #include "pending_command.h"
#include "pb/room_commands.pb.h"
#include "pb/serverinfo_game.pb.h" #include "pb/serverinfo_game.pb.h"
#include "pb/response.pb.h"
void DlgCreateGame::sharedCtor() void DlgCreateGame::sharedCtor() {
{
rememberGameSettings = new QCheckBox(tr("Re&member settings")); rememberGameSettings = new QCheckBox(tr("Re&member settings"));
descriptionLabel = new QLabel(tr("&Description:")); descriptionLabel = new QLabel(tr("&Description:"));
descriptionEdit = new QLineEdit; descriptionEdit = new QLineEdit;
@ -45,10 +42,11 @@ void DlgCreateGame::sharedCtor()
QMapIterator<int, QString> gameTypeIterator(gameTypes); QMapIterator<int, QString> gameTypeIterator(gameTypes);
while (gameTypeIterator.hasNext()) { while (gameTypeIterator.hasNext()) {
gameTypeIterator.next(); gameTypeIterator.next();
QCheckBox *gameTypeCheckBox = new QCheckBox(gameTypeIterator.value()); QRadioButton *gameTypeRadioButton = new QRadioButton(gameTypeIterator.value(), this);
gameTypeLayout->addWidget(gameTypeCheckBox); gameTypeLayout->addWidget(gameTypeRadioButton);
gameTypeCheckBoxes.insert(gameTypeIterator.key(), gameTypeCheckBox); gameTypeCheckBoxes.insert(gameTypeIterator.key(), gameTypeRadioButton);
gameTypeCheckBoxes[gameTypeIterator.key()]->setChecked((settingsCache->getGameTypes().contains(gameTypeIterator.value() + ", ") ? true : false)); bool isChecked = settingsCache->getGameTypes().contains(gameTypeIterator.value() + ", ");
gameTypeCheckBoxes[gameTypeIterator.key()]->setChecked(isChecked);
} }
QGroupBox *gameTypeGroupBox = new QGroupBox(tr("Game type")); QGroupBox *gameTypeGroupBox = new QGroupBox(tr("Game type"));
gameTypeGroupBox->setLayout(gameTypeLayout); gameTypeGroupBox->setLayout(gameTypeLayout);
@ -59,8 +57,7 @@ void DlgCreateGame::sharedCtor()
onlyBuddiesCheckBox = new QCheckBox(tr("Only &buddies can join")); onlyBuddiesCheckBox = new QCheckBox(tr("Only &buddies can join"));
onlyRegisteredCheckBox = new QCheckBox(tr("Only &registered users can join")); onlyRegisteredCheckBox = new QCheckBox(tr("Only &registered users can join"));
if (room && room->getUserInfo()->user_level() & ServerInfo_User::IsRegistered) if (room && room->getUserInfo()->user_level() & ServerInfo_User::IsRegistered) {
{
onlyRegisteredCheckBox->setChecked(true); onlyRegisteredCheckBox->setChecked(true);
} else { } else {
onlyBuddiesCheckBox->setEnabled(false); onlyBuddiesCheckBox->setEnabled(false);
@ -109,15 +106,13 @@ void DlgCreateGame::sharedCtor()
} }
DlgCreateGame::DlgCreateGame(TabRoom *_room, const QMap<int, QString> &_gameTypes, QWidget *parent) DlgCreateGame::DlgCreateGame(TabRoom *_room, const QMap<int, QString> &_gameTypes, QWidget *parent)
: QDialog(parent), room(_room), gameTypes(_gameTypes) : QDialog(parent), room(_room), gameTypes(_gameTypes) {
{
sharedCtor(); sharedCtor();
rememberGameSettings->setChecked(settingsCache->getRememberGameSettings()); rememberGameSettings->setChecked(settingsCache->getRememberGameSettings());
descriptionEdit->setText(settingsCache->getGameDescription()); descriptionEdit->setText(settingsCache->getGameDescription());
maxPlayersEdit->setValue(settingsCache->getMaxPlayers()); maxPlayersEdit->setValue(settingsCache->getMaxPlayers());
if (room && room->getUserInfo()->user_level() & ServerInfo_User::IsRegistered) if (room && room->getUserInfo()->user_level() & ServerInfo_User::IsRegistered) {
{
onlyBuddiesCheckBox->setChecked(settingsCache->getOnlyBuddies()); onlyBuddiesCheckBox->setChecked(settingsCache->getOnlyBuddies());
onlyRegisteredCheckBox->setChecked(settingsCache->getOnlyRegistered()); onlyRegisteredCheckBox->setChecked(settingsCache->getOnlyRegistered());
} else { } else {
@ -129,7 +124,7 @@ DlgCreateGame::DlgCreateGame(TabRoom *_room, const QMap<int, QString> &_gameType
spectatorsCanTalkCheckBox->setChecked(settingsCache->getSpectatorsCanTalk()); spectatorsCanTalkCheckBox->setChecked(settingsCache->getSpectatorsCanTalk());
spectatorsSeeEverythingCheckBox->setChecked(settingsCache->getSpectatorsCanSeeEverything()); spectatorsSeeEverythingCheckBox->setChecked(settingsCache->getSpectatorsCanSeeEverything());
if (!rememberGameSettings->isChecked()){ if (!rememberGameSettings->isChecked()) {
actReset(); actReset();
} }
@ -144,8 +139,7 @@ DlgCreateGame::DlgCreateGame(TabRoom *_room, const QMap<int, QString> &_gameType
} }
DlgCreateGame::DlgCreateGame(const ServerInfo_Game &gameInfo, const QMap<int, QString> &_gameTypes, QWidget *parent) DlgCreateGame::DlgCreateGame(const ServerInfo_Game &gameInfo, const QMap<int, QString> &_gameTypes, QWidget *parent)
: QDialog(parent), room(0), gameTypes(_gameTypes) : QDialog(parent), room(0), gameTypes(_gameTypes) {
{
sharedCtor(); sharedCtor();
rememberGameSettings->setEnabled(false); rememberGameSettings->setEnabled(false);
@ -176,7 +170,7 @@ DlgCreateGame::DlgCreateGame(const ServerInfo_Game &gameInfo, const QMap<int, QS
while (gameTypeIterator.hasNext()) { while (gameTypeIterator.hasNext()) {
gameTypeIterator.next(); gameTypeIterator.next();
QCheckBox *gameTypeCheckBox = gameTypeCheckBoxes.value(gameTypeIterator.key()); QRadioButton *gameTypeCheckBox = gameTypeCheckBoxes.value(gameTypeIterator.key());
gameTypeCheckBox->setEnabled(false); gameTypeCheckBox->setEnabled(false);
gameTypeCheckBox->setChecked(types.contains(gameTypeIterator.key())); gameTypeCheckBox->setChecked(types.contains(gameTypeIterator.key()));
} }
@ -186,8 +180,7 @@ DlgCreateGame::DlgCreateGame(const ServerInfo_Game &gameInfo, const QMap<int, QS
setWindowTitle(tr("Game information")); setWindowTitle(tr("Game information"));
} }
void DlgCreateGame::actReset() void DlgCreateGame::actReset() {
{
descriptionEdit->setText(""); descriptionEdit->setText("");
maxPlayersEdit->setValue(2); maxPlayersEdit->setValue(2);
@ -200,18 +193,20 @@ void DlgCreateGame::actReset()
spectatorsCanTalkCheckBox->setChecked(false); spectatorsCanTalkCheckBox->setChecked(false);
spectatorsSeeEverythingCheckBox->setChecked(false); spectatorsSeeEverythingCheckBox->setChecked(false);
QMapIterator<int, QCheckBox *> gameTypeCheckBoxIterator(gameTypeCheckBoxes); QMapIterator<int, QRadioButton *> gameTypeCheckBoxIterator(gameTypeCheckBoxes);
while (gameTypeCheckBoxIterator.hasNext()) { while (gameTypeCheckBoxIterator.hasNext()) {
gameTypeCheckBoxIterator.next(); gameTypeCheckBoxIterator.next();
// must set auto enclusive to false to be able to set the check to false
gameTypeCheckBoxIterator.value()->setAutoExclusive(false);
gameTypeCheckBoxIterator.value()->setChecked(false); gameTypeCheckBoxIterator.value()->setChecked(false);
gameTypeCheckBoxIterator.value()->setAutoExclusive(true);
} }
descriptionEdit->setFocus(); descriptionEdit->setFocus();
} }
void DlgCreateGame::actOK() void DlgCreateGame::actOK() {
{
Command_CreateGame cmd; Command_CreateGame cmd;
cmd.set_description(descriptionEdit->text().simplified().toStdString()); cmd.set_description(descriptionEdit->text().simplified().toStdString());
cmd.set_password(passwordEdit->text().toStdString()); cmd.set_password(passwordEdit->text().toStdString());
@ -224,7 +219,7 @@ void DlgCreateGame::actOK()
cmd.set_spectators_see_everything(spectatorsSeeEverythingCheckBox->isChecked()); cmd.set_spectators_see_everything(spectatorsSeeEverythingCheckBox->isChecked());
QString gameTypes = QString(); QString gameTypes = QString();
QMapIterator<int, QCheckBox *> gameTypeCheckBoxIterator(gameTypeCheckBoxes); QMapIterator<int, QRadioButton *> gameTypeCheckBoxIterator(gameTypeCheckBoxes);
while (gameTypeCheckBoxIterator.hasNext()) { while (gameTypeCheckBoxIterator.hasNext()) {
gameTypeCheckBoxIterator.next(); gameTypeCheckBoxIterator.next();
if (gameTypeCheckBoxIterator.value()->isChecked()) { if (gameTypeCheckBoxIterator.value()->isChecked()) {
@ -234,7 +229,7 @@ void DlgCreateGame::actOK()
} }
settingsCache->setRememberGameSettings(rememberGameSettings->isChecked()); settingsCache->setRememberGameSettings(rememberGameSettings->isChecked());
if (rememberGameSettings->isChecked()){ if (rememberGameSettings->isChecked()) {
settingsCache->setGameDescription(descriptionEdit->text()); settingsCache->setGameDescription(descriptionEdit->text());
settingsCache->setMaxPlayers(maxPlayersEdit->value()); settingsCache->setMaxPlayers(maxPlayersEdit->value());
settingsCache->setOnlyBuddies(onlyBuddiesCheckBox->isChecked()); settingsCache->setOnlyBuddies(onlyBuddiesCheckBox->isChecked());
@ -252,8 +247,7 @@ void DlgCreateGame::actOK()
buttonBox->setEnabled(false); buttonBox->setEnabled(false);
} }
void DlgCreateGame::checkResponse(const Response &response) void DlgCreateGame::checkResponse(const Response &response) {
{
buttonBox->setEnabled(true); buttonBox->setEnabled(true);
if (response.response_code() == Response::RespOk) if (response.response_code() == Response::RespOk)
@ -264,9 +258,9 @@ void DlgCreateGame::checkResponse(const Response &response)
} }
} }
void DlgCreateGame::spectatorsAllowedChanged(int state) void DlgCreateGame::spectatorsAllowedChanged(int state) {
{
spectatorsNeedPasswordCheckBox->setEnabled(state); spectatorsNeedPasswordCheckBox->setEnabled(state);
spectatorsCanTalkCheckBox->setEnabled(state); spectatorsCanTalkCheckBox->setEnabled(state);
spectatorsSeeEverythingCheckBox->setEnabled(state); spectatorsSeeEverythingCheckBox->setEnabled(state);
} }

View file

@ -8,6 +8,7 @@ class QLabel;
class QLineEdit; class QLineEdit;
class QPushButton; class QPushButton;
class QCheckBox; class QCheckBox;
class QRadioButton;
class QGroupBox; class QGroupBox;
class QSpinBox; class QSpinBox;
class QDialogButtonBox; class QDialogButtonBox;
@ -29,7 +30,7 @@ private slots:
private: private:
TabRoom *room; TabRoom *room;
QMap<int, QString> gameTypes; QMap<int, QString> gameTypes;
QMap<int, QCheckBox *> gameTypeCheckBoxes; QMap<int, QRadioButton *> gameTypeCheckBoxes;
QGroupBox *spectatorsGroupBox; QGroupBox *spectatorsGroupBox;
QLabel *descriptionLabel, *passwordLabel, *maxPlayersLabel; QLabel *descriptionLabel, *passwordLabel, *maxPlayersLabel;