view SettingsDialog.cpp @ 12:ac837fe1d590

Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
author Ideenmodellierer
date Mon, 12 Jan 2026 13:58:41 +0000
parents 21ce6187d32e
children
line wrap: on
line source

//////////////////////////////////////////////////////////////////////////////
/// \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();
}