diff --git a/sleepyhead/SleepLib/schema.cpp b/sleepyhead/SleepLib/schema.cpp index bc43afca..12fe35b6 100644 --- a/sleepyhead/SleepLib/schema.cpp +++ b/sleepyhead/SleepLib/schema.cpp @@ -619,6 +619,11 @@ Channel::Channel(ChannelID id, ChanType type, MachineType machtype, ScopeType sc calc[Calc_UpperThresh] = ChannelCalc(id, Calc_UpperThresh, Qt::red, false); } m_showInOverview = false; + + default_fullname = fullname; + default_label = label; + default_description = description; + } bool Channel::isNull() { @@ -827,6 +832,17 @@ bool ChannelList::Load(QString filename) return true; } +void ChannelList::resetStrings() +{ + QHash::iterator it; + QHash::iterator it_end = channels.end(); + for (it = channels.begin(); it != it_end; ++it) { + Channel * chan = it.value(); + chan->resetStrings(); + } +} + + void ChannelList::add(QString group, Channel *chan) { Q_ASSERT(chan != nullptr); diff --git a/sleepyhead/SleepLib/schema.h b/sleepyhead/SleepLib/schema.h index 6934eeae..133a144e 100644 --- a/sleepyhead/SleepLib/schema.h +++ b/sleepyhead/SleepLib/schema.h @@ -129,6 +129,11 @@ class Channel void setOrder(short order) { m_order = order; } void setShowInOverview(bool b) { m_showInOverview = b; } + void resetStrings() { + m_fullname = default_fullname; + m_label = default_label; + m_description = default_description; + } QString option(int i) { if (m_options.contains(i)) { @@ -150,6 +155,8 @@ class Channel QHash calc; protected: + + int m_id; ChanType m_type; @@ -162,6 +169,11 @@ class Channel QString m_description; QString m_label; QString m_unit; + + QString default_fullname; + QString default_label; + QString default_description; + DataType m_datatype; QColor m_defaultcolor; @@ -214,6 +226,8 @@ class ChannelList } } + void resetStrings(); + //! \brief Channel List indexed by integer ID QHash channels; diff --git a/sleepyhead/main.cpp b/sleepyhead/main.cpp index 2f20b432..6c294f76 100644 --- a/sleepyhead/main.cpp +++ b/sleepyhead/main.cpp @@ -106,17 +106,25 @@ int main(int argc, char *argv[]) bool force_login_screen = false; bool force_data_dir = false; + bool changing_language = false; QApplication a(argc, argv); QStringList args = QCoreApplication::arguments(); QSettings settings(getDeveloperName(), getAppName()); + QString lastlanguage = settings.value(LangSetting, "").toString(); + if (lastlanguage.isEmpty()) + changing_language = true; + for (int i = 1; i < args.size(); i++) { if (args[i] == "-l") { force_login_screen = true; } else if (args[i] == "-d") { force_data_dir = true; } else if (args[i] == "-language") { - settings.setValue("Settings/Language",""); + changing_language = true; + + // reset to force language dialog + settings.setValue(LangSetting,""); } else if (args[i] == "-p") { sDelay(1); } @@ -129,9 +137,18 @@ int main(int argc, char *argv[]) // Language Selection //////////////////////////////////////////////////////////////////////////////////////////// initTranslations(settings); + initializeStrings(); // Important, call this AFTER translator is installed. a.setApplicationName(STR_TR_SleepyHead); + if (settings.value(LangSetting, "").toString() == lastlanguage) { + // don't reset if they selected the same language again + changing_language = false; + } + + //////////////////////////////////////////////////////////////////////////////////////////// + // OpenGL Detection + //////////////////////////////////////////////////////////////////////////////////////////// float glversion = getOpenGLVersion(); bool opengl2supported = glversion >= 2.0; @@ -145,7 +162,6 @@ int main(int argc, char *argv[]) } #endif - QString lookfor = QObject::tr("Look for this build in SleepyHead's files hosted on Sourceforge.").arg("http://sf.net/projects/sleepyhead/files"); #ifdef BROKEN_OPENGL_BUILD Q_UNUSED(bad_graphics) Q_UNUSED(intel_graphics) @@ -187,8 +203,7 @@ int main(int argc, char *argv[]) QObject::tr("You may need to update your computers graphics drivers from the GPU makers website. %1"). arg(intel_graphics ? QObject::tr("(Intel's support site)") : "")+"

"+ QObject::tr("Because graphs will not render correctly, and it may cause crashes, this build will now exit.")+"

"+ - QObject::tr("Don't be disheartened, there is another build available tagged \"-BrokenGL\" that should work on your computer.")+ "

"+ - lookfor+ "

" + QObject::tr("There is another build available tagged \"-BrokenGL\" that should work on your computer.") ,QMessageBox::Ok, QMessageBox::Ok); @@ -397,9 +412,16 @@ retry_directory: // Must be initialized AFTER profile creation MainWindow w; - mainwin = &w; + loadChannels(); + + if (changing_language) { + qDebug() << "Resetting Channel strings to defaults for language change"; + schema::channel.resetStrings(); + } + + // if (check_updates) { mainwin->CheckForUpdates(); } w.show(); diff --git a/sleepyhead/mainwindow.cpp b/sleepyhead/mainwindow.cpp index c8d1940b..bcb8d17c 100644 --- a/sleepyhead/mainwindow.cpp +++ b/sleepyhead/mainwindow.cpp @@ -121,9 +121,6 @@ void MainWindow::logMessage(QString msg) ui->logText->appendPlainText(msg); } -void loadChannels(); -void saveChannels(); - MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) @@ -327,7 +324,6 @@ MainWindow::MainWindow(QWidget *parent) : wtimer.setParent(this); warnidx = 0; wtimer.singleShot(0, this, SLOT(on_changeWarningMessage())); - loadChannels(); connect(QCoreApplication::instance(), SIGNAL(aboutToQuit()), this, SLOT(on_aboutToQuit())); @@ -1918,8 +1914,10 @@ void MainWindow::on_action_Rebuild_Oximetry_Index_triggered() overview->ReloadGraphs(); } -void MainWindow::RestartApplication(bool force_login, bool change_datafolder) +void MainWindow::RestartApplication(bool force_login, QString cmdline) { + p_profile->removeLock(); + QString apppath; #ifdef Q_OS_MAC // In Mac OS the full path of aplication binary is: @@ -1938,7 +1936,7 @@ void MainWindow::RestartApplication(bool force_login, bool change_datafolder) if (force_login) { args << "-l"; } - if (change_datafolder) { args << "-d"; } + args << cmdline; if (QProcess::startDetached("/usr/bin/open", args)) { QApplication::instance()->exit(); @@ -1958,7 +1956,9 @@ void MainWindow::RestartApplication(bool force_login, bool change_datafolder) if (force_login) { args << "-l"; } - if (change_datafolder) { args << "-d"; } + args << cmdline; + + //if (change_datafolder) { args << "-d"; } if (QProcess::startDetached(apppath, args)) { ::exit(0); @@ -1972,7 +1972,6 @@ void MainWindow::on_actionChange_User_triggered() { p_profile->Save(); PREF.Save(); - p_profile->removeLock(); RestartApplication(true); } @@ -2507,14 +2506,13 @@ void MainWindow::on_actionHelp_Support_SleepyHead_Development_triggered() void MainWindow::on_actionChange_Language_triggered() { - QSettings *settings = new QSettings(getDeveloperName(), getAppName()); - settings->remove("Settings/Language"); - delete settings; + //QSettings *settings = new QSettings(getDeveloperName(), getAppName()); + //settings->remove("Settings/Language"); + //delete settings; p_profile->Save(); PREF.Save(); - p_profile->removeLock(); - RestartApplication(true); + RestartApplication(true, "-language"); } void MainWindow::on_actionChange_Data_Folder_triggered() @@ -2523,7 +2521,7 @@ void MainWindow::on_actionChange_Data_Folder_triggered() PREF.Save(); p_profile->removeLock(); - RestartApplication(false, true); + RestartApplication(false, "-d"); } void MainWindow::on_actionImport_Somnopose_Data_triggered() diff --git a/sleepyhead/mainwindow.h b/sleepyhead/mainwindow.h index 382d2104..c875c104 100644 --- a/sleepyhead/mainwindow.h +++ b/sleepyhead/mainwindow.h @@ -66,6 +66,9 @@ class Daily; class Report; class Overview; +void loadChannels(); +void saveChannels(); + /*! \class MainWindow \author Mark Watkins @@ -123,7 +126,7 @@ class MainWindow : public QMainWindow If force_login is set, it will return to the login menu even if it's set to skip */ - static void RestartApplication(bool force_login = false, bool change_datafolder = false); + static void RestartApplication(bool force_login = false, QString cmdline = QString()); void JumpDaily(); diff --git a/sleepyhead/profileselect.cpp b/sleepyhead/profileselect.cpp index 292f6bc0..cfdbd735 100644 --- a/sleepyhead/profileselect.cpp +++ b/sleepyhead/profileselect.cpp @@ -393,7 +393,7 @@ void ProfileSelect::on_listView_customContextMenuRequested(const QPoint &pos) void ProfileSelect::on_pushButton_clicked() { - MainWindow::RestartApplication(false, true); + MainWindow::RestartApplication(false, "-d"); } void ProfileSelect::on_filter_textChanged(const QString &arg1) diff --git a/sleepyhead/translation.cpp b/sleepyhead/translation.cpp index 73e97bec..615843f6 100644 --- a/sleepyhead/translation.cpp +++ b/sleepyhead/translation.cpp @@ -56,7 +56,7 @@ void initTranslations(QSettings & settings) { dir.setNameFilters(QStringList("*.qm")); QFileInfoList list = dir.entryInfoList(); - QString language = settings.value("Settings/Language").toString(); + QString language = settings.value(LangSetting).toString(); QString langfile, langname; @@ -140,7 +140,7 @@ void initTranslations(QSettings & settings) { langsel.disconnect(&langlist, SIGNAL(itemDoubleClicked(QListWidgetItem*)), &langsel, SLOT(close())); langname = langlist.currentItem()->text(); language = langlist.currentItem()->data(Qt::UserRole).toString(); - settings.setValue("Settings/Language", language); + settings.setValue(LangSetting, language); } langname=langNames[language]; diff --git a/sleepyhead/translation.h b/sleepyhead/translation.h index 89b9dbca..e4970449 100644 --- a/sleepyhead/translation.h +++ b/sleepyhead/translation.h @@ -11,6 +11,8 @@ #include +const QString LangSetting = "Settings/Language"; + void initTranslations(QSettings & settings); #endif // TRANSLATION_H