Make the settings dialog react to language changes
This covers the settings dialog itself and option pages based on `UiFileBasedOptionPage`. Other option pages need to react to the new `OptionPageWidget::retranslationRequired()` signal or handle the `QEvent::LanguageChange` event which is now propageted to the page's widget.
This commit is contained in:
parent
bc3f84e65d
commit
dd99862769
|
@ -1,6 +1,9 @@
|
||||||
#include "./optioncategory.h"
|
#include "./optioncategory.h"
|
||||||
#include "./optionpage.h"
|
#include "./optionpage.h"
|
||||||
|
|
||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QEvent>
|
||||||
|
|
||||||
namespace QtUtilities {
|
namespace QtUtilities {
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -59,6 +62,20 @@ void OptionCategory::resetAllPages()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Triggers retranslation of all pages.
|
||||||
|
* \remarks Has no effect if the pages don't react to the LanguageChange event.
|
||||||
|
*/
|
||||||
|
void OptionCategory::retranslateAllPages()
|
||||||
|
{
|
||||||
|
auto event = QEvent(QEvent::LanguageChange);
|
||||||
|
for (auto *const page : m_pages) {
|
||||||
|
if (page->hasBeenShown()) {
|
||||||
|
QCoreApplication::sendEvent(page->widget(), &event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Returns whether the option category matches the specified \a
|
* \brief Returns whether the option category matches the specified \a
|
||||||
* searchKeyWord.
|
* searchKeyWord.
|
||||||
|
|
|
@ -33,6 +33,7 @@ public:
|
||||||
void assignPages(const QList<OptionPage *> &pages);
|
void assignPages(const QList<OptionPage *> &pages);
|
||||||
bool applyAllPages();
|
bool applyAllPages();
|
||||||
void resetAllPages();
|
void resetAllPages();
|
||||||
|
void retranslateAllPages();
|
||||||
bool matches(const QString &searchKeyWord) const;
|
bool matches(const QString &searchKeyWord) const;
|
||||||
int currentIndex() const;
|
int currentIndex() const;
|
||||||
void setCurrentIndex(int currentIndex);
|
void setCurrentIndex(int currentIndex);
|
||||||
|
|
|
@ -99,6 +99,9 @@ bool OptionPageWidget::event(QEvent *event)
|
||||||
case QEvent::PaletteChange:
|
case QEvent::PaletteChange:
|
||||||
emit paletteChanged();
|
emit paletteChanged();
|
||||||
break;
|
break;
|
||||||
|
case QEvent::LanguageChange:
|
||||||
|
emit retranslationRequired();
|
||||||
|
break;
|
||||||
default:;
|
default:;
|
||||||
}
|
}
|
||||||
return QWidget::event(event);
|
return QWidget::event(event);
|
||||||
|
|
|
@ -20,6 +20,7 @@ public:
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void paletteChanged();
|
void paletteChanged();
|
||||||
|
void retranslationRequired();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool event(QEvent *) override;
|
bool event(QEvent *) override;
|
||||||
|
@ -143,11 +144,14 @@ template <class UiClass> UiFileBasedOptionPage<UiClass>::~UiFileBasedOptionPage(
|
||||||
*/
|
*/
|
||||||
template <class UiClass> QWidget *UiFileBasedOptionPage<UiClass>::setupWidget()
|
template <class UiClass> QWidget *UiFileBasedOptionPage<UiClass>::setupWidget()
|
||||||
{
|
{
|
||||||
QWidget *widget = new OptionPageWidget();
|
auto *const widget = new OptionPageWidget();
|
||||||
if (!m_ui) {
|
if (!m_ui) {
|
||||||
m_ui.reset(new UiClass);
|
m_ui.reset(new UiClass);
|
||||||
}
|
}
|
||||||
m_ui->setupUi(widget);
|
m_ui->setupUi(widget);
|
||||||
|
QObject::connect(widget, &OptionPageWidget::retranslationRequired, [this, widget] {
|
||||||
|
m_ui->retranslateUi(widget);
|
||||||
|
});
|
||||||
return widget;
|
return widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -337,6 +337,9 @@ bool SettingsDialog::event(QEvent *event)
|
||||||
case QEvent::PaletteChange:
|
case QEvent::PaletteChange:
|
||||||
setStyleSheet(dialogStyleForPalette(palette()));
|
setStyleSheet(dialogStyleForPalette(palette()));
|
||||||
break;
|
break;
|
||||||
|
case QEvent::LanguageChange:
|
||||||
|
m_ui->retranslateUi(this);
|
||||||
|
break;
|
||||||
default:;
|
default:;
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
|
Loading…
Reference in New Issue