2021-11-20 15:22:22 +00:00
|
|
|
#include "Application.h"
|
2013-12-02 10:09:56 +00:00
|
|
|
|
2016-11-18 15:04:08 +00:00
|
|
|
// #define BREAK_INFINITE_LOOP
|
|
|
|
// #define BREAK_EXCEPTION
|
|
|
|
// #define BREAK_RETURN
|
|
|
|
|
|
|
|
#ifdef BREAK_INFINITE_LOOP
|
|
|
|
#include <thread>
|
|
|
|
#include <chrono>
|
|
|
|
#endif
|
|
|
|
|
2023-06-01 07:49:45 +00:00
|
|
|
#if defined Q_OS_WIN32
|
|
|
|
#ifndef WIN32_LEAN_AND_MEAN
|
|
|
|
#define WIN32_LEAN_AND_MEAN
|
|
|
|
#endif
|
|
|
|
#include <windows.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
namespace {
|
|
|
|
void earlyDebugOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
|
|
|
|
{
|
|
|
|
const char *levels = "DWCFIS";
|
|
|
|
const QString format("EARLY %1 %2\n");
|
|
|
|
QString out = format.arg(levels[type]).arg(msg);
|
|
|
|
QTextStream(stderr) << out.toLocal8Bit();
|
|
|
|
fflush(stderr);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-12-02 10:09:56 +00:00
|
|
|
int main(int argc, char *argv[])
|
|
|
|
{
|
2016-11-18 15:04:08 +00:00
|
|
|
#ifdef BREAK_INFINITE_LOOP
|
2018-07-15 12:51:05 +00:00
|
|
|
while(true)
|
|
|
|
{
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(250));
|
|
|
|
}
|
2016-11-18 15:04:08 +00:00
|
|
|
#endif
|
|
|
|
#ifdef BREAK_EXCEPTION
|
2018-07-15 12:51:05 +00:00
|
|
|
throw 42;
|
2016-11-18 15:04:08 +00:00
|
|
|
#endif
|
|
|
|
#ifdef BREAK_RETURN
|
2018-07-15 12:51:05 +00:00
|
|
|
return 42;
|
2016-11-18 15:04:08 +00:00
|
|
|
#endif
|
|
|
|
|
2023-06-01 07:49:45 +00:00
|
|
|
#if defined Q_OS_WIN32
|
|
|
|
// used on Windows to attach the standard IO streams
|
|
|
|
bool consoleAttached = false;
|
|
|
|
// attach the parent console
|
|
|
|
if(AttachConsole(ATTACH_PARENT_PROCESS))
|
|
|
|
{
|
|
|
|
// if attach succeeds, reopen and sync all the i/o
|
|
|
|
if(freopen("CON", "w", stdout))
|
|
|
|
{
|
|
|
|
std::cout.sync_with_stdio();
|
|
|
|
}
|
|
|
|
if(freopen("CON", "w", stderr))
|
|
|
|
{
|
|
|
|
std::cerr.sync_with_stdio();
|
|
|
|
}
|
|
|
|
if(freopen("CON", "r", stdin))
|
|
|
|
{
|
|
|
|
std::cin.sync_with_stdio();
|
|
|
|
}
|
|
|
|
auto out = GetStdHandle (STD_OUTPUT_HANDLE);
|
|
|
|
DWORD written;
|
|
|
|
const char * endline = "\n";
|
|
|
|
WriteConsole(out, endline, strlen(endline), &written, NULL);
|
|
|
|
consoleAttached = true;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
qInstallMessageHandler(earlyDebugOutput);
|
|
|
|
|
2018-07-15 12:51:05 +00:00
|
|
|
// initialize Qt
|
2021-11-20 15:22:22 +00:00
|
|
|
Application app(argc, argv);
|
2013-12-02 10:09:56 +00:00
|
|
|
|
2023-06-01 07:49:45 +00:00
|
|
|
int result = 1;
|
|
|
|
|
2018-07-15 12:51:05 +00:00
|
|
|
switch (app.status())
|
|
|
|
{
|
2021-11-20 15:22:22 +00:00
|
|
|
case Application::StartingUp:
|
|
|
|
case Application::Initialized:
|
2018-07-15 12:51:05 +00:00
|
|
|
{
|
|
|
|
Q_INIT_RESOURCE(multimc);
|
|
|
|
Q_INIT_RESOURCE(backgrounds);
|
2021-10-17 22:47:02 +00:00
|
|
|
Q_INIT_RESOURCE(documents);
|
|
|
|
Q_INIT_RESOURCE(logo);
|
2016-11-06 20:58:54 +00:00
|
|
|
|
2018-07-15 12:51:05 +00:00
|
|
|
Q_INIT_RESOURCE(pe_dark);
|
|
|
|
Q_INIT_RESOURCE(pe_light);
|
|
|
|
Q_INIT_RESOURCE(pe_blue);
|
|
|
|
Q_INIT_RESOURCE(pe_colored);
|
|
|
|
Q_INIT_RESOURCE(OSX);
|
|
|
|
Q_INIT_RESOURCE(iOS);
|
|
|
|
Q_INIT_RESOURCE(flat);
|
2023-06-01 07:49:45 +00:00
|
|
|
result = app.exec();
|
2018-07-15 12:51:05 +00:00
|
|
|
}
|
2021-11-20 15:22:22 +00:00
|
|
|
case Application::Failed:
|
2023-06-01 07:49:45 +00:00
|
|
|
result = 1;
|
2021-11-20 15:22:22 +00:00
|
|
|
case Application::Succeeded:
|
2023-06-01 07:49:45 +00:00
|
|
|
result = 0;
|
|
|
|
}
|
|
|
|
#if defined Q_OS_WIN32
|
|
|
|
// Detach from Windows console
|
|
|
|
if(consoleAttached)
|
|
|
|
{
|
|
|
|
fclose(stdout);
|
|
|
|
fclose(stdin);
|
|
|
|
fclose(stderr);
|
|
|
|
FreeConsole();
|
2018-07-15 12:51:05 +00:00
|
|
|
}
|
2023-06-01 07:49:45 +00:00
|
|
|
#endif
|
|
|
|
return result;
|
2013-12-02 10:09:56 +00:00
|
|
|
}
|