Mercurial > public > ostc_companion
diff SettingsDialog.cpp @ 1:0b3630a29ad8
Initial version based on previous repository.
Project was ported to QT6 and in now cmake based.
| author | Ideenmodellierer <tiefenrauscher@web.de> |
|---|---|
| date | Thu, 27 Nov 2025 18:40:28 +0100 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SettingsDialog.cpp Thu Nov 27 18:40:28 2025 +0100 @@ -0,0 +1,255 @@ +////////////////////////////////////////////////////////////////////////////// +/// \file SettingsDialog.cpp +/// \brief Preference dialog for OSTC Companion. +/// \author JD Gascuel. +/// +/// \copyright (c) 2011-2014 JD Gascuel. All rights reserved. +/// $Id$ +////////////////////////////////////////////////////////////////////////////// +// +// BSD 2-Clause License: +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +// THE POSSIBILITY OF SUCH DAMAGE. +// +////////////////////////////////////////////////////////////////////////////// + +#include "SettingsDialog.h" +#include "ui_Settings.h" + +#include "MainWindow.h" // Needed to propagare retranslate() + +#include "Utils/Log.h" + +#include <QApplication> +#include <QDialogButtonBox> +#include <QDir> +#include <QLibraryInfo> +#include <QPushButton> +#include <QSettings> +#include <QTranslator> + +#ifdef Q_OS_WIN +# define NOMINMAX 1 +# include <Windows.h> +# undef NOMINMAX +#endif + +#include "Export.h" +#include "HardwareOperations.h" + +QString EXPORT Settings::language = ""; +QString EXPORT Settings::port = ""; +QString EXPORT Settings::currentPath = ""; + +bool EXPORT Settings::autoSetDateTime = true; + +bool EXPORT Settings::forceFirmwareUpdate = false; +bool EXPORT Settings::forceRTEUpdate = false; +bool EXPORT Settings::forceFontlibUpdate = false; + +bool EXPORT Settings::useFastMode = false; + +extern QSettings* settings; + +////////////////////////////////////////////////////////////////////////////// + +Settings::Settings(QWidget* parent, HardwareOperations *op) + : QDialog(parent), + _ui(new Ui::Settings), + _op(op) +{ + _ui->setupUi(this); + reload(this); +} + +Settings::~Settings() +{ + delete _ui; +} + +////////////////////////////////////////////////////////////////////////////// + +void Settings::reload(Settings* dialog) +{ + //---- Restore options from settings ------------------------------------- + language = settings->value("Interface/lang", + QLocale::system().name().right(2) ).toString(); + port = settings->value("OSTC/port", "").toString(); + currentPath = settings->value("OSTC/currentPath", "").toString(); + autoSetDateTime = settings->value("OSTC/autoSetDateTime", true).toBool(); + forceFirmwareUpdate = settings->value("OSTC/forceFirmwareUpdate", false).toBool(); + forceRTEUpdate = settings->value("OSTC/forceRTEUpdate", false).toBool(); + forceFontlibUpdate = settings->value("OSTC/forceFontlibUpdate", false).toBool(); + + useFastMode = settings->value("OSTC/useFastMode", false).toBool(); + + setLanguage(); + + if( !dialog ) + return; + + //---- Update interface -------------------------------------------------- + if( language == "DE" ) dialog->_ui->languageMenu->setCurrentIndex(0); + if( language == "EN" ) dialog->_ui->languageMenu->setCurrentIndex(1); + if( language == "ES" ) dialog->_ui->languageMenu->setCurrentIndex(2); + if( language == "FR" ) dialog->_ui->languageMenu->setCurrentIndex(3); + if( language == "IT" ) dialog->_ui->languageMenu->setCurrentIndex(4); + if( language == "RU" ) dialog->_ui->languageMenu->setCurrentIndex(5); + + dialog->updatePortsSlot(); + + dialog->_ui->autoSetDateTimeCB->setChecked( autoSetDateTime ); + dialog->_ui->forceFirmwareUpdate->setChecked( forceFirmwareUpdate ); + dialog->_ui->forceRTEUpdate->setChecked( forceRTEUpdate ); + dialog->_ui->forceFontlibUpdate->setChecked( forceFontlibUpdate ); + dialog->_ui->useFastMode->setChecked( useFastMode ); + +} + +////////////////////////////////////////////////////////////////////////////// + +void Settings::languageSlot(int i) +{ + switch(i) { + case 0: language = "DE"; break; + case 1: language = "EN"; break; + case 2: language = "ES"; break; + case 3: language = "FR"; break; + case 4: language = "IT"; break; + case 5: language = "RU"; break; + } + setLanguage(); +} + + +void Settings::updatePortsSlot() +{ + //---- search for possible ports ---------------------------------------- + QStringList list; + if( _op ) { // Known driver type ? + list = _op->listPorts(); + +#ifndef Q_OS_LINUX + if( list.isEmpty() ) + _ui->noPortLabel->setText( + QString("<font color='red'>%1</font>: %2 - %3") + .arg(tr("Warning")) + .arg(tr("no port", "USB connection to OSTC not found")) + .arg(tr("Did you installed the %1 driver ?") +#ifdef Q_OS_WIN + .arg("<a href='http://www.ftdichip.com/Drivers/CDM/CDM%20v2.12.00%20WHQL%20Certified.zip'>FTDI VCP</a>"))); +#elif defined(Q_OS_MACX) + .arg("<a href='http://www.ftdichip.com/drivers/VCP/MacOSX/FTDIUSBSerialDriver_v2_2_18.dmg'>FTDI VCP</a>"))); +#else + .arg("USB"))); +#endif + else +#endif + _ui->noPortLabel->clear(); + } + + QString myPort = port + " (current)"; + if( ! port.isEmpty() ) + list += myPort; + list.sort(); + + _ui->portMenu->clear(); + _ui->portMenu->addItems(list); + _ui->portMenu->setCurrentText( port.isEmpty() ? "" : myPort ); +} + +////////////////////////////////////////////////////////////////////////////// + +void Settings::setLanguage() +{ + static QTranslator myappTranslator; + if( myappTranslator.load(":/Translations/companion_" + language) ) + qApp->installTranslator(&myappTranslator); +} + +void Settings::changeEvent(QEvent *e) +{ + if( e->type() == QEvent::LanguageChange ) + { + _ui->retranslateUi(this); + + // FIX: also update the warning text... + updatePortsSlot(); + + // FIX: propagate to main windows. + if( MainWindow* main = dynamic_cast<MainWindow*>(parent()) ) + main->retranslate(); + } +} + +////////////////////////////////////////////////////////////////////////////// + +void Settings::accept() +{ + port = _ui->portMenu->currentText().section(" ", 0, 0); + autoSetDateTime = _ui->autoSetDateTimeCB->isChecked(); + forceFirmwareUpdate = _ui->forceFirmwareUpdate->isChecked(); + forceRTEUpdate = _ui->forceRTEUpdate->isChecked(); + forceFontlibUpdate = _ui->forceFontlibUpdate->isChecked(); + + useFastMode = _ui->useFastMode->isChecked(); + save(); + QDialog::accept(); +} + +void Settings::save() +{ + settings->setValue("Interface/lang", language); + settings->setValue("OSTC/port", port); + settings->setValue("OSTC/currentPath", currentPath); + settings->setValue("OSTC/autoSetDateTime", autoSetDateTime); + settings->setValue("OSTC/forceFirmwareUpdate", forceFirmwareUpdate); + settings->setValue("OSTC/forceRTEUpdate", forceRTEUpdate); + settings->setValue("OSTC/forceFontlibUpdate", forceFontlibUpdate); + settings->setValue("OSTC/useFastMode", useFastMode); + settings->sync(); +} + +////////////////////////////////////////////////////////////////////////////// + +void Settings::reject() +{ + reload(this); + if( MainWindow* main = dynamic_cast<MainWindow*>(parent()) ) + main->retranslate(); + QDialog::reject(); +} + +////////////////////////////////////////////////////////////////////////////// + +void Settings::resetSettingsSlot() +{ + //---- Clear everything ------------------------------------------------- + settings->clear(); + settings->sync(); + //---- Set defaults + reload(this); + //---- Search connected ports + updatePortsSlot(); +}
