diff --git a/cockatrice/src/interface/widgets/general/home_widget.cpp b/cockatrice/src/interface/widgets/general/home_widget.cpp index cdf510abe..8ae0b2e00 100644 --- a/cockatrice/src/interface/widgets/general/home_widget.cpp +++ b/cockatrice/src/interface/widgets/general/home_widget.cpp @@ -40,9 +40,9 @@ HomeWidget::HomeWidget(QWidget *parent, TabSupervisor *_tabSupervisor) initializeBackgroundFromSource(); - updateConnectButton(tabSupervisor->getClient()->getStatus()); + updateConnectionStatus(tabSupervisor->getClient()->getStatus()); - connect(tabSupervisor->getClient(), &RemoteClient::statusChanged, this, &HomeWidget::updateConnectButton); + connect(tabSupervisor->getClient(), &RemoteClient::statusChanged, this, &HomeWidget::updateConnectionStatus); connect(&SettingsCache::instance(), &SettingsCache::homeTabBackgroundSourceChanged, this, &HomeWidget::initializeBackgroundFromSource); connect(&SettingsCache::instance(), &SettingsCache::homeTabBackgroundShuffleFrequencyChanged, this, @@ -177,9 +177,15 @@ QGroupBox *HomeWidget::createButtons() boxLayout->addWidget(logoLabel); boxLayout->addSpacing(25); - connectButton = new HomeStyledButton("Connect/Play", gradientColors); + connectButton = new HomeStyledButton(tr("Connect/Play"), gradientColors); boxLayout->addWidget(connectButton, 1); + localGameButton = new HomeStyledButton(tr("Start Local Game"), gradientColors); + boxLayout->addWidget(localGameButton); + if (auto mainWindow = qobject_cast(tabSupervisor->parent())) { + connect(localGameButton, &QPushButton::clicked, mainWindow, &MainWindow::actSinglePlayer); + } + auto visualDeckEditorButton = new HomeStyledButton(tr("Create New Deck"), gradientColors); connect(visualDeckEditorButton, &QPushButton::clicked, tabSupervisor, [this] { tabSupervisor->openDeckInNewTab(nullptr); }); @@ -209,25 +215,32 @@ QGroupBox *HomeWidget::createButtons() return box; } -void HomeWidget::updateConnectButton(const ClientStatus status) +void HomeWidget::updateConnectionStatus(const ClientStatus status) { disconnect(connectButton, &QPushButton::clicked, nullptr, nullptr); switch (status) { - case StatusConnecting: - connectButton->setText(tr("Connecting...")); - connectButton->setEnabled(false); - break; case StatusDisconnected: connectButton->setText(tr("Connect")); connectButton->setEnabled(true); connect(connectButton, &QPushButton::clicked, qobject_cast(tabSupervisor->parentWidget()), &MainWindow::actConnect); + + localGameButton->setEnabled(true); + localGameButton->setVisible(true); + break; + case StatusConnecting: + connectButton->setText(tr("Connecting...")); + connectButton->setEnabled(false); + + localGameButton->setEnabled(false); break; case StatusLoggedIn: connectButton->setText(tr("Play")); connectButton->setEnabled(true); connect(connectButton, &QPushButton::clicked, tabSupervisor, &TabSupervisor::switchToFirstAvailableNetworkTab); + + localGameButton->setVisible(false); break; default: break; diff --git a/cockatrice/src/interface/widgets/general/home_widget.h b/cockatrice/src/interface/widgets/general/home_widget.h index 1e870d1b6..76ff424bc 100644 --- a/cockatrice/src/interface/widgets/general/home_widget.h +++ b/cockatrice/src/interface/widgets/general/home_widget.h @@ -26,7 +26,7 @@ public slots: void updateBackgroundProperties(); void updateButtonsToBackgroundColor(); QGroupBox *createButtons(); - void updateConnectButton(const ClientStatus status); + void updateConnectionStatus(const ClientStatus status); private: QGridLayout *layout; @@ -38,6 +38,7 @@ private: QPixmap overlay; QPair gradientColors; HomeStyledButton *connectButton; + HomeStyledButton *localGameButton; }; #endif // HOME_WIDGET_H diff --git a/cockatrice/src/interface/window_main.h b/cockatrice/src/interface/window_main.h index 11f908c6f..eff1659cc 100644 --- a/cockatrice/src/interface/window_main.h +++ b/cockatrice/src/interface/window_main.h @@ -60,6 +60,7 @@ public slots: void actCheckServerUpdates(); void actCheckClientUpdates(); void actConnect(); + void actSinglePlayer(); void actExit(); private slots: void updateTabMenu(const QList &newMenuList); @@ -80,7 +81,6 @@ private slots: void pixmapCacheSizeChanged(int newSizeInMBs); void notifyUserAboutUpdate(); void actDisconnect(); - void actSinglePlayer(); void actWatchReplay(); void actFullScreen(bool checked); void actRegister(); diff --git a/cockatrice/src/tabs/tab_supervisor.cpp b/cockatrice/src/tabs/tab_supervisor.cpp index 78fce4516..e487bbf65 100644 --- a/cockatrice/src/tabs/tab_supervisor.cpp +++ b/cockatrice/src/tabs/tab_supervisor.cpp @@ -104,9 +104,9 @@ void CloseButton::paintEvent(QPaintEvent * /*event*/) } TabSupervisor::TabSupervisor(AbstractClient *_client, QMenu *tabsMenu, QWidget *parent) - : QTabWidget(parent), userInfo(nullptr), client(_client), tabsMenu(tabsMenu), tabVisualDeckStorage(nullptr), - tabServer(nullptr), tabAccount(nullptr), tabDeckStorage(nullptr), tabReplays(nullptr), tabAdmin(nullptr), - tabLog(nullptr), isLocalGame(false) + : QTabWidget(parent), userInfo(nullptr), client(_client), tabsMenu(tabsMenu), tabHome(nullptr), + tabVisualDeckStorage(nullptr), tabServer(nullptr), tabAccount(nullptr), tabDeckStorage(nullptr), + tabReplays(nullptr), tabAdmin(nullptr), tabLog(nullptr), isLocalGame(false) { setElideMode(Qt::ElideRight); setMovable(true);