folio: Port to plasma_add_applet

Use plasma_add_applet to deploy as a module: https://invent.kde.org/plasma/libplasma/-/merge_requests/1116
This commit is contained in:
Devin Lin 2025-07-16 13:02:18 -04:00
parent e15ccad334
commit f7f657131b
51 changed files with 148 additions and 88 deletions

View file

@ -3,42 +3,84 @@
add_definitions(-DTRANSLATION_DOMAIN=\"plasma_applet_org.kde.plasma.mobile.homescreen.folio\")
set(homescreen_SRCS
homescreen.cpp
applicationlistmodel.cpp
homescreenstate.cpp
windowlistener.cpp
favouritesmodel.cpp
folioapplication.cpp
folioapplicationfolder.cpp
foliodelegate.cpp
foliosettings.cpp
foliowidget.cpp
pagemodel.cpp
pagelistmodel.cpp
delegatetoucharea.cpp
dragstate.cpp
widgetcontainer.cpp
widgetsmanager.cpp
plasma_add_applet(org.kde.plasma.mobile.homescreen.folio
QML_SOURCES
qml/AppDrawer.qml
qml/AppDrawerGrid.qml
qml/AppDrawerHeader.qml
qml/DelegateDragItem.qml
qml/FavouritesBar.qml
qml/FolderView.qml
qml/FolderViewTitle.qml
qml/FolioHomeScreen.qml
qml/HomeScreenPage.qml
qml/HomeScreenPages.qml
qml/main.qml
qml/PlaceholderDelegate.qml
qml/WidgetDragItem.qml
CPP_SOURCES
applicationlistmodel.cpp
delegatetoucharea.cpp
dragstate.cpp
favouritesmodel.cpp
folioapplication.cpp
folioapplicationfolder.cpp
foliodelegate.cpp
foliosettings.cpp
foliowidget.cpp
homescreen.cpp
homescreenstate.cpp
pagelistmodel.cpp
pagemodel.cpp
widgetcontainer.cpp
widgetsmanager.cpp
windowlistener.cpp
)
add_library(org.kde.plasma.mobile.homescreen.folio MODULE ${homescreen_SRCS})
target_link_libraries(org.kde.plasma.mobile.homescreen.folio
Qt::Gui
Qt::Qml
Qt::Quick
Plasma::Plasma
Plasma::PlasmaQuick
KF6::I18n
KF6::Service
KF6::KIOGui
KF6::Notifications
Plasma::KWaylandClient
KF6::WindowSystem
KF6::JobWidgets
ecm_target_qml_sources(org.kde.plasma.mobile.homescreen.folio SOURCES
qml/delegate/AbstractDelegate.qml
qml/delegate/AppDelegate.qml
qml/delegate/AppFolderDelegate.qml
qml/delegate/DelegateAppIcon.qml
qml/delegate/DelegateFolderIcon.qml
qml/delegate/DelegateIconLoader.qml
qml/delegate/DelegateLabel.qml
qml/delegate/DelegateShadow.qml
qml/delegate/KeyboardHighlight.qml
qml/delegate/WidgetDelegate.qml
qml/delegate/WidgetDelegateConfig.qml
PATH delegate
)
install(TARGETS org.kde.plasma.mobile.homescreen.folio DESTINATION ${KDE_INSTALL_PLUGINDIR}/plasma/applets)
ecm_target_qml_sources(org.kde.plasma.mobile.homescreen.folio SOURCES
qml/private/ConfirmDeleteFolderDialogLoader.qml
qml/private/ContextMenuLoader.qml
qml/private/DarkenEffect.qml
qml/private/Orientation.qml
qml/private/WidgetHandlePosition.qml
qml/private/WidgetResizeHandle.qml
qml/private/WidgetResizeHandleFrame.qml
PATH private
)
plasma_install_package(package org.kde.plasma.mobile.homescreen.folio)
ecm_target_qml_sources(org.kde.plasma.mobile.homescreen.folio SOURCES
qml/settings/AppletListViewer.qml
qml/settings/SettingsComponent.qml
qml/settings/SettingsWindow.qml
PATH settings
)
target_link_libraries(org.kde.plasma.mobile.homescreen.folio PRIVATE
Qt::Gui
Qt::Qml
Qt::Quick
Plasma::Plasma
Plasma::PlasmaQuick
KF6::I18n
KF6::Service
KF6::KIOGui
KF6::Notifications
Plasma::KWaylandClient
KF6::WindowSystem
KF6::JobWidgets
)

View file

@ -24,6 +24,8 @@ class FolioDelegate;
class ApplicationListModel : public QAbstractListModel
{
Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("")
public:
enum Roles {
@ -59,6 +61,8 @@ protected:
class ApplicationListSearchModel : public QSortFilterProxyModel
{
Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("")
public:
ApplicationListSearchModel(HomeScreen *parent = nullptr, ApplicationListModel *model = nullptr);

View file

@ -16,6 +16,7 @@
class DelegateTouchArea : public QQuickItem
{
Q_OBJECT
QML_ELEMENT
Q_PROPERTY(bool pressed READ pressed NOTIFY pressedChanged FINAL)
Q_PROPERTY(bool hovered READ hovered NOTIFY hoveredChanged FINAL)

View file

@ -17,6 +17,9 @@ class HomeScreenState;
class DelegateDragPosition : public QObject
{
Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("")
Q_PROPERTY(DelegateDragPosition::Location location READ location NOTIFY locationChanged)
Q_PROPERTY(int page READ page NOTIFY pageChanged)
Q_PROPERTY(int pageRow READ pageRow NOTIFY pageRowChanged)

View file

@ -27,6 +27,8 @@ struct FavouritesDelegate {
class FavouritesModel : public QAbstractListModel
{
Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("")
public:
enum Roles {

View file

@ -26,6 +26,9 @@ class HomeScreen;
class FolioApplication : public QObject, public std::enable_shared_from_this<FolioApplication>
{
Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("")
Q_PROPERTY(bool running READ running NOTIFY windowChanged)
Q_PROPERTY(QString name READ name NOTIFY nameChanged)
Q_PROPERTY(QString icon READ icon NOTIFY iconChanged)

View file

@ -31,6 +31,9 @@ class FolioApplication;
class FolioApplicationFolder : public QObject, public std::enable_shared_from_this<FolioApplicationFolder>
{
Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("")
Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
Q_PROPERTY(QList<FolioApplication *> appPreviews READ appPreviews NOTIFY applicationsChanged)
Q_PROPERTY(ApplicationFolderModel *applications READ applications NOTIFY applicationsReset)

View file

@ -18,6 +18,9 @@ class FolioWidget;
class FolioDelegate : public QObject, public std::enable_shared_from_this<FolioDelegate>
{
Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("")
Q_PROPERTY(FolioDelegate::Type type READ type CONSTANT)
Q_PROPERTY(FolioApplication *application READ applicationRaw CONSTANT)
Q_PROPERTY(FolioApplicationFolder *folder READ folderRaw CONSTANT)
@ -64,9 +67,11 @@ protected:
class FolioPageDelegate : public FolioDelegate
{
Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("")
Q_PROPERTY(int row READ row NOTIFY rowChanged)
Q_PROPERTY(int column READ column NOTIFY columnChanged)
QML_UNCREATABLE("")
public:
typedef std::shared_ptr<FolioPageDelegate> Ptr;

View file

@ -14,6 +14,9 @@ class HomeScreen;
class FolioSettings : public QObject
{
Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("")
Q_PROPERTY(int homeScreenRows READ homeScreenRows WRITE setHomeScreenRows NOTIFY homeScreenRowsChanged)
Q_PROPERTY(int homeScreenColumns READ homeScreenColumns WRITE setHomeScreenColumns NOTIFY homeScreenColumnsChanged)
Q_PROPERTY(bool showPagesAppLabels READ showPagesAppLabels WRITE setShowPagesAppLabels NOTIFY showPagesAppLabelsChanged)

View file

@ -25,6 +25,9 @@ public:
class FolioWidget : public QObject, public std::enable_shared_from_this<FolioWidget>
{
Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("")
Q_PROPERTY(int id READ id NOTIFY idChanged)
Q_PROPERTY(int gridWidth READ gridWidth NOTIFY gridWidthChanged)
Q_PROPERTY(int gridHeight READ gridHeight NOTIFY gridHeightChanged)

View file

@ -11,6 +11,8 @@
#include <QQmlExtensionPlugin>
#include <QQuickItem>
K_PLUGIN_CLASS_WITH_JSON(HomeScreen, "metadata.json")
HomeScreen::HomeScreen(QObject *parent, const KPluginMetaData &data, const QVariantList &args)
: Plasma::Containment{parent, data, args}
, m_folioSettings{new FolioSettings{this}}
@ -24,24 +26,6 @@ HomeScreen::HomeScreen(QObject *parent, const KPluginMetaData &data, const QVari
// HomeScreenState init() has dependencies on other objects
m_homeScreenState->init();
const char *uri = "org.kde.private.mobile.homescreen.folio";
qmlRegisterUncreatableType<HomeScreen>(uri, 1, 0, "HomeScreen", "");
qmlRegisterUncreatableType<ApplicationListModel>(uri, 1, 0, "ApplicationListModel", "");
qmlRegisterUncreatableType<ApplicationListSearchModel>(uri, 1, 0, "ApplicationListSearchModel", "");
qmlRegisterUncreatableType<FavouritesModel>(uri, 1, 0, "FavouritesModel", "");
qmlRegisterUncreatableType<PageListModel>(uri, 1, 0, "PageListModel", "");
qmlRegisterUncreatableType<FolioSettings>(uri, 1, 0, "FolioSettings", "");
qmlRegisterUncreatableType<HomeScreenState>(uri, 1, 0, "HomeScreenState", "");
qmlRegisterUncreatableType<FolioApplication>(uri, 1, 0, "FolioApplication", "");
qmlRegisterUncreatableType<FolioApplicationFolder>(uri, 1, 0, "FolioApplicationFolder", "");
qmlRegisterUncreatableType<FolioWidget>(uri, 1, 0, "FolioWidget", "");
qmlRegisterUncreatableType<FolioDelegate>(uri, 1, 0, "FolioDelegate", "");
qmlRegisterUncreatableType<PageModel>(uri, 1, 0, "PageModel", "");
qmlRegisterUncreatableType<FolioPageDelegate>(uri, 1, 0, "FolioPageDelegate", "");
qmlRegisterType<DelegateTouchArea>(uri, 1, 0, "DelegateTouchArea");
qmlRegisterUncreatableType<DelegateDragPosition>(uri, 1, 0, "DelegateDragPosition", "");
qmlRegisterType<WidgetContainer>(uri, 1, 0, "WidgetContainer");
setHasConfigurationInterface(true);
connect(KWindowSystem::self(), &KWindowSystem::showingDesktopChanged, this, &HomeScreen::showingDesktopChanged);
@ -103,6 +87,4 @@ PageListModel *HomeScreen::pageListModel()
return m_pageListModel;
}
K_PLUGIN_CLASS(HomeScreen)
#include "homescreen.moc"

View file

@ -32,6 +32,8 @@ class ApplicationListSearchModel;
class HomeScreen : public Plasma::Containment
{
Q_OBJECT
QML_ELEMENT
Q_PROPERTY(FolioSettings *FolioSettings READ folioSettings CONSTANT)
Q_PROPERTY(HomeScreenState *HomeScreenState READ homeScreenState CONSTANT)
Q_PROPERTY(WidgetsManager *WidgetsManager READ widgetsManager CONSTANT)

View file

@ -24,6 +24,9 @@ class HomeScreen;
class HomeScreenState : public QObject
{
Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("")
Q_PROPERTY(HomeScreenState::SwipeState swipeState READ swipeState NOTIFY swipeStateChanged)
Q_PROPERTY(HomeScreenState::ViewState viewState READ viewState NOTIFY viewStateChanged)
Q_PROPERTY(DragState *dragState READ dragState CONSTANT)

View file

@ -1,5 +1,4 @@
{
"KPackageStructure": "Plasma/Applet",
"KPlugin": {
"Authors": [
{
@ -83,7 +82,6 @@
"Description[x-test]": "xxMobile homescreen with a focus on customizability.xx",
"Description[zh_CN]": "高可定制性的手机主屏幕方案。",
"Description[zh_TW]": "注重可自訂性的手機主畫面。",
"Id": "org.kde.plasma.mobile.homescreen.folio",
"License": "GPLv2+",
"Name": "Folio",
"Name[ar]": "مطوية",

View file

@ -17,6 +17,9 @@ class PageModel;
class PageListModel : public QAbstractListModel
{
Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("")
Q_PROPERTY(int length READ length NOTIFY lengthChanged)
public:

View file

@ -20,6 +20,8 @@ class FolioPageDelegate;
class PageModel : public QAbstractListModel
{
Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("")
public:
enum Roles {

View file

@ -10,7 +10,7 @@ import org.kde.plasma.components 3.0 as PC3
import org.kde.kirigami as Kirigami
import org.kde.plasma.private.mobileshell as MobileShell
import org.kde.private.mobile.homescreen.folio as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import 'private'

View file

@ -11,7 +11,7 @@ import org.kde.kirigami as Kirigami
import org.kde.plasma.private.mobileshell as MobileShell
import org.kde.plasma.private.mobileshell.state as MobileShellState
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import "./delegate"

View file

@ -8,7 +8,7 @@ import QtQuick.Layouts
import org.kde.kirigami as Kirigami
import org.kde.plasma.components 3.0 as PlasmaComponents
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import './delegate'
Item {

View file

@ -5,7 +5,7 @@ import QtQuick
import QtQuick.Layouts
import org.kde.kirigami 2.20 as Kirigami
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import org.kde.plasma.private.mobileshell as MobileShell
import "./delegate"

View file

@ -7,7 +7,7 @@ import QtQuick.Layouts 1.1
import org.kde.plasma.components 3.0 as PC3
import org.kde.plasma.private.mobileshell.state as MobileShellState
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import org.kde.plasma.private.mobileshell as MobileShell
import org.kde.kirigami 2.10 as Kirigami

View file

@ -9,7 +9,7 @@ import QtQuick.Controls as QQC2
import org.kde.kirigami 2.20 as Kirigami
import org.kde.plasma.private.mobileshell as MobileShell
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import "./private"
import "./delegate"

View file

@ -9,7 +9,7 @@ import QtQuick.Controls as QQC2
import org.kde.kirigami 2.20 as Kirigami
import org.kde.plasma.private.mobileshell as MobileShell
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
MobileShell.BaseItem {
id: root

View file

@ -12,7 +12,7 @@ import org.kde.kirigami 2.20 as Kirigami
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.components 3.0 as PC3
import org.kde.plasma.private.mobileshell as MobileShell
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import "./delegate"
import "./settings"

View file

@ -9,7 +9,7 @@ import QtQuick.Effects
import org.kde.plasma.components 3.0 as PC3
import org.kde.plasma.private.mobileshell.state as MobileShellState
import org.kde.plasma.private.mobileshell as MobileShell
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import org.kde.kirigami as Kirigami
import "./delegate"

View file

@ -8,7 +8,7 @@ import QtQuick.Layouts
import org.kde.plasma.components 3.0 as PC3
import org.kde.plasma.private.mobileshell as MobileShell
import org.kde.kirigami 2.10 as Kirigami
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
MouseArea {
id: root

View file

@ -4,7 +4,7 @@
import QtQuick
import QtQuick.Layouts
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import org.kde.kirigami 2.10 as Kirigami
import "./delegate"

View file

@ -11,7 +11,7 @@ import org.kde.plasma.core as PlasmaCore
import org.kde.ksvg 1.0 as KSvg
import org.kde.plasma.components 3.0 as PC3
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import './delegate'
import './private'

View file

@ -11,7 +11,7 @@ import org.kde.kirigami 2.20 as Kirigami
import org.kde.kquickcontrolsaddons 2.0
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import org.kde.plasma.private.mobileshell.shellsettingsplugin as ShellSettings
import org.kde.plasma.private.mobileshell as MobileShell

View file

@ -8,7 +8,7 @@ import QtQuick.Effects
import org.kde.kirigami 2.20 as Kirigami
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import org.kde.plasma.private.mobileshell.state as MobileShellState
import org.kde.plasma.private.mobileshell as MobileShell
import org.kde.plasma.plasmoid

View file

@ -6,7 +6,7 @@ import QtQuick.Layouts
import QtQuick.Controls as Controls
import QtQuick.Effects
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
AbstractDelegate {
id: root

View file

@ -8,7 +8,7 @@ import QtQuick.Effects
import org.kde.kirigami 2.20 as Kirigami
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
Kirigami.Icon {
id: root

View file

@ -8,7 +8,7 @@ import QtQuick.Effects
import org.kde.kirigami 2.20 as Kirigami
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import org.kde.plasma.private.mobileshell as MobileShell
Item {

View file

@ -8,7 +8,7 @@ import QtQuick.Effects
import org.kde.kirigami 2.20 as Kirigami
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import org.kde.plasma.private.mobileshell as MobileShell
Loader {

View file

@ -7,7 +7,7 @@ import QtQuick.Layouts
import org.kde.kirigami 2.20 as Kirigami
import org.kde.plasma.components 3.0 as PC3
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
PC3.Label {
id: label

View file

@ -11,7 +11,7 @@ import org.kde.plasma.core as PlasmaCore
import org.kde.ksvg 1.0 as KSvg
import org.kde.plasma.components 3.0 as PC3
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import '../private'

View file

@ -11,7 +11,7 @@ import org.kde.plasma.core as PlasmaCore
import org.kde.ksvg 1.0 as KSvg
import org.kde.plasma.components 3.0 as PC3
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import '../private'

View file

@ -14,10 +14,11 @@ import org.kde.plasma.components 3.0 as PlasmaComponents
import org.kde.plasma.private.mobileshell as MobileShell
import org.kde.plasma.private.mobileshell.state as MobileShellState
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import org.kde.plasma.private.mobileshell.windowplugin as WindowPlugin
import org.kde.plasma.private.mobileshell.shellsettingsplugin as ShellSettings
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import "./private"
ContainmentItem {
@ -155,7 +156,7 @@ ContainmentItem {
contentItem: Item {
// homescreen component
HomeScreen {
FolioHomeScreen {
id: folioHomeScreen
folio: root.folio
maskManager: root.maskManager

View file

@ -7,7 +7,7 @@ import QtQuick.Controls as QQC2
import Qt5Compat.GraphicalEffects
import org.kde.kirigami as Kirigami
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import '../delegate'

View file

@ -11,7 +11,7 @@ import org.kde.kirigami as Kirigami
import org.kde.plasma.plasmoid
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.private.shell 2.0
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import org.kde.kirigamiaddons.formcard 1.0 as FormCard
import org.kde.plasma.components 3.0 as PC3
import org.kde.plasma.private.mobileshell as MobileShell
@ -40,7 +40,7 @@ MouseArea {
color: Qt.rgba(0, 0, 0, 0.7)
}
PlasmaExtras.ModelContextMenu {
id: getWidgetsDialog
visualParent: getWidgetsButton

View file

@ -10,7 +10,7 @@ import org.kde.kirigami 2.20 as Kirigami
import org.kde.plasma.components 3.0 as PC3
import org.kde.plasma.private.mobileshell as MobileShell
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import '../delegate'
@ -235,7 +235,7 @@ Item {
Behavior on opacity {
NumberAnimation { duration: Kirigami.Units.shortDuration }
}
sourceComponent: AppletListViewer {
id: appletListViewer
folio: root.folio

View file

@ -9,7 +9,7 @@ import QtQuick.Controls as QQC2
import org.kde.kirigami 2.20 as Kirigami
import org.kde.private.mobile.homescreen.folio 1.0 as Folio
import plasma.applet.org.kde.plasma.mobile.homescreen.folio as Folio
import org.kde.kirigamiaddons.formcard 1.0 as FormCard
import '../delegate'

View file

@ -10,9 +10,9 @@
class WidgetContainer : public QQuickItem
{
Q_OBJECT
Q_PROPERTY(bool editMode READ editMode WRITE setEditMode NOTIFY editModeChanged)
QML_ELEMENT
QML_NAMED_ELEMENT(WidgetContainer)
Q_PROPERTY(bool editMode READ editMode WRITE setEditMode NOTIFY editModeChanged)
public:
WidgetContainer(QQuickItem *parent = nullptr);