File indexing completed on 2024-06-02 05:42:16

0001 // SPDX-FileCopyrightText: 2015 Marco Martin <mart@kde.org>
0002 // SPDX-FileCopyrightText: 2022-2023 Devin Lin <devin@kde.org>
0003 // SPDX-License-Identifier: GPL-2.0-or-later
0004 
0005 #include "homescreen.h"
0006 
0007 #include "applicationlistmodel.h"
0008 #include "delegatetoucharea.h"
0009 #include "favouritesmodel.h"
0010 #include "folioapplication.h"
0011 #include "folioapplicationfolder.h"
0012 #include "foliodelegate.h"
0013 #include "foliosettings.h"
0014 #include "foliowidget.h"
0015 #include "homescreenstate.h"
0016 #include "pagelistmodel.h"
0017 #include "pagemodel.h"
0018 #include "widgetcontainer.h"
0019 #include "widgetsmanager.h"
0020 
0021 #include <KWindowSystem>
0022 
0023 #include <QDebug>
0024 #include <QQmlEngine>
0025 #include <QQmlExtensionPlugin>
0026 #include <QQuickItem>
0027 #include <QtQml>
0028 
0029 HomeScreen::HomeScreen(QObject *parent, const KPluginMetaData &data, const QVariantList &args)
0030     : Plasma::Containment{parent, data, args}
0031 {
0032     setHasConfigurationInterface(true);
0033     const char *uri = "org.kde.private.mobile.homescreen.folio";
0034 
0035     // pre-initialize
0036     FolioSettings::self()->setApplet(this);
0037     HomeScreenState::self()->setContainment(this);
0038     WidgetsManager::self();
0039 
0040     // models are loaded in main.qml
0041     ApplicationListModel::self();
0042     FavouritesModel::self()->setContainment(this);
0043     PageListModel::self()->setContainment(this);
0044 
0045     qmlRegisterSingletonType<ApplicationListModel>(uri, 1, 0, "ApplicationListModel", [](QQmlEngine *, QJSEngine *) -> QObject * {
0046         return ApplicationListModel::self();
0047     });
0048 
0049     qmlRegisterSingletonType<FavouritesModel>(uri, 1, 0, "FavouritesModel", [](QQmlEngine *, QJSEngine *) -> QObject * {
0050         return FavouritesModel::self();
0051     });
0052 
0053     qmlRegisterSingletonType<PageListModel>(uri, 1, 0, "PageListModel", [](QQmlEngine *, QJSEngine *) -> QObject * {
0054         return PageListModel::self();
0055     });
0056 
0057     qmlRegisterSingletonType<FolioSettings>(uri, 1, 0, "FolioSettings", [](QQmlEngine *, QJSEngine *) -> QObject * {
0058         return FolioSettings::self();
0059     });
0060 
0061     qmlRegisterSingletonType<HomeScreenState>(uri, 1, 0, "HomeScreenState", [](QQmlEngine *, QJSEngine *) -> QObject * {
0062         return HomeScreenState::self();
0063     });
0064 
0065     qmlRegisterType<FolioApplication>(uri, 1, 0, "FolioApplication");
0066     qmlRegisterType<FolioApplicationFolder>(uri, 1, 0, "FolioApplicationFolder");
0067     qmlRegisterType<FolioWidget>(uri, 1, 0, "FolioWidget");
0068     qmlRegisterType<FolioDelegate>(uri, 1, 0, "FolioDelegate");
0069     qmlRegisterType<PageModel>(uri, 1, 0, "PageModel");
0070     qmlRegisterType<FolioPageDelegate>(uri, 1, 0, "FolioPageDelegate");
0071     qmlRegisterType<DelegateTouchArea>(uri, 1, 0, "DelegateTouchArea");
0072     qmlRegisterType<DelegateDragPosition>(uri, 1, 0, "DelegateDragPosition");
0073     qmlRegisterType<WidgetContainer>(uri, 1, 0, "WidgetContainer");
0074 
0075     connect(KWindowSystem::self(), &KWindowSystem::showingDesktopChanged, this, &HomeScreen::showingDesktopChanged);
0076 
0077     connect(this, &Plasma::Containment::appletAdded, this, &HomeScreen::onAppletAdded);
0078     connect(this, &Plasma::Containment::appletAboutToBeRemoved, this, &HomeScreen::onAppletAboutToBeRemoved);
0079 }
0080 
0081 HomeScreen::~HomeScreen() = default;
0082 
0083 void HomeScreen::configChanged()
0084 {
0085     Plasma::Containment::configChanged();
0086 }
0087 
0088 void HomeScreen::onAppletAdded(Plasma::Applet *applet, const QRectF &geometryHint)
0089 {
0090     WidgetsManager::self()->addWidget(applet);
0091 }
0092 
0093 void HomeScreen::onAppletAboutToBeRemoved(Plasma::Applet *applet)
0094 {
0095     WidgetsManager::self()->removeWidget(applet);
0096 }
0097 
0098 K_PLUGIN_CLASS(HomeScreen)
0099 
0100 #include "homescreen.moc"