From 6e770eb7b2413081f5b5ef7d4f50edaa827e217a Mon Sep 17 00:00:00 2001 From: Neel Jogani Date: Sat, 24 Oct 2026 12:05:31 +0530 Subject: [PATCH] Retranslate Home tab when the language changes (#7579) * Retranslate Home tab when the language changes TabSupervisor::retranslateUi() never included the Home tab, and HomeWidget set its button text only once, when the buttons were created. Switching languages left the Home tab in the old language until it was reopened. Store the Home buttons as members, add HomeWidget::retranslateUi() to set their text, and call it from TabHome and TabSupervisor. The connect button text still only changes for the Connecting, Disconnected and LoggedIn statuses, as before. * Address review: plain ClientStatus, drop optional and placeholder --- .../interface/widgets/general/home_widget.cpp | 51 ++++++++++++++----- .../interface/widgets/general/home_widget.h | 11 +++- .../src/interface/widgets/tabs/tab_home.cpp | 1 + .../interface/widgets/tabs/tab_supervisor.cpp | 1 + 4 files changed, 50 insertions(+), 14 deletions(-) diff --git a/cockatrice/src/interface/widgets/general/home_widget.cpp b/cockatrice/src/interface/widgets/general/home_widget.cpp index c77fd76fd..7555d1f45 100644 --- a/cockatrice/src/interface/widgets/general/home_widget.cpp +++ b/cockatrice/src/interface/widgets/general/home_widget.cpp @@ -113,6 +113,32 @@ HomeWidget::HomeWidget(QWidget *parent, TabSupervisor *_tabSupervisor) &HomeWidget::updateButtonsToBackgroundColor); } +void HomeWidget::retranslateUi() +{ + visualDeckEditorButton->setText(tr("Create New Deck")); + visualDeckStorageButton->setText(tr("Browse Decks")); + visualDatabaseDisplayButton->setText(tr("Browse Card Database")); + edhrecButton->setText(tr("Browse EDHRec")); + archidektButton->setText(tr("Browse Archidekt")); + replayButton->setText(tr("View Replays")); + if (exitButton) { + exitButton->setText(tr("Quit")); + } + + switch (connectionStatus) { + case StatusDisconnected: + connectButton->setText(tr("Connect")); + break; + case StatusLoggedIn: + connectButton->setText(tr("Play")); + break; + default: + // Connecting, registering, activating, logging in, etc. + connectButton->setText(tr("Connecting...")); + break; + } +} + void HomeWidget::initializeBackgroundFromSource() { // The featured logo is theme/scheme-derived too; reload it alongside the @@ -284,32 +310,32 @@ QGroupBox *HomeWidget::createButtons() updateLogoOverlay(); boxLayout->addSpacing(25); - connectButton = new HomeStyledButton("Connect/Play", gradientColors); + connectButton = new HomeStyledButton(QString(), gradientColors); boxLayout->addWidget(connectButton); - auto visualDeckEditorButton = new HomeStyledButton(tr("Create New Deck"), gradientColors); + visualDeckEditorButton = new HomeStyledButton(QString(), gradientColors); connect(visualDeckEditorButton, &QPushButton::clicked, tabSupervisor, [this] { tabSupervisor->openDeckInNewTab(LoadedDeck()); }); boxLayout->addWidget(visualDeckEditorButton); - auto visualDeckStorageButton = new HomeStyledButton(tr("Browse Decks"), gradientColors); + visualDeckStorageButton = new HomeStyledButton(QString(), gradientColors); connect(visualDeckStorageButton, &QPushButton::clicked, tabSupervisor, [this] { tabSupervisor->actTabVisualDeckStorage(true); }); boxLayout->addWidget(visualDeckStorageButton); - auto visualDatabaseDisplayButton = new HomeStyledButton(tr("Browse Card Database"), gradientColors); + visualDatabaseDisplayButton = new HomeStyledButton(QString(), gradientColors); connect(visualDatabaseDisplayButton, &QPushButton::clicked, tabSupervisor, &TabSupervisor::addVisualDatabaseDisplayTab); boxLayout->addWidget(visualDatabaseDisplayButton); - auto edhrecButton = new HomeStyledButton(tr("Browse EDHRec"), gradientColors); + edhrecButton = new HomeStyledButton(QString(), gradientColors); connect(edhrecButton, &QPushButton::clicked, tabSupervisor, &TabSupervisor::addEdhrecMainTab); boxLayout->addWidget(edhrecButton); - auto archidektButton = new HomeStyledButton(tr("Browse Archidekt"), gradientColors); + archidektButton = new HomeStyledButton(QString(), gradientColors); connect(archidektButton, &QPushButton::clicked, tabSupervisor, &TabSupervisor::addArchidektTab); boxLayout->addWidget(archidektButton); - auto replaybutton = new HomeStyledButton(tr("View Replays"), gradientColors); - connect(replaybutton, &QPushButton::clicked, tabSupervisor, [this] { tabSupervisor->actTabReplays(true); }); - boxLayout->addWidget(replaybutton); + replayButton = new HomeStyledButton(QString(), gradientColors); + connect(replayButton, &QPushButton::clicked, tabSupervisor, [this] { tabSupervisor->actTabReplays(true); }); + boxLayout->addWidget(replayButton); if (qobject_cast(tabSupervisor->parentWidget())) { - auto exitButton = new HomeStyledButton(tr("Quit"), gradientColors); + exitButton = new HomeStyledButton(QString(), gradientColors); connect(exitButton, &QPushButton::clicked, qobject_cast(tabSupervisor->parentWidget()), &MainWindow::actExit); boxLayout->addWidget(exitButton); @@ -321,20 +347,18 @@ QGroupBox *HomeWidget::createButtons() void HomeWidget::updateConnectButton(const ClientStatus status) { + connectionStatus = 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); break; case StatusLoggedIn: - connectButton->setText(tr("Play")); connectButton->setEnabled(true); connect(connectButton, &QPushButton::clicked, tabSupervisor, &TabSupervisor::switchToFirstAvailableNetworkTab); @@ -342,6 +366,7 @@ void HomeWidget::updateConnectButton(const ClientStatus status) default: break; } + retranslateUi(); } QPair HomeWidget::extractDominantColors(const QPixmap &pixmap) diff --git a/cockatrice/src/interface/widgets/general/home_widget.h b/cockatrice/src/interface/widgets/general/home_widget.h index fb9566cad..aa4745c82 100644 --- a/cockatrice/src/interface/widgets/general/home_widget.h +++ b/cockatrice/src/interface/widgets/general/home_widget.h @@ -33,6 +33,7 @@ class HomeWidget : public QWidget public: HomeWidget(QWidget *parent, TabSupervisor *tabSupervisor); void updateRandomCard(); + void retranslateUi(); static QPair extractDominantColors(const QPixmap &pixmap); public slots: @@ -53,7 +54,15 @@ private: DeckList backgroundSourceDeck; QLabel *logoLabel = nullptr; QPair gradientColors; - HomeStyledButton *connectButton; + HomeStyledButton *connectButton = nullptr; + HomeStyledButton *visualDeckEditorButton = nullptr; + HomeStyledButton *visualDeckStorageButton = nullptr; + HomeStyledButton *visualDatabaseDisplayButton = nullptr; + HomeStyledButton *edhrecButton = nullptr; + HomeStyledButton *archidektButton = nullptr; + HomeStyledButton *replayButton = nullptr; + HomeStyledButton *exitButton = nullptr; + ClientStatus connectionStatus = StatusDisconnected; void setRandomCard(ExactCard &newCard); void loadBackgroundSourceDeck(); diff --git a/cockatrice/src/interface/widgets/tabs/tab_home.cpp b/cockatrice/src/interface/widgets/tabs/tab_home.cpp index 1358645d0..af9994fdd 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_home.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_home.cpp @@ -12,4 +12,5 @@ TabHome::TabHome(TabSupervisor *_tabSupervisor, AbstractClient *_client) : Tab(_ void TabHome::retranslateUi() { + homeWidget->retranslateUi(); } diff --git a/cockatrice/src/interface/widgets/tabs/tab_supervisor.cpp b/cockatrice/src/interface/widgets/tabs/tab_supervisor.cpp index 2352d7d7b..3d7ca0a98 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_supervisor.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_supervisor.cpp @@ -292,6 +292,7 @@ void TabSupervisor::retranslateUi() // tabs QList tabs; + tabs.append(tabHome); tabs.append(tabServer); tabs.append(tabReplays); tabs.append(tabDeckStorage);