From 197708500f3adaaa50bc1a5a94aec0db8ea621e5 Mon Sep 17 00:00:00 2001 From: manuel Date: Thu, 14 Apr 2011 19:18:48 +0200 Subject: add dynamic player count for client. currently works only with 1 player as server doesn't send the initial map to the clients --- pacman-c++/mainwidget.cpp | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) (limited to 'pacman-c++/mainwidget.cpp') diff --git a/pacman-c++/mainwidget.cpp b/pacman-c++/mainwidget.cpp index 6930b1a..a77daab 100644 --- a/pacman-c++/mainwidget.cpp +++ b/pacman-c++/mainwidget.cpp @@ -6,7 +6,7 @@ #include "pacman.pb.h" MainWidget::MainWidget(QWidget *parent) - : QWidget(parent), m_currentKey(Transmission::none), m_running(false) + : QWidget(parent), m_currentKey(Transmission::none), m_running(false), m_maxplayers(0) { /* create audio player */ m_ambientPlayer = new GaplessAudioPlayer(Sound::Ambient, 100, this); @@ -54,51 +54,55 @@ void MainWidget::createGui() setFocusPolicy(Qt::StrongFocus); /* first one is always the own score */ + QVBoxLayout *layout = new QVBoxLayout(this); + layout->setAlignment(Qt::AlignHCenter | Qt::AlignTop); QHBoxLayout *scoreLayout = new QHBoxLayout(); - for (unsigned int i = 0; Color::order[i] != Color::none ; ++i) + for (unsigned int i = 0; Color::order[i] != Color::none; ++i) { - QGroupBox *scoreBox = new QGroupBox(QString("Spieler %1").arg(i + 1), this); + QGridLayout *playerLayout = new QGridLayout(); + playerLayout->addWidget(new QLabel("Current:", this), 0, 0); + playerLayout->addWidget(new QLabel("Total:", this), 1, 0); + playerLayout->addWidget(new QLabel("0", this), 0, 1); + playerLayout->addWidget(new QLabel("0", this), 1, 1); + + QGroupBox *scoreBox = new QGroupBox(QString("Player %1").arg(i + 1), this); scoreBox->setObjectName(QString("actor%1").arg(i + 1)); scoreBox->setCheckable(true); connect(scoreBox, SIGNAL(clicked()), this, SLOT(playerScoreClicked())); - - QGridLayout *playerLayout = new QGridLayout(); scoreBox->setLayout(playerLayout); - - playerLayout->addWidget(new QLabel("Rundenpunkte:", this), 0, 0); - playerLayout->addWidget(new QLabel("Gesamtpunkte:", this), 1, 0); - - playerLayout->addWidget(new QLabel("", this), 0, 1); - playerLayout->addWidget(new QLabel("", this), 1, 1); + scoreBox->setDisabled(i >= m_maxplayers); + m_playerScoreLayouts.append(playerLayout); if (Color::order[i] == m_scene->color()) scoreLayout->insertWidget(0, scoreBox); else scoreLayout->addWidget(scoreBox); - m_playerScoreLayouts.append(playerLayout); } - - QVBoxLayout *layout = new QVBoxLayout(this); layout->addLayout(scoreLayout); + /* add some margin to scorebox hopefully won't resize the window */ + //setMinimumWidth(scoreLayout->minimumSize().width() + 50); QGraphicsView *window = new QGraphicsView(m_scene, this); window->setFrameStyle(0); - window->setAlignment(Qt::AlignLeft | Qt::AlignTop); window->setFixedSize(Constants::map_size_pixel.width, Constants::map_size_pixel.height); window->setWindowFlags(window->windowFlags() & ~Qt::WindowMaximizeButtonHint); window->setFocusPolicy(Qt::NoFocus); - layout->addWidget(window); + layout->addWidget(window, 0, Qt::AlignCenter); QFile css(":/stylesheet"); css.open(QFile::ReadOnly); qApp->setStyleSheet(QLatin1String(css.readAll())); + /* add dummy layout at the end which gets streched when resizing */ + QHBoxLayout *spacer = new QHBoxLayout(); + layout->addLayout(spacer, 10); + setLayout(layout); } void MainWidget::updateScore(const ProtoBuf::MapUpdate& packet) { - for(unsigned i = 0; Color::order[i] != Color::none; ++i) + for(unsigned i = 0; i < m_maxplayers; ++i) { QGridLayout *score = m_playerScoreLayouts.at(i); QLabel *turnPointsLbl = dynamic_cast(score->itemAtPosition(0, 1)->widget()); @@ -233,10 +237,11 @@ Color::Color MainWidget::connectToServer() { /* receive color */ QSharedPointer data = Util::receivePacket(m_socket); - ProtoBuf::WhoAmI packet; + ProtoBuf::Init packet; bool worked = packet.ParseFromArray(data->data(), data->size()); Q_ASSERT(worked); Q_UNUSED(worked); + m_maxplayers = packet.maxplayers(); return static_cast(packet.color() & Transmission::color_mask); } } -- cgit v1.2.3