File indexing completed on 2024-05-05 17:32:16
0001 /* 0002 0003 SPDX-FileCopyrightText: 2011-2015 Sebastian Kügler <sebas@kde.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 // std 0009 #include <iomanip> 0010 #include <iostream> 0011 0012 // own 0013 #include "module.h" 0014 #include "modulesproxymodel.h" 0015 #include "settingsapp.h" 0016 #include "version.h" 0017 0018 // Qt 0019 #include <QApplication> 0020 #include <QCommandLineOption> 0021 #include <QCommandLineParser> 0022 #include <QDebug> 0023 #include <QIcon> 0024 #include <QQmlApplicationEngine> 0025 #include <QQmlContext> 0026 0027 // Frameworks 0028 #include <KAboutData> 0029 #include <KLocalizedContext> 0030 #include <KLocalizedString> 0031 #include <KPluginMetaData> 0032 0033 int main(int argc, char **argv) 0034 { 0035 QApplication app(argc, argv); 0036 0037 KLocalizedString::setApplicationDomain("mobile.plasma-settings"); 0038 0039 // About data 0040 KAboutData aboutData("org.kde.mobile.plasmasettings", 0041 i18n("Settings"), 0042 QStringLiteral(PLASMA_SETTINGS_VERSION_STRING), 0043 i18n("Touch-friendly settings application."), 0044 KAboutLicense::GPL, 0045 i18n("Copyright 2011-2015, Sebastian Kügler")); 0046 aboutData.addAuthor(i18n("Sebastian Kügler"), i18n("Maintainer"), "sebas@kde.org"); 0047 aboutData.addAuthor(i18n("Marco Martin"), i18n("Maintainer"), "mart@kde.org"); 0048 aboutData.setDesktopFileName("org.kde.mobile.plasmasettings"); 0049 KAboutData::setApplicationData(aboutData); 0050 0051 QApplication::setWindowIcon(QIcon::fromTheme("preferences-system")); 0052 0053 QCommandLineParser parser; 0054 0055 const QCommandLineOption listOption({QStringLiteral("l"), QStringLiteral("list")}, i18n("List available settings modules")); 0056 const QCommandLineOption formfactorOption( 0057 {QStringLiteral("x"), QStringLiteral("formfactor")}, 0058 i18n("Limit to modules suitable for <formfactor>, e.g. handset, tablet, mediacenter, desktop, test, all (default handset)"), 0059 i18n("formfactor")); 0060 const QCommandLineOption moduleOption({QStringLiteral("m"), QStringLiteral("module")}, i18n("Settings module to open"), i18n("modulename")); 0061 const QCommandLineOption singleModuleOption({QStringLiteral("s"), QStringLiteral("singleModule")}, i18n("Only show a single module, requires --module")); 0062 const QCommandLineOption fullscreenOption({QStringLiteral("f"), QStringLiteral("fullscreen")}, i18n("Start window fullscreen")); 0063 const QCommandLineOption layoutOption(QStringLiteral("layout"), i18n("Package to use for the UI (default org.kde.mobile.settings)"), i18n("packagename")); 0064 0065 parser.addOption(listOption); 0066 parser.addOption(formfactorOption); 0067 parser.addOption(moduleOption); 0068 parser.addOption(singleModuleOption); 0069 parser.addOption(fullscreenOption); 0070 parser.addOption(layoutOption); 0071 aboutData.setupCommandLine(&parser); 0072 0073 parser.process(app); 0074 aboutData.processCommandLine(&parser); 0075 0076 if (parser.isSet(listOption)) { 0077 int nameWidth = 24; 0078 QSet<QString> seen; 0079 std::cout << std::setfill('.'); 0080 0081 auto formfactor = parser.value(formfactorOption); 0082 0083 const auto plugins = KPluginMetaData::findPlugins("kcms") 0084 << KPluginMetaData::findPlugins("plasma/kcms") << KPluginMetaData::findPlugins("plasma/kcms/systemsettings"); 0085 for (const auto &plugin : plugins) { 0086 if (seen.contains(plugin.pluginId())) { 0087 continue; 0088 } 0089 // Filter out modules that are not explicitly suitable for the "handset" formfactor 0090 // const QStringList &formFactors = plugin.formFactors(); 0091 if (!formfactor.isEmpty() && !plugin.formFactors().contains(formfactor) && formfactor != QStringLiteral("all")) { 0092 continue; 0093 } 0094 const int len = plugin.pluginId().length(); 0095 if (len > nameWidth) { 0096 nameWidth = len; 0097 } 0098 0099 seen << plugin.pluginId(); 0100 std::cout << plugin.pluginId().toLocal8Bit().data() << ' ' << std::setw(nameWidth - plugin.pluginId().length() + 2) << '.' << ' ' 0101 << plugin.description().toLocal8Bit().data() << std::endl; 0102 0103 // qDebug() << "Formafactors: " << formFactors; 0104 } 0105 0106 const auto kcmPlugin = KPluginMetaData::findPlugins("kcms") 0107 << KPluginMetaData::findPlugins("plasma/kcms") << KPluginMetaData::findPlugins("plasma/kcms/systemsettings"); 0108 for (const auto &plugin : kcmPlugin) { 0109 if (seen.contains(plugin.pluginId())) { 0110 continue; 0111 } 0112 if (!formfactor.isEmpty() && !plugin.formFactors().contains(formfactor) && formfactor != QStringLiteral("all")) { 0113 continue; 0114 } 0115 const int len = plugin.pluginId().length(); 0116 if (len > nameWidth) { 0117 nameWidth = len; 0118 } 0119 std::cout << plugin.pluginId().toLocal8Bit().data() << ' ' << std::setw(nameWidth - plugin.pluginId().length() + 2) << '.' << ' ' 0120 << plugin.description().toLocal8Bit().data() << std::endl; 0121 } 0122 0123 return 0; 0124 } 0125 0126 const QString module = parser.value(moduleOption); 0127 const bool singleModule = parser.isSet(singleModuleOption); 0128 0129 if (singleModule && module.isEmpty()) { 0130 parser.showHelp(); 0131 return 0; 0132 } 0133 0134 auto *settingsApp = new SettingsApp(parser); 0135 settingsApp->setStartModule(module); 0136 settingsApp->setSingleModule(singleModule); 0137 0138 qmlRegisterType<ModulesProxyModel>("org.kde.plasma.settings", 0, 1, "ModulesProxyModel"); 0139 qmlRegisterType<Module>("org.kde.plasma.settings", 0, 1, "Module"); 0140 qmlRegisterSingletonInstance<SettingsApp>("org.kde.plasma.settings", 0, 1, "SettingsApp", settingsApp); 0141 0142 QQmlApplicationEngine engine; 0143 engine.rootContext()->setContextObject(new KLocalizedContext(&engine)); 0144 engine.load(QUrl(QStringLiteral("qrc:/qml/main.qml"))); 0145 0146 return app.exec(); 0147 }