#include "widget.h" #include "main.h" #include "xx.h" #include "bus.h" #include #include #include #include namespace { bool _testMode, _autoSetup, _showGui, _backgroundMode, _wakeup, _center; } namespace CommandLine { bool testMode() { return _testMode; } bool autoSetup() { return _autoSetup; } bool showGui() { return _showGui; } bool backgroundMode() { return _backgroundMode; } bool wakeup() { return _wakeup; } bool center() { return _center; } } static void parseCommandLine(const QCoreApplication &a); int main(int argc, char *argv[]) { QCoreApplication *a; bool gui = true; for (int i = 0; i < argc; ++i) { if (strcmp(argv[i], "-w") == 0 || strcmp(argv[i], "--wakeup") == 0) { gui = false; } } if (gui) { a = new QApplication(argc, argv); } else { a = new QCoreApplication(argc, argv); } QCoreApplication::setApplicationName("BeamerGUI XP - Home Edition"); QCoreApplication::setApplicationVersion("2.0"); // System strings QTranslator *qtTranslator = new QTranslator(a); qtTranslator->load(QLocale::system(), "qt", "_", QLibraryInfo::location(QLibraryInfo::TranslationsPath)); a->installTranslator(qtTranslator); // App specific QTranslator *translator = new QTranslator(a); translator->load(QLocale::system(), ":"); a->installTranslator(translator); parseCommandLine(*a); if (CommandLine::wakeup()) { return Bus::inst()->registerService() ? 0 : 1; } ScreenSetup::inst()->addMissingEdidResolutions(); ScreenSetup::inst()->initModes(); if (CommandLine::center()) { ScreenSetup::inst()->setCenteredClone(); } else if (CommandLine::autoSetup()) { ScreenMode mode; ScreenSetup::inst()->setDefaultMode(CommandLine::testMode(), mode); } else { ScreenSetup::inst()->getCurrentMode(); } Widget *w = nullptr; if (CommandLine::backgroundMode() || CommandLine::showGui()) { w = new Widget(); if (CommandLine::showGui() || ScreenSetup::inst()->hasScreenWithoutEdid()) { w->show(); } } if (w == nullptr) return 0; return a->exec(); } static void parseCommandLine(const QCoreApplication &a) { // Command line QCommandLineParser parser; parser.setApplicationDescription("Utility for detecting and configuring screen setup"); parser.addHelpOption(); parser.addVersionOption(); // Option for adding modes and trying to auto-setup QCommandLineOption oAutoSetup(QStringList() << "a" << "auto", QCoreApplication::translate("main", "Automatically configure modes and set up screens.")); parser.addOption(oAutoSetup); // Show config GUI if more than one screen QCommandLineOption oShowGui(QStringList() << "g" << "gui", QCoreApplication::translate("main", "Show config GUI right away.")); parser.addOption(oShowGui); // Keep running and detect screen setup changes QCommandLineOption oBackground(QStringList() << "b" << "background", QCoreApplication::translate("main", "Keep running in background and show GUI when number of screens changes.")); parser.addOption(oBackground); // Test mode -- pretend to do setup QCommandLineOption oTest(QStringList() << "t" << "test", QCoreApplication::translate("main", "Test mode, don't actually apply any changes.")); //parser.addOption(oTest); TODO Not fully implemented so disabled for now // Wakeup beamergui daemon via DBus connect QCommandLineOption oWakeup(QStringList() << "w" << "wakeup", QCoreApplication::translate("main", "Connect to system bus to trigger wakeup of wainting beamergui.")); parser.addOption(oWakeup); // Set all outputs to clone mode and center them according to the largest output QCommandLineOption oCenter(QStringList() << "c" << "center", QCoreApplication::translate("main", "Set all outputs to clone mode. If size differs, center outputs according to largest output.")); parser.addOption(oCenter); // PARSE parser.process(a); _testMode = parser.isSet(oTest); _autoSetup = parser.isSet(oAutoSetup); _showGui = parser.isSet(oShowGui); _backgroundMode = parser.isSet(oBackground); _wakeup = parser.isSet(oWakeup); _center = parser.isSet(oCenter); }