// Copyright (c) 2011-2015 The Cryptonote developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include #include #include #include #include #include #include #include "CommandLineParser.h" #include "CurrencyAdapter.h" #include "LoggerAdapter.h" #include "NodeAdapter.h" #include "Settings.h" #include "SignalHandler.h" #include "WalletAdapter.h" #include "gui/MainWindow.h" #define DEBUG 1 using namespace WalletGui; int main(int argc, char* argv[]) { QApplication app(argc, argv); app.setApplicationName(CurrencyAdapter::instance().getCurrencyName() + "wallet"); app.setApplicationVersion(Settings::instance().getVersion()); app.setQuitOnLastWindowClosed(false); #ifndef Q_OS_MAC QApplication::setStyle(QStyleFactory::create("Fusion")); #endif CommandLineParser cmdLineParser(nullptr); Settings::instance().setCommandLineParser(&cmdLineParser); bool cmdLineParseResult = cmdLineParser.process(app.arguments()); Settings::instance().load(); #ifdef Q_OS_WIN if(!cmdLineParseResult) { QMessageBox::critical(nullptr, QObject::tr("Error"), cmdLineParser.getErrorText()); return app.exec(); } else if (cmdLineParser.hasHelpOption()) { QMessageBox::information(nullptr, QObject::tr("Help"), cmdLineParser.getHelpText()); return app.exec(); } #endif LoggerAdapter::instance().init(); QString dataDirPath = Settings::instance().getDataDir().absolutePath(); if (!QDir().exists(dataDirPath)) { QDir().mkpath(dataDirPath); } QLockFile lockFile(Settings::instance().getDataDir().absoluteFilePath(QApplication::applicationName() + ".lock")); if (!lockFile.tryLock()) { QMessageBox::warning(nullptr, QObject::tr("Fail"), QString("%1 wallet already running").arg(CurrencyAdapter::instance().getCurrencyDisplayName())); return 0; } QLocale::setDefault(QLocale::c()); SignalHandler::instance().init(); QObject::connect(&SignalHandler::instance(), &SignalHandler::quitSignal, &app, &QApplication::quit); QSplashScreen* splash = new QSplashScreen(QPixmap(":images/splash"), Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint); if (!splash->isVisible()) { splash->show(); } splash->showMessage(QObject::tr("Loading blockchain..."), Qt::AlignLeft | Qt::AlignBottom, Qt::white); app.processEvents(); qRegisterMetaType("CryptoNote::TransactionId"); qRegisterMetaType("quintptr"); if (!NodeAdapter::instance().init()) { return 0; } splash->finish(&MainWindow::instance()); MainWindow::instance().show(); WalletAdapter::instance().open(""); QObject::connect(QApplication::instance(), &QApplication::aboutToQuit, []() { MainWindow::instance().quit(); if (WalletAdapter::instance().isOpen()) { WalletAdapter::instance().close(); } NodeAdapter::instance().deinit(); }); return app.exec(); }