// #include #include #include #include #include #include // #include // #include // #include #include #include #include #include #include #include #include #include // #include #include #include // #include #include #include #include #include #include #include #include // #include // #include "cpp/mpv/mpvitem.h" // #include "cpp/mpv/mpvproperties.h" // RUST #include #include #include #include #include #include #include #include #include #include #include #include #include static QWindow *windowFromEngine(QQmlApplicationEngine *engine) { const auto rootObjects = engine->rootObjects(); auto *window = qobject_cast(rootObjects.first()); Q_ASSERT(window); return window; } int main(int argc, char *argv[]) { // qDebug() << QSurfaceFormat::defaultFormat(); QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("video-display"))); QtWebEngineQuick::initialize(); QGuiApplication app(argc, argv); // KLocalizedString::setApplicationDomain("lumina"); // KAboutData about; // about.setComponentName(QStringLiteral("lumina")); // about.setDisplayName(i18n("lumina")); // about.setVersion(QByteArray("0.1")); // about.setShortDescription(i18n("A churchpresentation app build with KDE tech.")); // about.setLicense(KAboutLicense::GPL_V3); // overwrite default-generated values of organizationDomain & desktopFileName // about.setOrganizationDomain("tfcconnection.org"); // about.setDesktopFileName(QStringLiteral("org.tfcconneciton.lumina")); QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL); // set the application metadata // KAboutData::setApplicationData(about); QCoreApplication::setOrganizationName(QStringLiteral("lumina")); QCoreApplication::setOrganizationDomain(QStringLiteral("tfcconnection.org")); QCoreApplication::setApplicationName(QStringLiteral("lumina")); qSetMessagePattern(QString::fromUtf8("%{category}: %{time h:m:s ap} %{type} %{function}: %{message}\n %{file}")); #ifdef Q_OS_WINDOWS QIcon::setFallbackThemeName(QStringLiteral("breeze")); QQuickStyle::setStyle(QStringLiteral("org.kde.breeze")); // QApplication::setStyle(QStringLiteral("breeze")); #else QIcon::setFallbackThemeName(QStringLiteral("breeze")); QQuickStyle::setStyle(QStringLiteral("org.kde.desktop")); QQuickStyle::setFallbackStyle(QStringLiteral("Default")); #endif // qDebug() << QQuickStyle::availableStyles(); qDebug() << QIcon::themeName(); // qDebug() << QApplication::platformName(); //Need to instantiate our slide QScopedPointer slideModel(new SlideModel); QScopedPointer serviceItemModel(new ServiceItemModel); QScopedPointer slideobject(new SlideObject); QScopedPointer obsModel(new ObsModel); obsModel.get()->getObs(); obsModel.get()->updateScenes(); slideModel.get()->setSlideObject(slideobject.get()); Settings *settings = new Settings; settings->setup(); QQuickView *PresWindow = new QQuickView; PresWindow->setSource(QUrl(QStringLiteral("qrc:qml/presenter/PresentationWindow.qml"))); qDebug() << PresWindow; qDebug() << PresWindow->isVisible(); QObject::connect(serviceItemModel.get(), &ServiceItemModel::itemAdded, slideModel.get(), &SlideModel::addItemFromService); QObject::connect(serviceItemModel.get(), &ServiceItemModel::itemInserted, slideModel.get(), &SlideModel::insertItemFromService); QObject::connect(serviceItemModel.get(), &ServiceItemModel::itemMoved, slideModel.get(), &SlideModel::moveItemFromService); QObject::connect(serviceItemModel.get(), &ServiceItemModel::itemRemoved, slideModel.get(), &SlideModel::removeItemFromService); QObject::connect(serviceItemModel.get(), &ServiceItemModel::cleared, slideModel.get(), &SlideModel::clear); QObject::connect(slideobject.get(), SIGNAL(slideChanged(int)), slideModel.get(), SLOT(activate(int))); Utils *utils = new Utils; utils->setup(); // qDebug() << utils.get(); if (!serviceItemModel.get()->load(settings->getLastSaveFile())) { qDebug() << "Last saved file is missing or there isn't a last saved file."; serviceItemModel.get()->addItem(QString::fromUtf8("Black"), QString::fromUtf8("image"), 0); } // apparently mpv needs this class set // let's register mpv as well std::setlocale(LC_NUMERIC, "C"); // qmlRegisterType("mpv", 1, 0, "MpvItem"); // qmlRegisterSingletonInstance("org.presenter", 1, 0, "MpvProperties", MpvProperties::self()); qDebug() << "IDKFd"; qDebug() << serviceItemModel.get()->rowCount(QModelIndex()); //register our models qmlRegisterType("org.presenter", 1, 0, "SongModel"); qmlRegisterType("org.presenter", 1, 0, "SongEditor"); qmlRegisterType("org.presenter", 1, 0, "VideoModel"); qmlRegisterType("org.presenter", 1, 0, "ImageModel"); qmlRegisterType("org.presenter", 1, 0, "PresentationModel"); qmlRegisterType("org.presenter", 1, 0, "FileHelper"); qmlRegisterType("org.presenter", 1, 0, "Ytdl"); // qmlRegisterType("mpv", 1, 0, "MpvItem"); // qmlRegisterSingletonInstance("mpv", 1, 0, "MpvProperties", MpvProperties::self()); qmlRegisterSingletonInstance("org.presenter", 1, 0, "ServiceItemModel", serviceItemModel.get()); qmlRegisterSingletonInstance("org.presenter", 1, 0, "SlideModel", slideModel.get()); qmlRegisterSingletonInstance("org.presenter", 1, 0, "Utils", utils); qmlRegisterSingletonInstance("org.presenter", 1, 0, "SlideObject", slideobject.get()); qmlRegisterSingletonInstance("org.presenter", 1, 0, "RSettings", settings); qmlRegisterSingletonInstance("org.presenter", 1, 0, "ObsModel", obsModel.get()); qmlRegisterSingletonInstance("org.presenter", 1, 0, "PresWindow", PresWindow); // This is the same slideobject, however to enusre that the PresWindow can have it // we need to set it as a separate context so that it can change it's slides too. // This is because SlideObject singleton is started before the window is shown // thus it doesn't exist in this window's context. So we set it here. PresWindow->rootContext()->setContextProperty(QStringLiteral("SlideObj"), slideobject.get()); PresWindow->setTitle(QStringLiteral("presentation-window")); qDebug() << "Starting engine"; QQmlApplicationEngine engine; qDebug() << app.allWindows(); // engine.rootContext()->setContextObject(new KLocalizedContext(&engine)); engine.load(QUrl(QStringLiteral("qrc:qml/main.qml"))); qDebug() << "Engine loaded"; qDebug() << app.topLevelWindows(); qDebug() << app.allWindows(); #ifdef STATIC_KIRIGAMI KirigamiPlugin::getInstance().registerTypes(); #endif if (engine.rootObjects().isEmpty()) { return -1; } QWindow *window = windowFromEngine(&engine); window->setIcon(QIcon::fromTheme(QStringLiteral("system-config-display"))); // KWindowSystem::setMainWindow(window); // KWindowSystem::activateWindow(window); // qDebug() << "00000000000000000000000000000000"; // qDebug() << KWindowSystem::isPlatformWayland(); // qDebug() << KWindowSystem::windows(); // qDebug() << "00000000000000000000000000000000"; return app.exec(); }