9#include "app_manager.hpp"
27 QApplication::setApplicationName(Configuration::PROJECT_NAME);
28 QApplication::setOrganizationName(
"eiG");
29 const QString version = QStringLiteral(
"%1.%2.%3")
30 .arg(Configuration::VERSION_MAJOR)
31 .arg(Configuration::VERSION_MINOR)
32 .arg(Configuration::PATCH_VERSION);
33 QApplication::setApplicationVersion(version);
43 bool diagnosticsEnabled =
false;
44 for (
const auto& arg : QApplication::arguments()) {
45 if (arg == QLatin1String(
"-D") ||
46 arg == QLatin1String(
"--diagnostics") ||
47 arg == QLatin1String(
"-c") ||
48 arg == QLatin1String(
"--debugConsole")) {
49 diagnosticsEnabled =
true;
58 auto tr_func = [](
const char* text) {
59 return QCoreApplication::translate(
"CmdLine::CmdLineArgs", text);
76 bridge_ = std::make_unique<Window::QmlBridge>(
77 args_->toSimulationConfig(),
this);
83 QApplication::translate(
"MainWindow",
"Pure C++"));
92 menuBar->addMenu(QApplication::translate(
"MainWindow",
"&File"));
94 fileMenu->addAction(QApplication::translate(
"MainWindow",
"&Quit"));
95 quitAction->setShortcut(QKeySequence::Quit);
96 connect(quitAction, &QAction::triggered,
bridge_.get(),
101 menuBar->addMenu(QApplication::translate(
"MainWindow",
"&Help"));
102 QAction* aboutAction = helpMenu->addAction(
103 QApplication::translate(
"MainWindow",
"About Pure C++"));
104 connect(aboutAction, &QAction::triggered,
bridge_.get(),
106 QAction* aboutQtAction = helpMenu->addAction(
107 QApplication::translate(
"MainWindow",
"About Qt"));
108 connect(aboutQtAction, &QAction::triggered,
bridge_.get(),
114 if (
bridge_->displayContainer()) {
124 mainWindow_, &QMainWindow::close, Qt::QueuedConnection);
128 mainWindow_->setAttribute(Qt::WA_DeleteOnClose,
false);
138 int exitCode = QApplication::exec();
154 using CleanupClock = std::chrono::high_resolution_clock;
155 auto phaseStart = CleanupClock::now();
165 phaseStart = CleanupClock::now();
170 std::chrono::duration<double>(CleanupClock::now() - phaseStart)
183 const bool useFastCleanup =
185 QWidget* container =
bridge_->displayContainer();
186 const auto manualDestroyStart = CleanupClock::now();
188 phaseStart = CleanupClock::now();
191 std::chrono::duration<double>(CleanupClock::now() - phaseStart)
195 phaseStart = CleanupClock::now();
196 if (useFastCleanup) {
199 bridge_->releaseDisplayDeferred(container);
204 std::chrono::duration<double>(CleanupClock::now() - phaseStart)
208 phaseStart = CleanupClock::now();
209 if (useFastCleanup) {
216 std::chrono::duration<double>(CleanupClock::now() - phaseStart)
219 std::chrono::duration<double>(CleanupClock::now() -
224 if (!useFastCleanup) {
225 phaseStart = CleanupClock::now();
226 QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
228 std::chrono::duration<double>(CleanupClock::now() -
Global application profiling instrumentation.
int run()
Runs the main application event loop.
bool setup()
Sets up all application components before running.
QMainWindow * mainWindow_
The main window (stored for proper cleanup order).
void cleanup()
Performs cleanup after the event loop has finished.
std::unique_ptr< AppUtils::Logger > logger_
The logger for the application.
AppManager()
Constructs the application manager and sets application-wide metadata.
std::unique_ptr< Window::QmlBridge > bridge_
The QML bridge for exposing C++ functionality.
std::unique_ptr< CmdLine::CmdLineArgs > args_
The command line arguments for the application.
static void addCleanupAppProcessEvents(double seconds)
Adds measured time spent in AppManager cleanup processEvents.
static void addCleanupAppManualDestroy(double seconds)
Adds measured time for manual destroy operations.
static void startEventLoop()
Starts timing the Qt event loop.
static void printReport()
Prints the profiling report.
static void addCleanupAppBridgeCleanup(double seconds)
Adds measured time spent in bridge/display cleanup call.
static void addCleanupAppDetachContainer(double seconds)
Adds measured time for detaching the display container.
static void stopEventLoop()
Stops timing the Qt event loop.
static void startCleanup()
Starts timing cleanup.
static void addCleanupAppContainerDeleteSchedule(double seconds)
Adds measured time for container delete action.
static void stopWindowCreation()
Stops timing 3D window creation.
static void addCleanupAppReleaseDisplay(double seconds)
Adds measured time for explicit display release.
static void startWindowCreation()
Starts timing 3D window creation.
static void stopCleanup()
Stops timing cleanup.
static void loadTranslations(bool in_diagnosticsEnabled)
Loads and installs the best-matching translation for the system’s locale.
void showAboutQt()
Slot to display the "About Qt" dialogue.
void quit()
Slot to quit the application.
void simulationFinished()
Emitted when the simulation finishes.
void showAbout()
Slot to display the "About" dialogue.
static std::unique_ptr< CmdLineArgs > parse(const QStringList &q_args, const std::function< QString(const char *)> &tr_func)
Parses and validates command-line arguments.