6 #if defined(HAVE_CONFIG_H) 43 #include <boost/filesystem/operations.hpp> 44 #include <boost/thread.hpp> 46 #include <QApplication> 48 #include <QLibraryInfo> 50 #include <QMessageBox> 55 #include <QTranslator> 56 #include <QSslConfiguration> 58 #if defined(QT_STATICPLUGIN) 60 #if QT_VERSION < 0x050000 61 Q_IMPORT_PLUGIN(qcncodecs)
62 Q_IMPORT_PLUGIN(qjpcodecs)
63 Q_IMPORT_PLUGIN(qtwcodecs)
64 Q_IMPORT_PLUGIN(qkrcodecs)
65 Q_IMPORT_PLUGIN(qtaccessiblewidgets)
67 #if QT_VERSION < 0x050400 68 Q_IMPORT_PLUGIN(AccessibleFactory)
70 #if defined(QT_QPA_PLATFORM_XCB) 71 Q_IMPORT_PLUGIN(QXcbIntegrationPlugin);
72 #elif defined(QT_QPA_PLATFORM_WINDOWS) 73 Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin);
74 #elif defined(QT_QPA_PLATFORM_COCOA) 75 Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin);
80 #if QT_VERSION < 0x050000 85 Q_DECLARE_METATYPE(
bool*)
98 return QCoreApplication::translate(
"dash-core", psz).toStdString();
106 QString lang_territory = QLocale::system().name();
108 QString lang_territory_qsettings =
settings.value(
"language",
"").toString();
109 if(!lang_territory_qsettings.isEmpty())
110 lang_territory = lang_territory_qsettings;
112 lang_territory = QString::fromStdString(
GetArg(
"-lang", lang_territory.toStdString()));
113 return lang_territory;
117 static void initTranslations(QTranslator &qtTranslatorBase, QTranslator &qtTranslator, QTranslator &translatorBase, QTranslator &translator)
120 QApplication::removeTranslator(&qtTranslatorBase);
121 QApplication::removeTranslator(&qtTranslator);
122 QApplication::removeTranslator(&translatorBase);
123 QApplication::removeTranslator(&translator);
130 QString lang = lang_territory;
131 lang.truncate(lang_territory.lastIndexOf(
'_'));
138 if (qtTranslatorBase.load(
"qt_" + lang, QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
139 QApplication::installTranslator(&qtTranslatorBase);
142 if (qtTranslator.load(
"qt_" + lang_territory, QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
143 QApplication::installTranslator(&qtTranslator);
146 if (translatorBase.load(lang,
":/translations/"))
147 QApplication::installTranslator(&translatorBase);
150 if (translator.load(lang_territory,
":/translations/"))
151 QApplication::installTranslator(&translator);
155 #if QT_VERSION < 0x050000 158 const char *category = (type == QtDebugMsg) ?
"qt" : NULL;
165 const char *category = (type == QtDebugMsg) ?
"qt" : NULL;
166 LogPrint(category,
"GUI: %s\n",
msg.toStdString());
182 void restart(QStringList args);
209 void createPaymentServer();
281 qDebug() << __func__ <<
": Running AppInit2 in thread";
284 }
catch (
const std::exception& e) {
297 qDebug() << __func__ <<
": Running Restart in thread";
301 qDebug() << __func__ <<
": Shutdown finished";
304 QProcess::startDetached(QApplication::applicationFilePath(), args);
305 qDebug() << __func__ <<
": Restart initiated...";
306 QApplication::quit();
307 }
catch (std::exception& e) {
319 qDebug() << __func__ <<
": Running Shutdown in thread";
323 qDebug() << __func__ <<
": Shutdown finished";
325 }
catch (
const std::exception& e) {
333 QApplication(argc, argv),
338 pollShutdownTimer(0),
345 setQuitOnLastWindowClosed(
false);
350 std::string platformName;
362 qDebug() << __func__ <<
": Stopping thread";
365 qDebug() << __func__ <<
": Stopped thread";
371 delete paymentServer;
387 void BitcoinApplication::createPaymentServer()
413 connect(
this, SIGNAL(
splashFinished(QWidget*)), splash, SLOT(slotFinish(QWidget*)));
433 connect(
this, SIGNAL(
stopThread()), executor, SLOT(deleteLater()));
447 qDebug() << __func__ <<
": Requesting initialize";
459 qDebug() << __func__ <<
": Requesting shutdown";
466 window->removeAllWallets();
479 qDebug() << __func__ <<
": Initialization result: " <<
retval;
523 connect(
window, SIGNAL(receivedURI(QString)),
524 paymentServer, SLOT(handleURIOrFile(QString)));
525 connect(paymentServer, SIGNAL(message(QString,QString,
unsigned int)),
526 window, SLOT(message(QString,QString,
unsigned int)));
527 QTimer::singleShot(100, paymentServer, SLOT(uiReady()));
536 qDebug() << __func__ <<
": Shutdown result: " <<
retval;
542 QMessageBox::critical(0,
"Runaway exception", BitcoinGUI::tr(
"A fatal error occurred. Dash Core can no longer continue safely and will quit.") + QString(
"\n\n") + message);
543 ::exit(EXIT_FAILURE);
554 #ifndef BITCOIN_QT_TEST 555 int main(
int argc,
char *argv[])
566 #if QT_VERSION < 0x050000 568 QTextCodec::setCodecForTr(QTextCodec::codecForName(
"UTF-8"));
569 QTextCodec::setCodecForCStrings(QTextCodec::codecForTr());
572 Q_INIT_RESOURCE(dash);
573 Q_INIT_RESOURCE(dash_locale);
576 #if QT_VERSION > 0x050100 578 QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
581 QApplication::setAttribute(Qt::AA_DontShowIconsInMenus);
583 #if QT_VERSION >= 0x050500 586 QSslConfiguration sslconf = QSslConfiguration::defaultConfiguration();
587 sslconf.setProtocol(QSsl::TlsV1_0OrLater);
588 QSslConfiguration::setDefaultConfiguration(sslconf);
592 qRegisterMetaType< bool* >();
595 qRegisterMetaType< CAmount >(
"CAmount");
607 QTranslator qtTranslatorBase, qtTranslator, translatorBase, translator;
608 initTranslations(qtTranslatorBase, qtTranslator, translatorBase, translator);
626 if (!boost::filesystem::is_directory(
GetDataDir(
false)))
628 QMessageBox::critical(0, QObject::tr(
"Dash Core"),
629 QObject::tr(
"Error: Specified data directory \"%1\" does not exist.").arg(QString::fromStdString(
mapArgs[
"-datadir"])));
634 }
catch (
const std::exception& e) {
635 QMessageBox::critical(0, QObject::tr(
"Dash Core"),
636 QObject::tr(
"Error: Cannot parse configuration file: %1. Only use key=value syntax.").arg(e.what()));
649 }
catch(std::exception &e) {
650 QMessageBox::critical(0, QObject::tr(
"Dash Core"), QObject::tr(
"Error: %1").arg(e.what()));
659 assert(!networkStyle.isNull());
663 initTranslations(qtTranslatorBase, qtTranslator, translatorBase, translator);
669 QMessageBox::critical(0, QObject::tr(
"Dash Core"),
670 QObject::tr(
"Error reading masternode configuration file: %1").arg(strErr.c_str()));
685 app.createPaymentServer();
691 #if QT_VERSION < 0x050000 695 #if defined(Q_OS_WIN) 697 qApp->installNativeEventFilter(
new WinShutdownMonitor());
717 #if defined(Q_OS_WIN) && QT_VERSION >= 0x050000 718 WinShutdownMonitor::registerShutdownBlockReason(QObject::tr(
"Dash Core didn't yet exit safely..."), (HWND)app.
getMainWinId());
723 }
catch (
const std::exception& e) {
732 #endif // BITCOIN_QT_TEST void restart(QStringList args)
const boost::filesystem::path & GetDataDir(bool fNetSpecific)
int getReturnValue()
Get process return value.
void SubstituteFonts(const QString &language)
static void pickDataDirectory()
bool AppInit2(boost::thread_group &threadGroup, CScheduler &scheduler)
boost::signals2::signal< void(const std::string &message)> InitMessage
void InitLogging()
Initialize the logging infrastructure.
CMasternodeConfig masternodeConfig
void initializeResult(int retval)
static void callCleanup()
const PlatformStyle * platformStyle
void handleRunawayException(const std::exception *e)
Pass fatal exception message to UI thread.
static QString GetLangTerritory()
bool read(std::string &strErr)
void PrintExceptionContinue(const std::exception *pex, const char *pszThread)
BitcoinApplication(int &argc, char **argv)
static void InitMessage(const std::string &message)
static const bool DEFAULT_SPLASHSCREEN
boost::signals2::signal< std::string(const char *psz)> Translate
void shutdownResult(int retval)
static bool ipcSendCommandLine()
void setClientModel(ClientModel *clientModel)
static const QString DEFAULT_WALLET
QTimer * pollShutdownTimer
void requestedRestart(QStringList args)
bool execute_restart
Flag indicating a restart.
void splashFinished(QWidget *window)
void InitParameterInteraction()
Parameter interaction: change current parameters depending on various rules.
CTranslationInterface translationInterface
void createOptionsModel(bool resetSettings)
Create options model.
bool GetBoolArg(const std::string &strArg, bool fDefault)
boost::thread_group threadGroup
void requestedInitialize()
void createSplashScreen(const NetworkStyle *networkStyle)
Create splash screen.
static int LogPrint(const char *category, const char *format)
void Interrupt(boost::thread_group &threadGroup)
void SelectParams(const std::string &network)
OptionsModel * optionsModel
CClientUIInterface uiInterface
int main(int argc, char *argv[])
void shutdownResult(int retval)
void ParseParameters(int argc, const char *const argv[])
void requestShutdown()
Request core shutdown.
void DebugMessageHandler(QtMsgType type, const char *msg)
static const NetworkStyle * instantiate(const QString &networkId)
static QWidget * showShutdownWindow(BitcoinGUI *window)
static const std::string DEFAULT_UIPLATFORM
static void LoadRootCAs(X509_STORE *store=NULL)
#define QAPP_APP_NAME_DEFAULT
void initializeResult(int retval)
ClientModel * clientModel
void ReadConfigFile(map< string, string > &mapSettingsRet, map< string, vector< string > > &mapMultiSettingsRet)
static const int TOOLTIP_WRAP_THRESHOLD
void parameterSetup()
parameter interaction/setup based on rules
static void ipcParseCommandLine(int argc, char *argv[])
const CChainParams & Params()
void handleRunawayException(const QString &message)
Handle runaway exceptions. Shows a message box with the problem and quits the program.
std::string ChainNameFromCommandLine()
void requestInitialize()
Request core initialization.
static std::string Translate(const char *psz)
std::string GetArg(const std::string &strArg, const std::string &strDefault)
std::unique_ptr< QWidget > shutdownWindow
static void initTranslations(QTranslator &qtTranslatorBase, QTranslator &qtTranslator, QTranslator &translatorBase, QTranslator &translator)
map< string, vector< string > > mapMultiArgs
void createWindow(const NetworkStyle *networkStyle)
Create main window.
void runawayException(const QString &message)
WId getMainWinId() const
Get window identifier of QMainWindow (BitcoinGUI)
UniValue help(const UniValue ¶ms, bool fHelp)
map< string, string > mapArgs