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
This commit is contained in:
Neel Jogani 2026-10-24 12:05:31 +05:30 • committed by GitHub
parent e73dd2b520
commit 6e770eb7b2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 50 additions and 14 deletions

View file

@ -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<MainWindow *>(tabSupervisor->parentWidget())) {
auto exitButton = new HomeStyledButton(tr("Quit"), gradientColors);
exitButton = new HomeStyledButton(QString(), gradientColors);
connect(exitButton, &QPushButton::clicked, qobject_cast<MainWindow *>(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<MainWindow *>(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<QColor, QColor> HomeWidget::extractDominantColors(const QPixmap &pixmap)

View file

@ -33,6 +33,7 @@ class HomeWidget : public QWidget
public:
HomeWidget(QWidget *parent, TabSupervisor *tabSupervisor);
void updateRandomCard();
void retranslateUi();
static QPair<QColor, QColor> extractDominantColors(const QPixmap &pixmap);
public slots:
@ -53,7 +54,15 @@ private:
DeckList backgroundSourceDeck;
QLabel *logoLabel = nullptr;
QPair<QColor, QColor> 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();

View file

@ -12,4 +12,5 @@ TabHome::TabHome(TabSupervisor *_tabSupervisor, AbstractClient *_client) : Tab(_
void TabHome::retranslateUi()
{
homeWidget->retranslateUi();
}

View file

@ -292,6 +292,7 @@ void TabSupervisor::retranslateUi()
// tabs
QList<Tab *> tabs;
tabs.append(tabHome);
tabs.append(tabServer);
tabs.append(tabReplays);
tabs.append(tabDeckStorage);