Mon, 30 Jan 2023 17:05:13 +0100
Added yeastpack editor. Expanded the database upgrade. On startup, recount the yeastpack used fields.
/** * main.cpp is part of bmsapp. * * bmsapp is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * bmsapp is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <QApplication> #include <QCommandLineParser> #include <QDebug> #include <QDate> #include <QMessageBox> #include <QSettings> #include "MainWindow.h" #include "config.h" void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) { static QMutex mutex; QMutexLocker lock(&mutex); static QFile logFile("bmsapp.log"); static bool logFileIsOpen = logFile.open(QIODevice::Append | QIODevice::Text); fprintf(stderr, "%s\n", qPrintable(qFormatLogMessage(type, context, msg))); if ((type != QtDebugMsg) && logFileIsOpen) { QDateTime dateTime(QDateTime::currentDateTime()); QString timeStr(dateTime.toString("dd-MM-yyyy HH:mm:ss:zzz")); logFile.write(timeStr.toUtf8()); switch (type) { case QtInfoMsg: logFile.write(" INFO "); break; case QtDebugMsg: logFile.write(" DEBUG "); break; case QtWarningMsg: logFile.write(" WARN "); break; case QtCriticalMsg: logFile.write(" CRIT "); break; case QtFatalMsg: logFile.write(" FATAL "); break; } logFile.write(qFormatLogMessage(type, context, msg).toUtf8() + '\n'); logFile.flush(); } } int main(int argc, char *argv[]) { QApplication app(argc, argv); QString locale = QLocale::system().name(); qInstallMessageHandler(myMessageOutput); app.setApplicationName("bmsapp"); app.setApplicationVersion(VERSIONSTRING); app.setOrganizationName("mbse"); /* Stylesheet setup */ QFile f(":/qdarkstyle/theme/style.qss"); //QFile f(":dummy"); if (!f.exists()) { printf("Unable to set stylesheet, file not found\n"); } else { f.open(QFile::ReadOnly | QFile::Text); QTextStream ts(&f); qApp->setStyleSheet(ts.readAll()); } /* Setup user ini format */ QSettings::setDefaultFormat(QSettings::IniFormat); /* Setup commandline parser */ QCommandLineParser parser; parser.setApplicationDescription("Brewery Management System Application."); QCommandLineOption const startConfigOption({"c", "config"}, "Start the configuration editor."); parser.addOption(startConfigOption); QCommandLineOption const useDevelopOption({"d", "develop"}, "Use the development database."); parser.addOption(useDevelopOption); parser.addHelpOption(); parser.addVersionOption(); parser.process(app); QString langFile = QString("bmsapp_") + locale; QStringList searchDirs = QStringList() << qApp->applicationDirPath() << qApp->applicationDirPath() + "/../share/bmsapp/translations"; QTranslator translator; for (int i = 0; i < searchDirs.size(); i++) { if (translator.load(langFile, searchDirs[i])) { app.installTranslator(&translator); qDebug() << "lang from" << searchDirs[i]; break; } } qInfo().noquote() << "Starting" << app.applicationName() << app.applicationVersion(); MainWindow w(parser.isSet(useDevelopOption), parser.isSet(startConfigOption)); w.show(); try { auto mainAppReturnValue = app.exec(); qInfo().noquote() << "Finished" << app.applicationName() << app.applicationVersion(); qInfo() << ""; return mainAppReturnValue; } catch (const QString &error) { QMessageBox::critical(0, QApplication::tr("Application terminates"), QApplication::tr("The application encountered a fatal error.\nError message:\n%1").arg(error)); } return EXIT_FAILURE; }