passwordmanager/gui/initiategui.cpp

75 lines
2.1 KiB
C++

#include "./initiategui.h"
#include "./gui/mainwindow.h"
#include "resources/config.h"
#include "resources/qtconfig.h"
#include <QApplication> // ensure QGuiApplication is defined before resources.h for desktop file name
#include <qtutilities/resources/importplugin.h>
#include <qtutilities/resources/qtconfigarguments.h>
#include <qtutilities/resources/resources.h>
#include <qtutilities/settingsdialog/qtsettings.h>
#include <passwordfile/util/openssl.h>
#include <QFile>
#include <QMessageBox>
#include <QSettings>
using namespace CppUtilities;
using namespace QtUtilities;
using namespace Util;
namespace QtGui {
int runWidgetsGui(int argc, char *argv[], const QtConfigArguments &qtConfigArgs, const QString &file)
{
SET_QT_APPLICATION_INFO;
// init OpenSSL
OpenSsl::init();
// init application
auto application = QApplication(argc, argv);
QObject::connect(&application, &QCoreApplication::aboutToQuit, &OpenSsl::clean);
// restore Qt settings
auto qtSettings = QtSettings();
auto settings = QtUtilities::getSettings(QStringLiteral(PROJECT_NAME));
auto settingsError = QtUtilities::errorMessageForSettings(*settings);
qtSettings.disableNotices();
qtSettings.restore(*settings);
qtSettings.apply();
// apply settings specified via command line args
qtConfigArgs.applySettings(qtSettings.hasCustomFont());
LOAD_QT_TRANSLATIONS;
// init widgets GUI
if (!settingsError.isEmpty()) {
QMessageBox::critical(nullptr, QCoreApplication::applicationName(), settingsError);
}
auto w = MainWindow(*settings, &qtSettings);
w.show();
if (!file.isEmpty()) {
w.openFile(file);
}
// start event loop
auto res = application.exec();
// save settings to disk
settings->sync();
if (settingsError.isEmpty()) {
settingsError = QtUtilities::errorMessageForSettings(*settings);
if (!settingsError.isEmpty()) {
QMessageBox::critical(nullptr, QCoreApplication::applicationName(), settingsError);
}
}
return res;
}
} // namespace QtGui