FreeSSM::FreeSSM(QApplication *app) { _qt_translator = NULL; _translator = NULL; _iface_type = AbstractDiagInterface::interface_serialPassThrough; _iface_filename = ""; _language = "en"; // default language _dumping = false; QString appsPath( QCoreApplication::applicationDirPath() ); // SETUP GUI: setupUi(this); setWindowFlags( windowFlags() & ~Qt::WindowMaximizeButtonHint ); // only necessary for MS Windows #ifndef SMALL_RESOLUTION // LOAD BACKGROUND PICTURE: background_label->setPixmap(appsPath + "/background.png"); // SHOW PROGRAM TITEL + VERSION: QFont titlefont = this->font(); titlefont.setPointSize(20); titlefont.setBold(true); _progtitle_label = new QLabel(this); _progtitle_label->setGeometry(20, 17, 315, 34); _progtitle_label->setFont( titlefont ); _progtitle_label->setText("FreeSSM " + QApplication::applicationVersion()); this->setWindowTitle("FreeSSM " + QApplication::applicationVersion()); // PLACE WINDOW IN THE CENTER OF THE SCREEN: QDesktopWidget desktop; int x = (desktop.width() - size().width()) / 2; int y = (desktop.height() - size().height()) / 2 - 50; this->move ( x, y ); #endif // LOAD PREFERENCES FROM FILE: QString savedinterfacefilename = ""; QString savedlanguage = ""; QString savedGUIstyle = ""; QString savedinterfacetype = ""; QFile prefsfile(QDir::homePath() + "/FreeSSM.prefs"); if (prefsfile.open(QIODevice::ReadOnly | QIODevice::Text)) { QByteArray line; if (!prefsfile.atEnd()) { // Load interface type settings: line = prefsfile.readLine(); line.truncate(line.length()-1); // truncate newline-character savedinterfacefilename = static_cast<QString>(line); } if (!prefsfile.atEnd()) { // Load language settings: line = prefsfile.readLine(); line.truncate(line.length()-1); savedlanguage = static_cast<QString>(line); } if (!prefsfile.atEnd()) { // Load GUI-style settings: line = prefsfile.readLine(); line.truncate(line.length()-1); savedGUIstyle = static_cast<QString>(line); } if (!prefsfile.atEnd()) { // Load interface file name settings: line = prefsfile.readLine(); line.truncate(line.length()-1); savedinterfacetype = static_cast<QString>(line); } prefsfile.close(); } // SET PREFERRED GUI-Style: if (savedGUIstyle.size()) { QStyle *qstyle = QStyleFactory::create( savedGUIstyle ); if (qstyle) QApplication::setStyle( qstyle ); } // CHECK SAVED LANGUAGE: bool sl_valid = false; QLocale loc = QLocale(savedlanguage); if ((loc != QLocale::C) && (__supportedLocales.indexOf( loc ) > -1)) { _language = savedlanguage; sl_valid = true; } // TRY TO SELECT SYSTEM LANGUAGE, IF SAVED LANGUAGE IS INVALID: if (!sl_valid) { if (__supportedLocales.indexOf( QLocale::system() ) > -1) _language = QLocale::system().name().section('_', 0, 0); } // SET TRANSLATOR AND RETRANSLATE: _translator = new QTranslator; bool langfileerror = false; langfileerror = !_translator->load("FreeSSM_" + _language + ".qm", appsPath); if (langfileerror && (_language != "en")) { // Fallback to English _language = "en"; langfileerror = !_translator->load("FreeSSM_en.qm", appsPath); // Display error message about missing language file: QMessageBox msg( QMessageBox::Critical, tr("Error"), tr("Error:\n- Language file missing or damaged -"), QMessageBox::Ok, this); QFont msgfont = msg.font(); msgfont.setPointSize(9); msg.setFont( msgfont ); msg.show(); msg.exec(); msg.close(); } if (!langfileerror) { app->installTranslator(_translator); retranslateUi(this); } else { delete _translator; _translator = NULL; } // SET Qt-TRANSLATOR (if necessary and available): if (_language != "en") { QString qt_ts_path = QLibraryInfo::location(QLibraryInfo::TranslationsPath); if (qt_ts_path.isEmpty()) qt_ts_path = QCoreApplication::applicationDirPath(); _qt_translator = new QTranslator; if (_qt_translator->load("qt_" + _language, qt_ts_path)) app->installTranslator(_qt_translator); else { delete _qt_translator; _qt_translator = NULL; } } // CHECK THE SAVED INTERFACE SETTINGS AND CORRECT IF NECESSARY: if (savedinterfacetype == QString::number(AbstractDiagInterface::interface_J2534)) // J2534-Pass-Through { _iface_type = AbstractDiagInterface::interface_J2534; const std::vector<J2534Library> J2534libs = J2534_API::getAvailableJ2534Libs(); if (J2534libs.size()) { if (!savedinterfacefilename.isEmpty()) { for (const J2534Library& lib : J2534libs) { if (savedinterfacefilename == QString::fromStdString(lib.path)) { _iface_filename = savedinterfacefilename; break; } } } if (_iface_filename.isEmpty()) _iface_filename = QString::fromStdString(J2534libs.at(0).path); } // NOTE: otherwise _iface_filename remains empty } else // Serial Pass-Through, AT-comand controlled (e.g. ELM, AGV, Diamex) or invalid { if (savedinterfacetype == QString::number(AbstractDiagInterface::interface_ATcommandControlled)) _iface_type = AbstractDiagInterface::interface_ATcommandControlled; else _iface_type = AbstractDiagInterface::interface_serialPassThrough; std::vector<std::string> portlist; portlist = serialCOM::GetAvailablePorts(); if (portlist.size()) { if (!savedinterfacetype.isEmpty() && !savedinterfacefilename.isEmpty()) { for (unsigned int k=0; k<portlist.size(); k++) { if (savedinterfacefilename == QString::fromStdString(portlist.at(k))) { _iface_filename = savedinterfacefilename; break; } } } if (_iface_filename.isEmpty()) _iface_filename = QString::fromStdString(portlist.at(0)); } // NOTE: otherwise _iface_filename remains empty } // CREATE ACTION FOR DUMPING CONTROL UNIT ID-DATA TO FILE: _dump_action = new QAction(this); _dump_action->setShortcut( QKeySequence("Ctrl+Alt+Return") ); this->addAction(_dump_action); // CONNECT SIGNALS/SLOTS: connect( engine_pushButton, SIGNAL( released() ), this, SLOT( engine() ) ); connect( transmission_pushButton, SIGNAL( released() ), this, SLOT( transmission() ) ); connect( absvdc_pushButton, SIGNAL( released() ), this, SLOT( abs() ) ); connect( cruisecontrol_pushButton, SIGNAL( released() ), this, SLOT( cruisecontrol() ) ); connect( aircon_pushButton, SIGNAL( released() ), this, SLOT( aircon() ) ); connect( preferences_pushButton, SIGNAL( released() ), this, SLOT( preferences() ) ); connect( help_pushButton, SIGNAL( released() ), this, SLOT( help() ) ); connect( about_pushButton, SIGNAL( released() ), this, SLOT( about() ) ); connect( exit_pushButton, SIGNAL( released() ), this, SLOT( close() ) ); // NOTE: using released() instead of pressed() as workaround for a Qt-Bug occuring under MS Windows connect( _dump_action, SIGNAL(triggered()), this, SLOT(dumpCUdata()) ); }
File APP::desktopFile() { return homeDir().getChildFile (appsPath() + desktopFilename()) ; }