]> sigrok.org Git - pulseview.git/blobdiff - pv/application.cpp
Add language chooser widget and handling
[pulseview.git] / pv / application.cpp
index e933f96214d94c72620a088f7e766e8a675b574b..67e0444f435b53fa8c67ae3f51a6058db0ba7e37 100644 (file)
@@ -21,6 +21,9 @@
 #include <typeinfo>
 
 #include <QDebug>
 #include <typeinfo>
 
 #include <QDebug>
+#include <QDir>
+#include <QMessageBox>
+#include <QWidget>
 
 #include <boost/version.hpp>
 
 
 #include <boost/version.hpp>
 
@@ -61,6 +64,22 @@ Application::Application(int &argc, char* argv[]) :
        setOrganizationDomain("sigrok.org");
 }
 
        setOrganizationDomain("sigrok.org");
 }
 
+QStringList Application::get_languages()
+{
+       QStringList files = QDir(":/l10n/").entryList(QStringList("*.qm"), QDir::Files);
+
+       QStringList result;
+       result << "en";  // Add default language to the set
+
+       // Remove file extensions
+       for (QString file : files)
+               result << file.split(".").front();
+
+       result.sort(Qt::CaseInsensitive);
+
+       return result;
+}
+
 void Application::switch_language(const QString& language)
 {
        removeTranslator(&app_translator_);
 void Application::switch_language(const QString& language)
 {
        removeTranslator(&app_translator_);
@@ -81,6 +100,20 @@ void Application::switch_language(const QString& language)
                else
                        qWarning() << "Translation resource" << resource << "not found";
        }
                else
                        qWarning() << "Translation resource" << resource << "not found";
        }
+
+       if (!topLevelWidgets().empty()) {
+               // Force all windows to update
+               for (QWidget *widget : topLevelWidgets())
+                       widget->update();
+
+               QMessageBox msg(topLevelWidgets().front());
+               msg.setText(tr("Some parts of the application may still " \
+                               "use the previous language. Re-opening the affected windows or " \
+                               "restarting the application will remedy this."));
+               msg.setStandardButtons(QMessageBox::Ok);
+               msg.setIcon(QMessageBox::Information);
+               msg.exec();
+       }
 }
 
 void Application::on_setting_changed(const QString &key, const QVariant &value)
 }
 
 void Application::on_setting_changed(const QString &key, const QVariant &value)