// ************************************************************************************************ // // BornAgain: simulate and fit reflection and scattering // //! @file App/main.cpp //! @brief Main function of the whole GUI //! //! @homepage http://www.bornagainproject.org //! @license GNU General Public License v3 or higher (see COPYING) //! @copyright Forschungszentrum Jülich GmbH 2018 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS) // // ************************************************************************************************ #include "App/AppOptions.h" #include "App/MessageHandler.h" #include "GUI/Application/ApplicationSettings.h" #include "GUI/Model/State/SessionData.h" #include "GUI/Util/OSInfo.h" #include "GUI/Util/Path.h" #include "GUI/View/Global/Globals.h" #include "GUI/View/Loaders/DataLoaderUtil.h" #include "GUI/View/Main/MainWindow.h" #include "config_build.h" #include <QDir> #include <QIcon> #include <QLocale> #include <QMessageBox> #include <QMetaType> #include <boost/exception/diagnostic_information.hpp> void messageHandler(QtMsgType, const QMessageLogContext&, const QString&) {} int main(int argc, char* argv[]) { ApplicationOptions options(argc, argv); if (!options.isConsistent()) return 0; QLocale::setDefault(QLocale(QLocale::English, QLocale::UnitedStates)); qRegisterMetaType<QVector<double>>("QVector<double>"); if (!options.disableHighDPISupport()) QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); QApplication app(argc, argv); QApplication::setApplicationName("BornAgain"); QApplication::setApplicationVersion(GUI::Util::Path::getBornAgainVersionString()); QApplication::setOrganizationName("BornAgain"); if (!GUI::Util::OS::HostOsInfo::isMacHost()) QApplication::setWindowIcon(QIcon(":/images/BornAgain.ico")); ApplicationSettings applicationSettings; SessionData GSession; int result; #if !defined(BUILD_DEBUG) try { #endif qInstallMessageHandler(MessageHandler); register1DDataLoaders(); auto style = applicationSettings.styleToUse(); applicationSettings.loadStyle(style); QString dir = GUI::Util::Path::appDataFolder(); if (!QDir().exists(dir)) QDir().mkpath(dir); GSession.instrumentLibrary.load(); MainWindow win; GUI::Global::mainWindow = &win; if (options.find("geometry")) win.resize(options.mainWindowSize()); win.show(); result = QApplication::exec(); GSession.instrumentLibrary.saveIfModified(); #if !defined(BUILD_DEBUG) } catch (...) { QMessageBox box; box.setWindowTitle("Fatal error"); box.setIcon(QMessageBox::Critical); box.setText("BornAgain encountered a fatal error and can't continue execution.\n\n" "Diagnostics of error:\n" + QString::fromStdString(boost::current_exception_diagnostic_information())); box.addButton("Acknowledge", QMessageBox::AcceptRole); box.exec(); result = EXIT_FAILURE; } #endif return result; }